From 0ec16922e766869dfd89ba18a57f98940bd5f524 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 18 Jan 2018 19:36:05 -0500 Subject: [PATCH 001/116] Fix forumdirectory reference to deleted files/functions - Fix formatting - Fix reference to nav_set_selected - Fix reference to widget_findpeople --- forumdirectory/forumdirectory.php | 244 +++++++++++++++--------------- 1 file changed, 123 insertions(+), 121 deletions(-) diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 890c3d61..393063cb 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -1,206 +1,208 @@ -*/ + * Name: Forum Directory + * Description: Add a directory of forums hosted on your server, with verbose descriptions. + * Version: 1.0 + * Author: Thomas Willingham + */ +use Friendica\Content\Nav; +use Friendica\Content\Widget; use Friendica\Core\Config; +use Friendica\Database\DBM; -function forumdirectory_install() { -register_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +function forumdirectory_install() +{ + register_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } -function forumdirectory_uninstall() { -unregister_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +function forumdirectory_uninstall() +{ + unregister_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } -function forumdirectory_module() { -return; +function forumdirectory_module() +{ + return; } -function forumdirectory_app_menu($a,&$b) { -$b['app_menu'][] = ''; +function forumdirectory_app_menu($a, &$b) +{ + $b['app_menu'][] = ''; } -function forumdirectory_init(&$a) { - $a->page['htmlhead'] .= ''; +function forumdirectory_init(&$a) +{ + $a->page['htmlhead'] .= ''; $a->set_pager_itemspage(60); - if(local_user()) { - require_once('include/contact_widgets.php'); - - $a->page['aside'] .= findpeople_widget(); - - } - else + if (local_user()) { + $a->page['aside'] .= Widget::findPeople(); + } else { unset($_SESSION['theme']); - - + } } - -function forumdirectory_post(&$a) { - if(x($_POST,'search')) +function forumdirectory_post(&$a) +{ + if (x($_POST, 'search')) { $a->data['search'] = $_POST['search']; + } } - - -function forumdirectory_content(&$a) { - - if((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) { - notice( t('Public access denied.') . EOL); +function forumdirectory_content(&$a) +{ + if ((Config::get('system', 'block_public')) && (!local_user()) && (!remote_user())) { + notice(t('Public access denied.') . EOL); return; } $o = ''; - nav_set_selected('directory'); + Nav::setSelected('directory'); - if(x($a->data,'search')) + if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); - else - $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); + } else { + $search = ((x($_GET, 'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); + } $tpl = get_markup_template('directory_header.tpl'); $globaldir = ''; - $gdirpath = Config::get('system','directory'); - if(strlen($gdirpath)) { + $gdirpath = Config::get('system', 'directory'); + if (strlen($gdirpath)) { $globaldir = ''; + . zrl($gdirpath, true) . '">' . t('Global Directory') . ''; } $admin = ''; $o .= replace_macros($tpl, [ - '$search' => $search, + '$search' => $search, '$globaldir' => $globaldir, - '$desc' => t('Find on this site'), - '$admin' => $admin, - '$finding' => (strlen($search) ? '

' . t('Finding: ') . "'" . $search . "'" . '

' : ""), - '$sitedir' => t('Site Directory'), - '$submit' => t('Find') + '$desc' => t('Find on this site'), + '$admin' => $admin, + '$finding' => (strlen($search) ? '

' . t('Finding: ') . "'" . $search . "'" . '

' : ""), + '$sitedir' => t('Site Directory'), + '$submit' => t('Find') ]); - if($search) - $search = dbesc($search); - $sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : ""); + $sql_extra = ''; + if (strlen($search)) { + $sql_extra = " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`," + . "`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` )" + . " AGAINST ('" . dbesc($search) . "' IN BOOLEAN MODE) "; + } - $publish = ((Config::get('system','publish_all')) ? '' : " AND `publish` = 1 " ); + $publish = Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 "; - - $r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra "); - if(count($r)) + $r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`" + . " WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra "); + if (DBM::is_result($r)) { $a->set_pager_total($r[0]['total']); + } $order = " ORDER BY `name` ASC "; - - $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra $order LIMIT %d , %d ", + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`" + . " FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish" + . " AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra $order LIMIT %d , %d ", intval($a->pager['start']), intval($a->pager['itemspage']) ); - if(count($r)) { - - if(in_array('small', $a->argv)) + if (DBM::is_result($r)) { + if (in_array('small', $a->argv)) { $photo = 'thumb'; - else + } else { $photo = 'photo'; + } - foreach($r as $rr) { - - + foreach ($r as $rr) { $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); $pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '
' : ''); $details = ''; - if(strlen($rr['locality'])) + if (strlen($rr['locality'])) { $details .= $rr['locality']; - if(strlen($rr['region'])) { - if(strlen($rr['locality'])) + } + + if (strlen($rr['region'])) { + if (strlen($rr['locality'])) { $details .= ', '; + } $details .= $rr['region']; } - if(strlen($rr['country-name'])) { - if(strlen($details)) + if (strlen($rr['country-name'])) { + if (strlen($details)) { $details .= ', '; + } $details .= $rr['country-name']; } - if(strlen($rr['dob'])) { - if(($years = age($rr['dob'],$rr['timezone'],'')) != 0) - $details .= '
' . t('Age: ') . $years ; - } - if(strlen($rr['gender'])) - $details .= '
' . t('Gender: ') . $rr['gender']; - if($rr['page-flags'] == PAGE_NORMAL) - $page_type = "Personal Profile"; - if($rr['page-flags'] == PAGE_SOAPBOX) - $page_type = "Fan Page"; - if($rr['page-flags'] == PAGE_COMMUNITY) - $page_type = "Community Forum"; - if($rr['page-flags'] == PAGE_FREELOVE) - $page_type = "Open Forum"; - if($rr['page-flags'] == PAGE_PRVGROUP) - $page_type = "Private Group"; + if (strlen($rr['dob']) && ($years = age($rr['dob'], $rr['timezone'], '')) != 0) { + $details .= '
' . t('Age: ') . $years; + } + + if (strlen($rr['gender'])) { + $details .= '
' . t('Gender: ') . $rr['gender']; + } + + switch ($rr['page-flags']) { + case PAGE_NORMAL : $page_type = "Personal Profile"; break; + case PAGE_SOAPBOX : $page_type = "Fan Page" ; break; + case PAGE_COMMUNITY: $page_type = "Community Forum" ; break; + case PAGE_FREELOVE : $page_type = "Open Forum" ; break; + case PAGE_PRVGROUP : $page_type = "Private Group" ; break; + } $profile = $rr; - if((x($profile,'address') == 1) - || (x($profile,'locality') == 1) - || (x($profile,'region') == 1) - || (x($profile,'postal-code') == 1) - || (x($profile,'country-name') == 1)) - $location = t('Location:'); + $location = ''; + if (x($profile, 'address') == 1 + || x($profile, 'locality') == 1 + || x($profile, 'region') == 1 + || x($profile, 'postal-code') == 1 + || x($profile, 'country-name') == 1 + ) { + $location = t('Location:'); + } - $gender = ((x($profile,'gender') == 1) ? t('Gender:') : False); - - $marital = ((x($profile,'marital') == 1) ? t('Status:') : False); - - $homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False); - - $about = ((x($profile,'about') == 1) ? t('About:') : False); + $gender = x($profile, 'gender') == 1 ? t('Gender:') : false; + $marital = x($profile, 'marital') == 1 ? t('Status:') : false; + $homepage = x($profile, 'homepage') == 1 ? t('Homepage:') : false; + $about = x($profile, 'about') == 1 ? t('About:') : false; # $tpl = file_get_contents( dirname(__file__).'/forumdirectory_item.tpl'); - $tpl = get_markup_template( 'forumdirectory_item.tpl', 'addon/forumdirectory/' ); + $tpl = get_markup_template('forumdirectory_item.tpl', 'addon/forumdirectory/'); - $entry = replace_macros($tpl,[ - '$id' => $rr['id'], + $entry = replace_macros($tpl, [ + '$id' => $rr['id'], '$profile_link' => $profile_link, - '$photo' => $rr[$photo], - '$alt_text' => $rr['name'], - '$name' => $rr['name'], - '$details' => $pdesc . $details, - '$page_type' => $page_type, - '$profile' => $profile, - '$location' => $location, - '$gender' => $gender, - '$pdesc' => $pdesc, - '$marital' => $marital, - '$homepage' => $homepage, - '$about' => $about, - + '$photo' => $rr[$photo], + '$alt_text' => $rr['name'], + '$name' => $rr['name'], + '$details' => $pdesc . $details, + '$page_type' => $page_type, + '$profile' => $profile, + '$location' => $location, + '$gender' => $gender, + '$pdesc' => $pdesc, + '$marital' => $marital, + '$homepage' => $homepage, + '$about' => $about, ]); - $arr = ['contact' => $rr, 'entry' => $entry]; - - unset($profile); - unset($location); - $o .= $entry; - } $o .= "
\r\n"; $o .= paginate($a); - + } else { + info(t("No entries \x28some entries may be hidden\x29.") . EOL); } - else - info( t("No entries \x28some entries may be hidden\x29.") . EOL); return $o; } From 3b093a1bff818d8217e8e73a41f660ec2f23bd6d Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 19 Jan 2018 05:36:01 +0000 Subject: [PATCH 002/116] We now use the new delete function for items --- pumpio/pumpio.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index d8538dcc..6aaa0565 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -12,6 +12,7 @@ use Friendica\Model\Contact; use Friendica\Model\GContact; use Friendica\Model\Group; use Friendica\Model\User; +use Friendica\Model\Item; require 'addon/pumpio/oauth/http.php'; require 'addon/pumpio/oauth/oauth_client.php'; @@ -1054,7 +1055,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return drop_item($r[0]["id"], $false); + return Item::delete($r[0]["id"]); $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", dbesc($post->object->id), @@ -1062,7 +1063,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return drop_item($r[0]["id"], $false); + return Item::delete($r[0]["id"]); } function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = true) { From 0afd633346b517894ff8e92c705bd5d052dd06a2 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Tue, 16 Jan 2018 19:51:12 -0500 Subject: [PATCH 003/116] Addon class plugin moved to Addon src class --- blackout/blackout.php | 5 +- blockem/blockem.php | 32 ++++++------ blogger/blogger.php | 29 +++++------ buffer/buffer.php | 21 ++++---- buglink/buglink.php | 8 +-- calc/calc.php | 6 +-- communityhome/communityhome.php | 6 +-- convert/convert.php | 5 +- curweather/curweather.php | 13 ++--- dav/friendica/main.php | 17 ++++--- diaspora/diaspora.php | 25 ++++----- dwpost/dwpost.php | 23 ++++----- fortunate/fortunate.php | 5 +- forumdirectory/forumdirectory.php | 11 ++-- fromapp/fromapp.php | 14 ++--- fromgplus/fromgplus.php | 17 ++++--- geocoordinates/geocoordinates.php | 10 ++-- geonames/geonames.php | 14 ++--- gnot/gnot.php | 14 ++--- googlemaps/googlemaps.php | 6 +-- gravatar/gravatar.php | 6 +-- group_text/group_text.php | 12 ++--- ifttt/ifttt.php | 9 ++-- ijpost/ijpost.php | 23 ++++----- impressum/impressum.php | 9 ++-- .../infiniteimprobabilitydrive.php | 5 +- irc/irc.php | 12 ++--- jappixmini/jappixmini.php | 25 ++++----- js_upload/js_upload.php | 18 +++---- krynn/krynn.php | 14 ++--- langfilter/langfilter.php | 13 ++--- ldapauth/ldapauth.php | 5 +- leistungsschutzrecht/leistungsschutzrecht.php | 14 ++--- libertree/libertree.php | 22 ++++---- libravatar/libravatar.php | 6 +-- ljpost/ljpost.php | 23 ++++----- mahjongg/mahjongg.php | 6 +-- mailstream/mailstream.php | 32 ++++++------ mathjax/mathjax.php | 14 ++--- membersince/membersince.php | 5 +- morechoice/morechoice.php | 16 +++--- morepokes/morepokes.php | 5 +- namethingy/namethingy.php | 7 ++- newmemberwidget/newmemberwidget.php | 5 +- notimeline/notimeline.php | 10 ++-- nsfw/nsfw.php | 16 +++--- numfriends/numfriends.php | 12 ++--- openstreetmap/openstreetmap.php | 18 +++---- pageheader/pageheader.php | 18 +++---- piwik/piwik.php | 6 +-- planets/planets.php | 14 ++--- pledgie/pledgie.php | 14 ++--- public_server/public_server.php | 19 ++++--- pumpio/pumpio.php | 33 ++++++------ qcomment/qcomment.php | 10 ++-- randplace/randplace.php | 14 ++--- remote_permissions/remote_permissions.php | 14 ++--- rendertime/rendertime.php | 10 ++-- securemail/securemail.php | 13 ++--- showmore/showmore.php | 14 ++--- .../lang/smiley_pack_es/smiley_pack_es.php | 9 ++-- .../lang/smiley_pack_fr/smiley_pack_fr.php | 5 +- smiley_pack/smiley_pack.php | 8 ++- smileybutton/smileybutton.php | 6 +-- smilies_adult/smilies_adult.php | 5 +- sniper/sniper.php | 6 +-- startpage/startpage.php | 14 ++--- statusnet/statusnet.php | 39 +++++++------- superblock/superblock.php | 22 ++++---- testdrive/testdrive.php | 18 +++---- tictac/tictac.php | 6 +-- tumblr/tumblr.php | 21 ++++---- twitter/twitter.php | 51 ++++++++++--------- unicode_smilies/unicode_smilies.php | 6 +-- viewsrc/viewsrc.php | 11 ++-- webrtc/webrtc.php | 6 +-- widgets/widgets.php | 10 ++-- windowsphonepush/windowsphonepush.php | 13 ++--- wppost/wppost.php | 28 +++++----- xmpp/xmpp.php | 17 ++++--- yourls/yourls.php | 10 ++-- 81 files changed, 567 insertions(+), 566 deletions(-) diff --git a/blackout/blackout.php b/blackout/blackout.php index 2693db5a..94e081ce 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -50,13 +50,14 @@ */ use Friendica\Core\Config; +use Friendica\Core\Addon; function blackout_install() { - register_hook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); + Addon::registerHook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); } function blackout_uninstall() { - unregister_hook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); + Addon::unregisterHook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); } function blackout_redirect ($a, $b) { // if we have a logged in user, don't throw her out diff --git a/blockem/blockem.php b/blockem/blockem.php index 2c91373f..2a2cd3d2 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -1,6 +1,4 @@ * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function blockem_install() { - register_hook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); - register_hook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - register_hook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - register_hook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); - register_hook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); - register_hook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - register_hook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); + Addon::registerHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); + Addon::registerHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); + Addon::registerHook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::registerHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); + Addon::registerHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); + Addon::registerHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); } function blockem_uninstall() { - unregister_hook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); - unregister_hook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - unregister_hook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); - unregister_hook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); - unregister_hook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - unregister_hook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); + Addon::unregisterHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); + Addon::unregisterHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); + Addon::unregisterHook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::unregisterHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); + Addon::unregisterHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); + Addon::unregisterHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); } diff --git a/blogger/blogger.php b/blogger/blogger.php index 093d9049..7c9e1c5d 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -1,33 +1,32 @@ */ +use Friendica\Core\Addon; + +function buglink_install() { Addon::registerHook('page_end', 'addon/buglink/buglink.php', 'buglink_active'); } -function buglink_install() { register_hook('page_end', 'addon/buglink/buglink.php', 'buglink_active'); } - - -function buglink_uninstall() { unregister_hook('page_end', 'addon/buglink/buglink.php', 'buglink_active'); } +function buglink_uninstall() { Addon::unregisterHook('page_end', 'addon/buglink/buglink.php', 'buglink_active'); } function buglink_active(&$a,&$b) { $b .= ''; } diff --git a/calc/calc.php b/calc/calc.php index a299d45e..176ade85 100644 --- a/calc/calc.php +++ b/calc/calc.php @@ -5,14 +5,14 @@ * Version: 1.0 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; function calc_install() { - register_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); + Addon::registerHook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); } function calc_uninstall() { - unregister_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); + Addon::unregisterHook('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); } diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 8364392b..f3e4783e 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -5,7 +5,7 @@ * Version: 2.0 * Author: Fabio Comuni */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Module\Login; @@ -13,12 +13,12 @@ require_once('mod/community.php'); function communityhome_install() { - register_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + Addon::registerHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); logger("installed communityhome"); } function communityhome_uninstall() { - unregister_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + Addon::unregisterHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); logger("removed communityhome"); } diff --git a/convert/convert.php b/convert/convert.php index 03b1e9d5..1ddd2978 100644 --- a/convert/convert.php +++ b/convert/convert.php @@ -5,13 +5,14 @@ * Version: 1.0 * Author: Mike Macgirvin */ +use Friendica\Core\Addon; function convert_install() { - register_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); + Addon::registerHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); } function convert_uninstall() { - unregister_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); + Addon::unregisterHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu'); } function convert_app_menu($a,&$b) { diff --git a/curweather/curweather.php b/curweather/curweather.php index 7b8b89e3..bcbba91d 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -13,6 +13,7 @@ require_once('include/network.php'); require_once("mod/proxy.php"); require_once('include/text.php'); +use Friendica\Core\Addon; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\PConfig; @@ -66,15 +67,15 @@ function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0) } function curweather_install() { - register_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); - register_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); - register_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); + Addon::registerHook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); + Addon::registerHook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); + Addon::registerHook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); } function curweather_uninstall() { - unregister_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); - unregister_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); - unregister_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); + Addon::unregisterHook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); + Addon::unregisterHook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); } function curweather_network_mod_init(&$fk_app,&$b) { diff --git a/dav/friendica/main.php b/dav/friendica/main.php index e1dfe84f..afeadcf0 100644 --- a/dav/friendica/main.php +++ b/dav/friendica/main.php @@ -1,5 +1,6 @@ */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function dwpost_install() { - register_hook('post_local', 'addon/dwpost/dwpost.php', 'dwpost_post_local'); - register_hook('notifier_normal', 'addon/dwpost/dwpost.php', 'dwpost_send'); - register_hook('jot_networks', 'addon/dwpost/dwpost.php', 'dwpost_jot_nets'); - register_hook('connector_settings', 'addon/dwpost/dwpost.php', 'dwpost_settings'); - register_hook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post'); + Addon::registerHook('post_local', 'addon/dwpost/dwpost.php', 'dwpost_post_local'); + Addon::registerHook('notifier_normal', 'addon/dwpost/dwpost.php', 'dwpost_send'); + Addon::registerHook('jot_networks', 'addon/dwpost/dwpost.php', 'dwpost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/dwpost/dwpost.php', 'dwpost_settings'); + Addon::registerHook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post'); } function dwpost_uninstall() { - unregister_hook('post_local', 'addon/dwpost/dwpost.php', 'dwpost_post_local'); - unregister_hook('notifier_normal', 'addon/dwpost/dwpost.php', 'dwpost_send'); - unregister_hook('jot_networks', 'addon/dwpost/dwpost.php', 'dwpost_jot_nets'); - unregister_hook('connector_settings', 'addon/dwpost/dwpost.php', 'dwpost_settings'); - unregister_hook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post'); + Addon::unregisterHook('post_local', 'addon/dwpost/dwpost.php', 'dwpost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/dwpost/dwpost.php', 'dwpost_send'); + Addon::unregisterHook('jot_networks', 'addon/dwpost/dwpost.php', 'dwpost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/dwpost/dwpost.php', 'dwpost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post'); } diff --git a/fortunate/fortunate.php b/fortunate/fortunate.php index 427d620c..8e28879c 100644 --- a/fortunate/fortunate.php +++ b/fortunate/fortunate.php @@ -5,20 +5,21 @@ * Version: 1.0 * Author: Mike Macgirvin */ +use Friendica\Core\Addon; // IMPORTANT: SET THIS to your fortunate server define ('FORTUNATE_SERVER', 'hostname.com'); function fortunate_install() { - register_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); + Addon::registerHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); if(FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) { notice('Fortunate plugin requires configuration. See README'); } } function fortunate_uninstall() { - unregister_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); + Addon::unregisterHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); } diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 393063cb..186697f2 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -9,17 +9,16 @@ use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Database\DBM; -function forumdirectory_install() -{ - register_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +function forumdirectory_install() { +Addon::registerHook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } -function forumdirectory_uninstall() -{ - unregister_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +function forumdirectory_uninstall() { +Addon::unregisterHook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } function forumdirectory_module() diff --git a/fromapp/fromapp.php b/fromapp/fromapp.php index 51392ff5..4872e2a0 100644 --- a/fromapp/fromapp.php +++ b/fromapp/fromapp.php @@ -6,14 +6,14 @@ * Author: Commander Zot * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function fromapp_install() { - register_hook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - register_hook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - register_hook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); + Addon::registerHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); + Addon::registerHook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::registerHook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("installed fromapp"); } @@ -21,9 +21,9 @@ function fromapp_install() { function fromapp_uninstall() { - unregister_hook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - unregister_hook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - unregister_hook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); + Addon::unregisterHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("removed fromapp"); diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index 464829a4..b8910d5d 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -9,6 +9,7 @@ define('FROMGPLUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Object\Image; @@ -18,19 +19,19 @@ require_once 'mod/parse_url.php'; require_once 'include/text.php'; function fromgplus_install() { - register_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - register_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); - register_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); + Addon::registerHook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::registerHook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::registerHook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); } function fromgplus_uninstall() { - unregister_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - unregister_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); - unregister_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); + Addon::unregisterHook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::unregisterHook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); // Old hooks - unregister_hook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); } function fromgplus_addon_settings(&$a,&$s) { diff --git a/geocoordinates/geocoordinates.php b/geocoordinates/geocoordinates.php index 0171f7c2..714b8d81 100644 --- a/geocoordinates/geocoordinates.php +++ b/geocoordinates/geocoordinates.php @@ -5,21 +5,21 @@ * Version: 0.1 * Author: Michael Vogel */ - +use Friendica\Core\Addon; use Friendica\Core\Cache; use Friendica\Core\Config; function geocoordinates_install() { - register_hook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); - register_hook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::registerHook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::registerHook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); } function geocoordinates_uninstall() { - unregister_hook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); - unregister_hook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::unregisterHook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::unregisterHook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); } function geocoordinates_resolve_item(&$item) diff --git a/geonames/geonames.php b/geonames/geonames.php index 71e05c8b..55ae1920 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -19,7 +19,7 @@ * system will call the name_uninstall() function. * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; @@ -32,7 +32,7 @@ function geonames_install() { * */ - register_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Addon::registerHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); /** * @@ -42,8 +42,8 @@ function geonames_install() { * */ - register_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - register_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::registerHook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); + Addon::registerHook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); logger("installed geonames"); } @@ -59,9 +59,9 @@ function geonames_uninstall() { * */ - unregister_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - unregister_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - unregister_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::unregisterHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); + Addon::unregisterHook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); logger("removed geonames"); diff --git a/gnot/gnot.php b/gnot/gnot.php index bbdf9d80..70f422b6 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -7,14 +7,14 @@ * * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function gnot_install() { - register_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - register_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); - register_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + Addon::registerHook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::registerHook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::registerHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); logger("installed gnot"); } @@ -22,9 +22,9 @@ function gnot_install() { function gnot_uninstall() { - unregister_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - unregister_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); - unregister_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + Addon::unregisterHook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::unregisterHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); logger("removed gnot"); diff --git a/googlemaps/googlemaps.php b/googlemaps/googlemaps.php index f5b573ac..e294c8e0 100644 --- a/googlemaps/googlemaps.php +++ b/googlemaps/googlemaps.php @@ -6,19 +6,19 @@ * Author: Michael Vogel * */ - +use Friendica\Core\Addon; use Friendica\Core\Cache; function googlemaps_install() { - register_hook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); + Addon::registerHook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); logger("installed googlemaps"); } function googlemaps_uninstall() { - unregister_hook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); + Addon::unregisterHook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); logger("removed googlemaps"); } diff --git a/gravatar/gravatar.php b/gravatar/gravatar.php index e38fb613..731129c0 100644 --- a/gravatar/gravatar.php +++ b/gravatar/gravatar.php @@ -5,14 +5,14 @@ * Version: 1.1 * Author: Klaus Weidenbach */ - +use Friendica\Core\Addon; use Friendica\Core\Config; /** * Installs the plugin hook */ function gravatar_install() { - register_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + Addon::registerHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); logger("registered gravatar in avatar_lookup hook"); } @@ -21,7 +21,7 @@ function gravatar_install() { * Removes the plugin hook */ function gravatar_uninstall() { - unregister_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + Addon::unregisterHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); logger("unregistered gravatar in avatar_lookup hook"); } diff --git a/group_text/group_text.php b/group_text/group_text.php index febb87a7..27bd173b 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -4,16 +4,14 @@ * Description: Disable images in group edit menu * Version: 1.0 * Author: Thomas Willingham - * - * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function group_text_install() { - register_hook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - register_hook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::registerHook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::registerHook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("installed group_text"); } @@ -21,8 +19,8 @@ function group_text_install() { function group_text_uninstall() { - unregister_hook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - unregister_hook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("removed group_text"); diff --git a/ifttt/ifttt.php b/ifttt/ifttt.php index 8a457df3..40cc5250 100644 --- a/ifttt/ifttt.php +++ b/ifttt/ifttt.php @@ -11,19 +11,20 @@ require_once 'include/items.php'; require_once 'include/text.php'; use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\PConfig; use Friendica\Database\DBM; function ifttt_install() { - register_hook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); - register_hook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); + Addon::registerHook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); + Addon::registerHook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); } function ifttt_uninstall() { - unregister_hook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); - unregister_hook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); + Addon::unregisterHook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); } function ifttt_module() diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index ccd45fca..16c14a79 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -1,5 +1,4 @@ */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function ijpost_install() { - register_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); - register_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); - register_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); - register_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); - register_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); + Addon::registerHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); + Addon::registerHook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); + Addon::registerHook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); + Addon::registerHook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); } function ijpost_uninstall() { - unregister_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); - unregister_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); - unregister_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); - unregister_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); - unregister_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); + Addon::unregisterHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); + Addon::unregisterHook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); } diff --git a/impressum/impressum.php b/impressum/impressum.php index 75103dd1..15e33869 100644 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -10,17 +10,18 @@ require_once('include/bbcode.php'); require_once('mod/proxy.php'); +use Friendica\Core\Addon; use Friendica\Core\Config; function impressum_install() { - register_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - register_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); + Addon::registerHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); + Addon::registerHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); logger("installed impressum plugin"); } function impressum_uninstall() { - unregister_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - unregister_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); + Addon::unregisterHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); + Addon::unregisterHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); logger("uninstalled impressum plugin"); } diff --git a/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php b/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php index 5e46b3b7..cdadf030 100644 --- a/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php +++ b/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php @@ -5,13 +5,14 @@ * Version: 1.0 * Author: Thomas Willingham */ +use Friendica\Core\Addon; function infiniteimprobabilitydrive_install() { -register_hook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); +Addon::registerHook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); } function infiniteimprobabilitydrive_uninstall() { -unregister_hook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); +Addon::unregisterHook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); } diff --git a/irc/irc.php b/irc/irc.php index cfede034..e2fd50ba 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -6,19 +6,19 @@ * Author: tony baldwin * Author: Tobias Diekershoff */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; function irc_install() { - register_hook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); - register_hook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); - register_hook('plugin_settings_post', 'addon/irc/irc.php', 'irc_addon_settings_post'); + Addon::registerHook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); + Addon::registerHook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/irc/irc.php', 'irc_addon_settings_post'); } function irc_uninstall() { - unregister_hook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); - unregister_hook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); + Addon::unregisterHook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); + Addon::unregisterHook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); } diff --git a/jappixmini/jappixmini.php b/jappixmini/jappixmini.php index f42155fc..2e3cbc77 100644 --- a/jappixmini/jappixmini.php +++ b/jappixmini/jappixmini.php @@ -63,22 +63,23 @@ */ use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Model\User; function jappixmini_install() { - register_hook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); - register_hook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); + Addon::registerHook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); + Addon::registerHook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); - register_hook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); - register_hook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); + Addon::registerHook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); + Addon::registerHook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); - register_hook('cron', 'addon/jappixmini/jappixmini.php', 'jappixmini_cron'); + Addon::registerHook('cron', 'addon/jappixmini/jappixmini.php', 'jappixmini_cron'); // Jappix source download as required by AGPL - register_hook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_download_source'); + Addon::registerHook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_download_source'); // set standard configuration $info_text = Config::get("jappixmini", "infotext"); @@ -103,15 +104,15 @@ function jappixmini_install() function jappixmini_uninstall() { - unregister_hook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); - unregister_hook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); - unregister_hook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); - unregister_hook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); + Addon::unregisterHook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); + Addon::unregisterHook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); - unregister_hook('cron', 'addon/jappixmini/jappixmini.php', 'jappixmini_cron'); + Addon::unregisterHook('cron', 'addon/jappixmini/jappixmini.php', 'jappixmini_cron'); - unregister_hook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_download_source'); + Addon::unregisterHook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_download_source'); } function jappixmini_plugin_admin(App $a, &$o) diff --git a/js_upload/js_upload.php b/js_upload/js_upload.php index cc3778cd..15393e8c 100644 --- a/js_upload/js_upload.php +++ b/js_upload/js_upload.php @@ -15,23 +15,23 @@ * Module Author: Chris Case * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function js_upload_install() { - register_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); - register_hook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); - register_hook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); - register_hook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); + Addon::registerHook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); + Addon::registerHook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); + Addon::registerHook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); + Addon::registerHook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); } function js_upload_uninstall() { - unregister_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); - unregister_hook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); - unregister_hook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); - unregister_hook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); + Addon::unregisterHook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form'); + Addon::unregisterHook('photo_post_init', 'addon/js_upload/js_upload.php', 'js_upload_post_init'); + Addon::unregisterHook('photo_post_file', 'addon/js_upload/js_upload.php', 'js_upload_post_file'); + Addon::unregisterHook('photo_post_end', 'addon/js_upload/js_upload.php', 'js_upload_post_end'); } diff --git a/krynn/krynn.php b/krynn/krynn.php index 17e7d2b4..93082419 100644 --- a/krynn/krynn.php +++ b/krynn/krynn.php @@ -9,7 +9,7 @@ * *"My body was my sacrifice... for my magic. This damage is permanent." - Raistlin Majere */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function krynn_install() { @@ -21,7 +21,7 @@ function krynn_install() { * */ - register_hook('post_local', 'addon/krynn/krynn.php', 'krynn_post_hook'); + Addon::registerHook('post_local', 'addon/krynn/krynn.php', 'krynn_post_hook'); /** * @@ -31,8 +31,8 @@ function krynn_install() { * */ - register_hook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); - register_hook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); + Addon::registerHook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); + Addon::registerHook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); logger("installed krynn"); } @@ -48,9 +48,9 @@ function krynn_uninstall() { * */ - unregister_hook('post_local', 'addon/krynn/krynn.php', 'krynn_post_hook'); - unregister_hook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); - unregister_hook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); + Addon::unregisterHook('post_local', 'addon/krynn/krynn.php', 'krynn_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); logger("removed krynn"); diff --git a/langfilter/langfilter.php b/langfilter/langfilter.php index e8e90975..4bc1b232 100644 --- a/langfilter/langfilter.php +++ b/langfilter/langfilter.php @@ -9,6 +9,7 @@ */ use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\PConfig; /* Define the hooks we want to use @@ -18,16 +19,16 @@ use Friendica\Core\PConfig; function langfilter_install() { - register_hook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body', 10); - register_hook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); - register_hook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); + Addon::registerHook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body', 10); + Addon::registerHook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); } function langfilter_uninstall() { - unregister_hook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body'); - unregister_hook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); + Addon::unregisterHook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body'); + Addon::unregisterHook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); } /* The settings diff --git a/ldapauth/ldapauth.php b/ldapauth/ldapauth.php index f6cb42b6..d06874b7 100644 --- a/ldapauth/ldapauth.php +++ b/ldapauth/ldapauth.php @@ -52,17 +52,18 @@ * * ...etc. */ +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Model\User; function ldapauth_install() { - register_hook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate'); + Addon::registerHook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate'); } function ldapauth_uninstall() { - unregister_hook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate'); + Addon::unregisterHook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate'); } function ldapauth_hook_authenticate($a, &$b) diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index 91d35834..f5cee117 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -5,20 +5,20 @@ * Version: 0.1 * Author: Michael Vogel */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function leistungsschutzrecht_install() { - register_hook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); - register_hook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); - register_hook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); + Addon::registerHook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); + Addon::registerHook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); + Addon::registerHook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); } function leistungsschutzrecht_uninstall() { - unregister_hook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); - unregister_hook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); - unregister_hook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); + Addon::unregisterHook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); + Addon::unregisterHook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); + Addon::unregisterHook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); } function leistungsschutzrecht_getsiteinfo($a, &$siteinfo) { diff --git a/libertree/libertree.php b/libertree/libertree.php index 0b9f839b..2909a8ef 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -6,23 +6,23 @@ * Version: 1.0 * Author: Tony Baldwin */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function libertree_install() { - register_hook('post_local', 'addon/libertree/libertree.php', 'libertree_post_local'); - register_hook('notifier_normal', 'addon/libertree/libertree.php', 'libertree_send'); - register_hook('jot_networks', 'addon/libertree/libertree.php', 'libertree_jot_nets'); - register_hook('connector_settings', 'addon/libertree/libertree.php', 'libertree_settings'); - register_hook('connector_settings_post', 'addon/libertree/libertree.php', 'libertree_settings_post'); + Addon::registerHook('post_local', 'addon/libertree/libertree.php', 'libertree_post_local'); + Addon::registerHook('notifier_normal', 'addon/libertree/libertree.php', 'libertree_send'); + Addon::registerHook('jot_networks', 'addon/libertree/libertree.php', 'libertree_jot_nets'); + Addon::registerHook('connector_settings', 'addon/libertree/libertree.php', 'libertree_settings'); + Addon::registerHook('connector_settings_post', 'addon/libertree/libertree.php', 'libertree_settings_post'); } function libertree_uninstall() { - unregister_hook('post_local', 'addon/libertree/libertree.php', 'libertree_post_local'); - unregister_hook('notifier_normal', 'addon/libertree/libertree.php', 'libertree_send'); - unregister_hook('jot_networks', 'addon/libertree/libertree.php', 'libertree_jot_nets'); - unregister_hook('connector_settings', 'addon/libertree/libertree.php', 'libertree_settings'); - unregister_hook('connector_settings_post', 'addon/libertree/libertree.php', 'libertree_settings_post'); + Addon::unregisterHook('post_local', 'addon/libertree/libertree.php', 'libertree_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/libertree/libertree.php', 'libertree_send'); + Addon::unregisterHook('jot_networks', 'addon/libertree/libertree.php', 'libertree_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/libertree/libertree.php', 'libertree_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/libertree/libertree.php', 'libertree_settings_post'); } diff --git a/libravatar/libravatar.php b/libravatar/libravatar.php index 891b0b47..3979416f 100644 --- a/libravatar/libravatar.php +++ b/libravatar/libravatar.php @@ -5,7 +5,7 @@ * Version: 1.1 * Author: Klaus Weidenbach */ - +use Friendica\Core\Addon; use Friendica\Core\Config; /** @@ -17,7 +17,7 @@ function libravatar_install() { // avoid registering the hook return false; } - register_hook('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); + Addon::registerHook('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); logger("registered libravatar in avatar_lookup hook"); } @@ -26,7 +26,7 @@ function libravatar_install() { * Removes the plugin hook */ function libravatar_uninstall() { - unregister_hook('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); + Addon::unregisterHook('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); logger("unregistered libravatar in avatar_lookup hook"); } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 1d5703e1..6f358530 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -1,5 +1,4 @@ */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function ljpost_install() { - register_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); - register_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); - register_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); - register_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); - register_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); + Addon::registerHook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); + Addon::registerHook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); + Addon::registerHook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); + Addon::registerHook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); } function ljpost_uninstall() { - unregister_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); - unregister_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); - unregister_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); - unregister_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); - unregister_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); + Addon::unregisterHook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); + Addon::unregisterHook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); } diff --git a/mahjongg/mahjongg.php b/mahjongg/mahjongg.php index 977c693d..3567792b 100644 --- a/mahjongg/mahjongg.php +++ b/mahjongg/mahjongg.php @@ -6,14 +6,14 @@ * Version: 1.0 * Author: Holger Froese */ - +use Friendica\Core\Addon; function mahjongg_install() { - register_hook('app_menu', 'addon/mahjongg/mahjongg.php', 'mahjongg_app_menu'); + Addon::registerHook('app_menu', 'addon/mahjongg/mahjongg.php', 'mahjongg_app_menu'); } function mahjongg_uninstall() { - unregister_hook('app_menu', 'addon/mahjongg/mahjongg.php', 'mahjongg_app_menu'); + Addon::unregisterHook('app_menu', 'addon/mahjongg/mahjongg.php', 'mahjongg_app_menu'); } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 67364365..c427ae76 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -5,17 +5,17 @@ * Version: 1.1 * Author: Matthew Exon */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Database\DBM; function mailstream_install() { - register_hook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); - register_hook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); - register_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - register_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - register_hook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); + Addon::registerHook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); + Addon::registerHook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); + Addon::registerHook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); + Addon::registerHook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); + Addon::registerHook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); if (Config::get('mailstream', 'dbversion') == '0.1') { q('ALTER TABLE `mailstream_item` DROP INDEX `uid`'); @@ -52,16 +52,16 @@ function mailstream_install() { } function mailstream_uninstall() { - unregister_hook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); - unregister_hook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); - unregister_hook('post_local', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); - unregister_hook('post_remote', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); - unregister_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); - unregister_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); - unregister_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - unregister_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - unregister_hook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); - unregister_hook('incoming_mail', 'addon/mailstream/mailstream.php', 'mailstream_incoming_mail'); + Addon::unregisterHook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); + Addon::unregisterHook('post_local', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); + Addon::unregisterHook('post_remote', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); + Addon::unregisterHook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); + Addon::unregisterHook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); + Addon::unregisterHook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); + Addon::unregisterHook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); + Addon::unregisterHook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); + Addon::unregisterHook('incoming_mail', 'addon/mailstream/mailstream.php', 'mailstream_incoming_mail'); } function mailstream_module() {} diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index 2a7bc89c..fc18b51d 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -7,20 +7,20 @@ * Author: Tobias Diekershoff * License: 3-clause BSD license */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; function mathjax_install() { - register_hook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); - register_hook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); - register_hook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); + Addon::registerHook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); + Addon::registerHook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); + Addon::registerHook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); logger('installed js_math plugin'); } function mathjax_uninstall() { - unregister_hook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); - unregister_hook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); - unregister_hook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); + Addon::unregisterHook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); + Addon::unregisterHook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); } function mathjax_settings_post ($a, $post) { if (! local_user()) diff --git a/membersince/membersince.php b/membersince/membersince.php index c995c54b..3b454fa3 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -7,12 +7,13 @@ * Author: Mike Macgirvin * */ +use Friendica\Core\Addon; require_once('include/datetime.php'); -function membersince_install(){ register_hook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } +function membersince_install(){ Addon::registerHook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } -function membersince_uninstall(){ unregister_hook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } +function membersince_uninstall(){ Addon::unregisterHook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } function membersince_display(&$a,&$b) { $b = preg_replace('/<\/dl>/',"\n\n\n
\n
" . t('Member since:') . "
\n
" . datetime_convert('UTC',date_default_timezone_get(),$a->profile['register_date']) . "
\n
" ,$b, 1); diff --git a/morechoice/morechoice.php b/morechoice/morechoice.php index d22ec3aa..b8a170a1 100644 --- a/morechoice/morechoice.php +++ b/morechoice/morechoice.php @@ -7,24 +7,24 @@ * - who takes no responsibility for any additional content which may appear herein * */ - +use Friendica\Core\Addon; function morechoice_install() { - register_hook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); - register_hook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); - register_hook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); + Addon::registerHook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); + Addon::registerHook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); + Addon::registerHook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); } function morechoice_uninstall() { - unregister_hook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); - unregister_hook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); - unregister_hook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); + Addon::unregisterHook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); + Addon::unregisterHook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); + Addon::unregisterHook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); // We need to leave this here for a while, because we now have a situation where people can end up with an orphaned hook. - unregister_hook('poke_verbs', 'addon/morechoice/morechoice.php', 'morechoice_poke_verbs'); + Addon::unregisterHook('poke_verbs', 'addon/morechoice/morechoice.php', 'morechoice_poke_verbs'); } diff --git a/morepokes/morepokes.php b/morepokes/morepokes.php index 9fd1a43e..946a486a 100644 --- a/morepokes/morepokes.php +++ b/morepokes/morepokes.php @@ -6,13 +6,14 @@ * Author: Thomas Willingham * */ +use Friendica\Core\Addon; function morepokes_install() { - register_hook('poke_verbs', 'addon/morepokes/morepokes.php', 'morepokes_poke_verbs'); + Addon::registerHook('poke_verbs', 'addon/morepokes/morepokes.php', 'morepokes_poke_verbs'); } function morepokes_uninstall() { - unregister_hook('poke_verbs', 'addon/morepokes/morepokes.php', 'morepokes_poke_verbs'); + Addon::unregisterHook('poke_verbs', 'addon/morepokes/morepokes.php', 'morepokes_poke_verbs'); } function morepokes_poke_verbs($a,&$b) { diff --git a/namethingy/namethingy.php b/namethingy/namethingy.php index 0ccf106c..b5faf9fd 100644 --- a/namethingy/namethingy.php +++ b/namethingy/namethingy.php @@ -1,5 +1,4 @@ */ - +use Friendica\Core\Addon; function namethingy_install() { - register_hook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu'); + Addon::registerHook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu'); } function namethingy_uninstall() { - unregister_hook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu'); + Addon::unregisterHook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu'); } diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index 41e4e0d5..b912b074 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -9,14 +9,15 @@ require_once('include/bbcode.php'); +use Friendica\Core\Addon; use Friendica\Core\Config; function newmemberwidget_install () { - register_hook( 'network_mod_init', 'addon/newmemberwidget/newmemberwidget.php', 'newmemberwidget_network_mod_init'); + Addon::registerHook( 'network_mod_init', 'addon/newmemberwidget/newmemberwidget.php', 'newmemberwidget_network_mod_init'); logger('newmemberwidget installed'); } function newmemberwidget_uninstall () { - unregister_hook( 'network_mod_init', 'addon/newmemberwidget/newmemberwidget.php', 'newmemberwidget_network_mod_init'); + Addon::unregisterHook( 'network_mod_init', 'addon/newmemberwidget/newmemberwidget.php', 'newmemberwidget_network_mod_init'); } function newmemberwidget_network_mod_init ( $a, $b) { diff --git a/notimeline/notimeline.php b/notimeline/notimeline.php index dcf96935..bc06f78b 100644 --- a/notimeline/notimeline.php +++ b/notimeline/notimeline.php @@ -7,20 +7,20 @@ * * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function notimeline_install() { - register_hook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); - register_hook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); + Addon::registerHook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); + Addon::registerHook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); } function notimeline_uninstall() { - unregister_hook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); - unregister_hook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); } diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index 6592738d..7c37fc2e 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -1,6 +1,4 @@ * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function nsfw_install() { - register_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body', 10); - register_hook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); - register_hook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + Addon::registerHook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body', 10); + Addon::registerHook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); } function nsfw_uninstall() { - unregister_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); - unregister_hook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + Addon::unregisterHook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); + Addon::unregisterHook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); } diff --git a/numfriends/numfriends.php b/numfriends/numfriends.php index 98295bfb..9e3463c3 100644 --- a/numfriends/numfriends.php +++ b/numfriends/numfriends.php @@ -4,16 +4,14 @@ * Description: Change number of contacts shown of profile sidebar * Version: 1.0 * Author: Mike Macgirvin - * - * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function numfriends_install() { - register_hook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); - register_hook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); + Addon::registerHook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); + Addon::registerHook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); logger("installed numfriends"); } @@ -21,8 +19,8 @@ function numfriends_install() { function numfriends_uninstall() { - unregister_hook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); - unregister_hook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); logger("removed numfriends"); diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index ae9cb480..d61d0020 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -8,27 +8,27 @@ * Author: Klaus Weidenbach * */ - +use Friendica\Core\Addon; use Friendica\Core\Cache; use Friendica\Core\Config; function openstreetmap_install() { - register_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); - register_hook('generate_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_map'); - register_hook('generate_named_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_named_map'); - register_hook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); + Addon::registerHook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); + Addon::registerHook('generate_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_map'); + Addon::registerHook('generate_named_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_named_map'); + Addon::registerHook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); logger("installed openstreetmap"); } function openstreetmap_uninstall() { - unregister_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); - unregister_hook('generate_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_map'); - unregister_hook('generate_named_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_named_map'); - unregister_hook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); + Addon::unregisterHook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); + Addon::unregisterHook('generate_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_map'); + Addon::unregisterHook('generate_named_map', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_generate_named_map'); + Addon::unregisterHook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); logger("removed openstreetmap"); } diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 977bee4e..0a293103 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -1,6 +1,4 @@ * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function pageheader_install() { - register_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - register_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - register_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::registerHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::registerHook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); } function pageheader_uninstall() { - unregister_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - unregister_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::unregisterHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::unregisterHook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); // hook moved, uninstall the old one if still there. - unregister_hook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::unregisterHook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); } diff --git a/piwik/piwik.php b/piwik/piwik.php index 8253f4a7..ddba2dd9 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -29,17 +29,17 @@ * about http/https but beware to put the trailing / at the end of your * setting. */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function piwik_install() { - register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); + Addon::registerHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); logger("installed piwik plugin"); } function piwik_uninstall() { - unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); + Addon::unregisterHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); logger("uninstalled piwik plugin"); } diff --git a/planets/planets.php b/planets/planets.php index 0d88e21d..794d1f02 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -6,7 +6,7 @@ * Author: Mike Macgirvin * Author: Tony Baldwin */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function planets_install() { @@ -18,7 +18,7 @@ function planets_install() { * */ - register_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + Addon::registerHook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); /** * @@ -28,8 +28,8 @@ function planets_install() { * */ - register_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - register_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::registerHook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::registerHook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("installed planets"); } @@ -45,9 +45,9 @@ function planets_uninstall() { * */ - unregister_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); - unregister_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - unregister_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::unregisterHook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("removed planets"); diff --git a/pledgie/pledgie.php b/pledgie/pledgie.php index 6183c76d..27897e52 100644 --- a/pledgie/pledgie.php +++ b/pledgie/pledgie.php @@ -7,19 +7,19 @@ * Hauke Altmann * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function pledgie_install() { - register_hook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - register_hook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - register_hook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::registerHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); + Addon::registerHook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_uninstall() { - unregister_hook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - unregister_hook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::unregisterHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); + Addon::unregisterHook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_addon_settings(&$a,&$s) { diff --git a/public_server/public_server.php b/public_server/public_server.php index 0ea029b3..422746f0 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -1,31 +1,30 @@ */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Model\User; function public_server_install() { - register_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); - register_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - register_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); - register_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); + Addon::registerHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + Addon::registerHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + Addon::registerHook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + Addon::registerHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } function public_server_uninstall() { - unregister_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); - unregister_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - unregister_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); - unregister_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); + Addon::unregisterHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + Addon::unregisterHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + Addon::unregisterHook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + Addon::unregisterHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } function public_server_register_account($a,$b) { diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 6aaa0565..8aa1588a 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -5,6 +5,7 @@ * Version: 0.2 * Author: Michael Vogel */ +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\Worker; @@ -22,25 +23,25 @@ require_once "mod/share.php"; define('PUMPIO_DEFAULT_POLL_INTERVAL', 5); // given in minutes function pumpio_install() { - register_hook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); - register_hook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); - register_hook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); - register_hook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); - register_hook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); - register_hook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); - register_hook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); - register_hook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); + Addon::registerHook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); + Addon::registerHook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); + Addon::registerHook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); + Addon::registerHook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); + Addon::registerHook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); + Addon::registerHook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); + Addon::registerHook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); + Addon::registerHook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_uninstall() { - unregister_hook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); - unregister_hook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); - unregister_hook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); - unregister_hook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); - unregister_hook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); - unregister_hook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); - unregister_hook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); - unregister_hook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); + Addon::unregisterHook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); + Addon::unregisterHook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); + Addon::unregisterHook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); + Addon::unregisterHook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); + Addon::unregisterHook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_module() {} diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index f4b95184..2e1783c0 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -19,19 +19,19 @@ * them to open the comment window fully and insert the qcomment. Then "Submit" will submit it. * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function qcomment_install() { - register_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - register_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::registerHook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } function qcomment_uninstall() { - unregister_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } diff --git a/randplace/randplace.php b/randplace/randplace.php index b696bed2..a6a639ec 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -18,7 +18,7 @@ * system will call the name_uninstall() function. * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function randplace_install() { @@ -30,7 +30,7 @@ function randplace_install() { * */ - register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + Addon::registerHook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); /** * @@ -40,8 +40,8 @@ function randplace_install() { * */ - register_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - register_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::registerHook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::registerHook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("installed randplace"); } @@ -57,9 +57,9 @@ function randplace_uninstall() { * */ - unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); - unregister_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - unregister_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::unregisterHook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("removed randplace"); diff --git a/remote_permissions/remote_permissions.php b/remote_permissions/remote_permissions.php index c7e51286..7c74df9f 100644 --- a/remote_permissions/remote_permissions.php +++ b/remote_permissions/remote_permissions.php @@ -6,20 +6,20 @@ * Author: Zach * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; function remote_permissions_install() { - register_hook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - register_hook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - register_hook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::registerHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); + Addon::registerHook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::registerHook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_uninstall() { - unregister_hook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - unregister_hook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - unregister_hook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::unregisterHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); + Addon::unregisterHook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_settings(&$a,&$o) { diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index 1a2a962f..0789f546 100644 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -1,6 +1,4 @@ * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function rendertime_install() { - register_hook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); + Addon::registerHook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); } function rendertime_uninstall() { - unregister_hook('init_1', 'addon/rendertime/rendertime.php', 'rendertime_init_1'); - unregister_hook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); + Addon::unregisterHook('init_1', 'addon/rendertime/rendertime.php', 'rendertime_init_1'); + Addon::unregisterHook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); } function rendertime_init_1(&$a) { diff --git a/securemail/securemail.php b/securemail/securemail.php index 68fc24ff..33bbf030 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -7,6 +7,7 @@ */ use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\PConfig; use Friendica\Util\Emailer; @@ -23,19 +24,19 @@ require_once 'openpgp_crypt_symmetric.php'; function securemail_install() { - register_hook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); - register_hook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); + Addon::registerHook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); + Addon::registerHook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); - register_hook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); + Addon::registerHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); logger('installed securemail'); } function securemail_uninstall() { - unregister_hook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); - unregister_hook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); - unregister_hook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); + Addon::unregisterHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); logger('removed securemail'); } diff --git a/showmore/showmore.php b/showmore/showmore.php index 9bddab63..8f0e6693 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -7,19 +7,19 @@ * based upon NSFW from Mike Macgirvin * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function showmore_install() { - register_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - register_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - register_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::registerHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + Addon::registerHook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_uninstall() { - unregister_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - unregister_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::unregisterHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + Addon::unregisterHook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_addon_settings(&$a,&$s) { diff --git a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php index fb4bce13..47566380 100644 --- a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php +++ b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php @@ -6,17 +6,14 @@ * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template) * All smileys from sites offering them as Public Domain */ - -/** - -*/ +use Friendica\Core\Addon; function smiley_pack_es_install() { - register_hook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies_es'); + Addon::registerHook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies_es'); } function smiley_pack_es_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies'); } diff --git a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php index 3ae70879..282c0dde 100644 --- a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php +++ b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php @@ -8,13 +8,14 @@ * * */ +use Friendica\Core\Addon; function smiley_pack_fr_install() { - register_hook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); + Addon::registerHook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); } function smiley_pack_fr_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); } diff --git a/smiley_pack/smiley_pack.php b/smiley_pack/smiley_pack.php index 4d49b7c0..ea3490eb 100644 --- a/smiley_pack/smiley_pack.php +++ b/smiley_pack/smiley_pack.php @@ -7,16 +7,14 @@ * All smileys from sites offering them as Public Domain */ -/** - -*/ +use Friendica\Core\Addon; function smiley_pack_install() { - register_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); + Addon::registerHook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); } function smiley_pack_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); } diff --git a/smileybutton/smileybutton.php b/smileybutton/smileybutton.php index d922a6b1..4aea34d8 100644 --- a/smileybutton/smileybutton.php +++ b/smileybutton/smileybutton.php @@ -5,11 +5,11 @@ * Version: 0.2 * Author: Johannes Schwab */ - +use Friendica\Core\Addon; function smileybutton_install() { //Register hooks - register_hook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); + Addon::registerHook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); logger("installed smileybutton"); } @@ -17,7 +17,7 @@ function smileybutton_install() { function smileybutton_uninstall() { //Delet registered hooks - unregister_hook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); + Addon::unregisterHook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); logger("removed smileybutton"); } diff --git a/smilies_adult/smilies_adult.php b/smilies_adult/smilies_adult.php index 82b30a98..bb673f23 100644 --- a/smilies_adult/smilies_adult.php +++ b/smilies_adult/smilies_adult.php @@ -8,13 +8,14 @@ * This is a template for how to extend the "smily" code. * */ +use Friendica\Core\Addon; function smilies_adult_install() { - register_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); + Addon::registerHook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); } function smilies_adult_uninstall() { - unregister_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); + Addon::unregisterHook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); } diff --git a/sniper/sniper.php b/sniper/sniper.php index 59812cba..2be7165d 100644 --- a/sniper/sniper.php +++ b/sniper/sniper.php @@ -9,14 +9,14 @@ * Version: 1.0 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; function sniper_install() { - register_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); + Addon::registerHook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); } function sniper_uninstall() { - unregister_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); + Addon::unregisterHook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); } diff --git a/startpage/startpage.php b/startpage/startpage.php index b0ee04cb..263ec395 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -6,20 +6,20 @@ * Author: Mike Macgirvin * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function startpage_install() { - register_hook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - register_hook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - register_hook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::registerHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); + Addon::registerHook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::registerHook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } function startpage_uninstall() { - unregister_hook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - unregister_hook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - unregister_hook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::unregisterHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); + Addon::unregisterHook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 9158052a..e867ea46 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -47,6 +47,7 @@ require_once 'include/enotify.php'; use Friendica\App; use Friendica\Content\OEmbed; +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Model\GContact; @@ -145,32 +146,32 @@ class StatusNetOAuth extends TwitterOAuth function statusnet_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - register_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - register_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); - register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); - register_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); - register_hook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); + Addon::registerHook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::registerHook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::registerHook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::registerHook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); + Addon::registerHook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + Addon::registerHook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); + Addon::registerHook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); + Addon::registerHook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); logger("installed GNU Social"); } function statusnet_uninstall() { - unregister_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - unregister_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - unregister_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); - unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); - unregister_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); - unregister_hook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); + Addon::unregisterHook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::unregisterHook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::unregisterHook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); + Addon::unregisterHook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + Addon::unregisterHook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); + Addon::unregisterHook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); + Addon::unregisterHook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); // old setting - remove only - unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - unregister_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - unregister_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::unregisterHook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); } function statusnet_check_item_notification(App $a, &$notification_data) diff --git a/superblock/superblock.php b/superblock/superblock.php index c33c699d..2e1004a1 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -8,27 +8,27 @@ * Author: Mike Macgirvin * */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function superblock_install() { - register_hook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - register_hook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); - register_hook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); - register_hook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); - register_hook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); + Addon::registerHook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::registerHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); + Addon::registerHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); + Addon::registerHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); } function superblock_uninstall() { - unregister_hook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); - unregister_hook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); - unregister_hook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); - unregister_hook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); + Addon::unregisterHook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::unregisterHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); + Addon::unregisterHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); + Addon::unregisterHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); } diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index 6203f3cd..db16d214 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -6,27 +6,27 @@ * Version: 1.0 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Model\User; function testdrive_install() { - register_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); - register_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); - register_hook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); - register_hook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); + Addon::registerHook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + Addon::registerHook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); + Addon::registerHook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); + Addon::registerHook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); } function testdrive_uninstall() { - unregister_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); - unregister_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); - unregister_hook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); - unregister_hook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); + Addon::unregisterHook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + Addon::unregisterHook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); + Addon::unregisterHook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); + Addon::unregisterHook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); } diff --git a/tictac/tictac.php b/tictac/tictac.php index 99737841..f928fd5e 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -5,14 +5,14 @@ * Version: 1.0 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; function tictac_install() { - register_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); + Addon::registerHook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); } function tictac_uninstall() { - unregister_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); + Addon::unregisterHook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); } diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index a056bd09..df47a8e3 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -11,23 +11,24 @@ require_once('library/OAuth1.php'); require_once('addon/tumblr/tumblroauth/tumblroauth.php'); +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; function tumblr_install() { - register_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); - register_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); - register_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); - register_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); - register_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + Addon::registerHook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + Addon::registerHook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + Addon::registerHook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + Addon::registerHook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + Addon::registerHook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); } function tumblr_uninstall() { - unregister_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); - unregister_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); - unregister_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); - unregister_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); - unregister_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + Addon::unregisterHook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + Addon::unregisterHook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); } function tumblr_module() {} diff --git a/twitter/twitter.php b/twitter/twitter.php index 807445b6..1b475801 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -62,6 +62,7 @@ use Friendica\App; use Friendica\Content\OEmbed; +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\Worker; @@ -78,38 +79,38 @@ define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes function twitter_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - register_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - register_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); - register_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); - register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - register_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); - register_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); - register_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); - register_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); - register_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); - register_hook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); + Addon::registerHook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::registerHook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::registerHook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + Addon::registerHook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::registerHook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + Addon::registerHook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); + Addon::registerHook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); + Addon::registerHook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); + Addon::registerHook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); + Addon::registerHook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); + Addon::registerHook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); logger("installed twitter"); } function twitter_uninstall() { - unregister_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - unregister_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - unregister_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); - unregister_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); - unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - unregister_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); - unregister_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); - unregister_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); - unregister_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); - unregister_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); - unregister_hook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); + Addon::unregisterHook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::unregisterHook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::unregisterHook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + Addon::unregisterHook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); + Addon::unregisterHook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); + Addon::unregisterHook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); + Addon::unregisterHook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); + Addon::unregisterHook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); + Addon::unregisterHook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); // old setting - remove only - unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); - unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::unregisterHook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::unregisterHook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); } function twitter_check_item_notification(App $a, &$notification_data) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 85077c45..faa553cc 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -5,15 +5,15 @@ * Version: 1.0 * Author: Michael Vogel */ - +use Friendica\Core\Addon; use Friendica\Content\Smilies; function unicode_smilies_install() { - register_hook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); + Addon::registerHook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); } function unicode_smilies_uninstall() { - unregister_hook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); + Addon::unregisterHook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); } function unicode_smilies_smilies(&$a,&$b) { diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index 623ed89d..cf1b33a7 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -1,6 +1,4 @@ * */ +use Friendica\Core\Addon; function viewsrc_install() { - register_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); - register_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); + Addon::registerHook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); + Addon::registerHook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); } function viewsrc_uninstall() { - unregister_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); - unregister_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); + Addon::unregisterHook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); + Addon::unregisterHook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); } diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index 1588847d..fe12248e 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -6,15 +6,15 @@ * Author: Stephen Mahood * Author: Tobias Diekershoff */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function webrtc_install() { - register_hook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); + Addon::registerHook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); } function webrtc_uninstall() { - unregister_hook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); + Addon::unregisterHook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); } diff --git a/widgets/widgets.php b/widgets/widgets.php index 502278a2..69f03a8e 100644 --- a/widgets/widgets.php +++ b/widgets/widgets.php @@ -5,17 +5,17 @@ * Version: 1.0 * Author: Fabio Comuni */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function widgets_install() { - register_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - register_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::registerHook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::registerHook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); logger("installed widgets"); } function widgets_uninstall() { - unregister_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - unregister_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); } diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 66b23a7c..377d2cd4 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -26,6 +26,7 @@ * count only unseen elements which are not type=activity (likes and dislikes not seen as new elements) */ use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\PConfig; use Friendica\Model\User; @@ -35,15 +36,15 @@ function windowsphonepush_install() * The first is within cron - so the push notifications will be * sent every 10 minutes (or whatever is set in crontab). */ - register_hook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); + Addon::registerHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); /* Then we'll attach into the plugin settings page, and also the * settings post hook so that we can create and update * user preferences. User shall be able to activate the plugin and * define whether he allows pushing first characters of item text */ - register_hook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - register_hook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::registerHook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::registerHook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("installed windowsphonepush"); } @@ -53,9 +54,9 @@ function windowsphonepush_uninstall() /* uninstall unregisters any hooks created with register_hook * during install. Don't delete data in table `pconfig`. */ - unregister_hook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - unregister_hook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - unregister_hook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::unregisterHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); + Addon::unregisterHook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("removed windowsphonepush"); } diff --git a/wppost/wppost.php b/wppost/wppost.php index 22032c90..d73005a3 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -6,28 +6,28 @@ * Version: 1.1 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; use Friendica\Core\PConfig; function wppost_install() { - register_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); - register_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); - register_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); - register_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - register_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::registerHook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + Addon::registerHook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::registerHook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::registerHook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } function wppost_uninstall() { - unregister_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); - unregister_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); - unregister_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); - unregister_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - unregister_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::unregisterHook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::unregisterHook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); // obsolete - remove - unregister_hook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); - unregister_hook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - unregister_hook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::unregisterHook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::unregisterHook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } diff --git a/xmpp/xmpp.php b/xmpp/xmpp.php index ba8c27c7..fc2d6bb5 100644 --- a/xmpp/xmpp.php +++ b/xmpp/xmpp.php @@ -7,23 +7,24 @@ * Author: Michael Vogel */ use Friendica\App; +use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\PConfig; function xmpp_install() { - register_hook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); - register_hook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); - register_hook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); - register_hook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); + Addon::registerHook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); + Addon::registerHook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); + Addon::registerHook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); + Addon::registerHook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); } function xmpp_uninstall() { - unregister_hook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); - unregister_hook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); - unregister_hook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); - unregister_hook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); + Addon::unregisterHook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); + Addon::unregisterHook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); + Addon::unregisterHook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); } function xmpp_plugin_settings_post() diff --git a/yourls/yourls.php b/yourls/yourls.php index d5d6d234..96554bb5 100644 --- a/yourls/yourls.php +++ b/yourls/yourls.php @@ -8,19 +8,19 @@ * Author: Keith Fernie * */ - +use Friendica\Core\Addon; use Friendica\Core\Config; function yourls_install() { - register_hook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); - register_hook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); + Addon::registerHook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); + Addon::registerHook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); } function yourls_uninstall() { - unregister_hook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); + Addon::unregisterHook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); + Addon::unregisterHook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); Config::set('yourls','url1',trim($_POST[''])); Config::set('yourls','username1',trim($_POST[''])); Config::set('yourls','password1',trim($_POST[''])); From c71f7b0e1a7bb5ca88347b295dd3a4cc3106c5a9 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sat, 20 Jan 2018 08:57:41 -0500 Subject: [PATCH 004/116] Update function names update function names and hook calls --- blackout/blackout.php | 8 +-- blockem/blockem.php | 26 +++------ blogger/blogger.php | 69 ++++++++++++----------- buffer/buffer.php | 26 +++++---- communityhome/communityhome.php | 17 +++--- curweather/curweather.php | 19 ++++--- dav/friendica/main.php | 8 +-- fromapp/fromapp.php | 8 +-- fromgplus/fromgplus.php | 26 +++++---- geocoordinates/geocoordinates.php | 16 +++--- geonames/geonames.php | 24 ++++---- gnot/gnot.php | 12 ++-- gravatar/gravatar.php | 10 ++-- group_text/group_text.php | 10 ++-- impressum/impressum.php | 10 ++-- irc/irc.php | 12 ++-- jappixmini/jappixmini.php | 14 ++--- krynn/krynn.php | 18 +++--- langfilter/langfilter.php | 8 +-- libravatar/libravatar.php | 10 ++-- mailstream/mailstream.php | 18 +++--- mathjax/mathjax.php | 14 ++--- membersince/membersince.php | 27 ++++++--- newmemberwidget/newmemberwidget.php | 4 +- notifyall/notifyall.php | 2 +- notimeline/notimeline.php | 8 +-- nsfw/nsfw.php | 10 ++-- numfriends/numfriends.php | 16 ++---- openstreetmap/openstreetmap.php | 4 +- pageheader/pageheader.php | 8 +-- piwik/piwik.php | 14 ++--- planets/planets.php | 20 +++---- pledgie/pledgie.php | 8 +-- public_server/public_server.php | 8 +-- qcomment/qcomment.php | 10 ++-- randplace/randplace.php | 22 ++++---- remote_permissions/remote_permissions.php | 12 ++-- securemail/securemail.php | 14 ++--- showmore/showmore.php | 8 +-- startpage/startpage.php | 10 ++-- statusnet/statusnet.php | 8 +-- superblock/superblock.php | 8 +-- tumblr/tumblr.php | 6 +- twitter/twitter.php | 18 +++--- webrtc/webrtc.php | 4 +- widgets/widgets.php | 10 ++-- windowsphonepush/windowsphonepush.php | 30 +++++----- wppost/wppost.php | 6 +- xmpp/xmpp.php | 16 +++--- yourls/yourls.php | 10 ++-- 50 files changed, 356 insertions(+), 348 deletions(-) diff --git a/blackout/blackout.php b/blackout/blackout.php index 94e081ce..1c34862b 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -9,12 +9,12 @@ * About * ===== * - * This plugin will allow you to enter a date/time period during which + * This addon will allow you to enter a date/time period during which * all your ~friendica visitors from the web will be redirected to a page * you can configure in the admin panel as well. * * Calls to the API and the communication with other ~friendica nodes is - * not effected from this plugin. + * not effected from this addon. * * If you enter a period the current date would be affected none of the * currently logged in users will be effected as well. But if they log @@ -88,7 +88,7 @@ function blackout_redirect ($a, $b) { } } -function blackout_plugin_admin(&$a, &$o) { +function blackout_addon_admin(&$a, &$o) { $mystart = Config::get('blackout','begindate'); if (! is_string($mystart)) { $mystart = "YYYY-MM-DD:hhmm"; } $myend = Config::get('blackout','enddate'); @@ -112,7 +112,7 @@ function blackout_plugin_admin(&$a, &$o) { $o = '

Please double check that the current settings for the blackout. Begin will be '.$mystart.' and it will end '.$myend.'.

' . $o; } } -function blackout_plugin_admin_post (&$a) { +function blackout_addon_admin_post (&$a) { $begindate = trim($_POST['startdate']); $enddate = trim($_POST['enddate']); $url = trim($_POST['rurl']); diff --git a/blockem/blockem.php b/blockem/blockem.php index 2a2cd3d2..d943f26c 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -12,30 +12,25 @@ use Friendica\Core\PConfig; function blockem_install() { Addon::registerHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); Addon::registerHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - Addon::registerHook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); Addon::registerHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); Addon::registerHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - Addon::registerHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); + Addon::registerHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store'); } - function blockem_uninstall() { Addon::unregisterHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); Addon::unregisterHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - Addon::unregisterHook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); Addon::unregisterHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); Addon::unregisterHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - Addon::unregisterHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); - + Addon::unregisterHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store'); } - - - - -function blockem_addon_settings(&$a,&$s) { +function blockem_addon_settings(&$a, &$s) +{ if(! local_user()) return; @@ -45,7 +40,7 @@ function blockem_addon_settings(&$a,&$s) { $a->page['htmlhead'] .= '' . "\r\n"; - $words = PConfig::get(local_user(),'blockem','words'); + $words = PConfig::get(local_user(), 'blockem', 'words'); if(! $words) $words = ''; @@ -79,7 +74,6 @@ function blockem_addon_settings_post(&$a,&$b) { } } - function blockem_enotify_store(&$a,&$b) { $words = PConfig::get($b['uid'],'blockem','words'); @@ -143,13 +137,11 @@ function blockem_prepare_body(&$a,&$b) { } } - function blockem_display_item(&$a,&$b) { if(strstr($b['output']['body'],'id="blockem-wrap-')) $b['output']['thumb'] = $a->get_baseurl() . "/images/person-80.jpg"; } - function blockem_conversation_start(&$a,&$b) { if(! local_user()) diff --git a/blogger/blogger.php b/blogger/blogger.php index 7c9e1c5d..050aaa7a 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -8,7 +8,8 @@ use Friendica\Core\Addon; use Friendica\Core\PConfig; -function blogger_install() { +function blogger_install() +{ Addon::registerHook('post_local', 'addon/blogger/blogger.php', 'blogger_post_local'); Addon::registerHook('notifier_normal', 'addon/blogger/blogger.php', 'blogger_send'); Addon::registerHook('jot_networks', 'addon/blogger/blogger.php', 'blogger_jot_nets'); @@ -16,7 +17,8 @@ function blogger_install() { Addon::registerHook('connector_settings_post', 'addon/blogger/blogger.php', 'blogger_settings_post'); } -function blogger_uninstall() { +function blogger_uninstall() +{ Addon::unregisterHook('post_local', 'addon/blogger/blogger.php', 'blogger_post_local'); Addon::unregisterHook('notifier_normal', 'addon/blogger/blogger.php', 'blogger_send'); Addon::unregisterHook('jot_networks', 'addon/blogger/blogger.php', 'blogger_jot_nets'); @@ -25,28 +27,29 @@ function blogger_uninstall() { // obsolete - remove Addon::unregisterHook('post_local_end', 'addon/blogger/blogger.php', 'blogger_send'); - Addon::unregisterHook('plugin_settings', 'addon/blogger/blogger.php', 'blogger_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/blogger/blogger.php', 'blogger_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/blogger/blogger.php', 'blogger_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/blogger/blogger.php', 'blogger_settings_post'); } -function blogger_jot_nets(&$a,&$b) { +function blogger_jot_nets(&$a, &$b) +{ if (!local_user()) { return; } - $bl_post = PConfig::get(local_user(),'blogger','post'); + $bl_post = PConfig::get(local_user(), 'blogger', 'post'); if (intval($bl_post) == 1) { - $bl_defpost = PConfig::get(local_user(),'blogger','post_by_default'); + $bl_defpost = PConfig::get(local_user(), 'blogger', 'post_by_default'); $selected = ((intval($bl_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to blogger') . '
'; + . t('Post to blogger') . ''; } } -function blogger_settings(&$a,&$s) { - +function blogger_settings(&$a, &$s) +{ if (! local_user()) { return; } @@ -57,11 +60,11 @@ function blogger_settings(&$a,&$s) { /* Get the current state of our config variables */ - $enabled = PConfig::get(local_user(),'blogger','post'); + $enabled = PConfig::get(local_user(), 'blogger', 'post'); $checked = (($enabled) ? ' checked="checked" ' : ''); $css = (($enabled) ? '' : '-disabled'); - $def_enabled = PConfig::get(local_user(),'blogger','post_by_default'); + $def_enabled = PConfig::get(local_user(), 'blogger', 'post_by_default'); $def_checked = (($def_enabled) ? ' checked="checked" ' : ''); @@ -79,7 +82,7 @@ function blogger_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; @@ -108,17 +111,19 @@ function blogger_settings(&$a,&$s) { } -function blogger_settings_post(&$a,&$b) { - if (x($_POST,'blogger-submit')) { - PConfig::set(local_user(),'blogger','post',intval($_POST['blogger'])); - PConfig::set(local_user(),'blogger','post_by_default',intval($_POST['bl_bydefault'])); - PConfig::set(local_user(),'blogger','bl_username',trim($_POST['bl_username'])); - PConfig::set(local_user(),'blogger','bl_password',trim($_POST['bl_password'])); - PConfig::set(local_user(),'blogger','bl_blog',trim($_POST['bl_blog'])); +function blogger_settings_post(&$a, &$b) +{ + if (x($_POST, 'blogger-submit')) { + PConfig::set(local_user(), 'blogger', 'post', intval($_POST['blogger'])); + PConfig::set(local_user(), 'blogger', 'post_by_default', intval($_POST['bl_bydefault'])); + PConfig::set(local_user(), 'blogger', 'bl_username', trim($_POST['bl_username'])); + PConfig::set(local_user(), 'blogger', 'bl_password', trim($_POST['bl_password'])); + PConfig::set(local_user(), 'blogger', 'bl_blog', trim($_POST['bl_blog'])); } } -function blogger_post_local(&$a,&$b) { +function blogger_post_local(&$a, &$b) +{ // This can probably be changed to allow editing by pointing to a different API endpoint if ($b['edit']) { @@ -133,11 +138,11 @@ function blogger_post_local(&$a,&$b) { return; } - $bl_post = intval(PConfig::get(local_user(),'blogger','post')); + $bl_post = intval(PConfig::get(local_user(), 'blogger', 'post')); - $bl_enable = (($bl_post && x($_REQUEST,'blogger_enable')) ? intval($_REQUEST['blogger_enable']) : 0); + $bl_enable = (($bl_post && x($_REQUEST, 'blogger_enable')) ? intval($_REQUEST['blogger_enable']) : 0); - if ($b['api_source'] && intval(PConfig::get(local_user(),'blogger','post_by_default'))) { + if ($b['api_source'] && intval(PConfig::get(local_user(), 'blogger', 'post_by_default'))) { $bl_enable = 1; } @@ -155,12 +160,13 @@ function blogger_post_local(&$a,&$b) { -function blogger_send(&$a,&$b) { +function blogger_send(&$a, &$b) +{ if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { return; } - if (! strstr($b['postopts'],'blogger')) { + if (! strstr($b['postopts'], 'blogger')) { return; } @@ -168,12 +174,11 @@ function blogger_send(&$a,&$b) { return; } - $bl_username = xmlify(PConfig::get($b['uid'],'blogger','bl_username')); - $bl_password = xmlify(PConfig::get($b['uid'],'blogger','bl_password')); - $bl_blog = PConfig::get($b['uid'],'blogger','bl_blog'); + $bl_username = xmlify(PConfig::get($b['uid'], 'blogger', 'bl_username')); + $bl_password = xmlify(PConfig::get($b['uid'], 'blogger', 'bl_password')); + $bl_blog = PConfig::get($b['uid'], 'blogger', 'bl_blog'); if ($bl_username && $bl_password && $bl_blog) { - require_once('include/bbcode.php'); $title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; @@ -199,9 +204,9 @@ EOT; logger('blogger: data: ' . $xml, LOGGER_DATA); if ($bl_blog !== 'test') { - $x = post_url($bl_blog,$xml); + $x = post_url($bl_blog, $xml); } logger('posted to blogger: ' . (($x) ? $x : ''), LOGGER_DEBUG); } -} \ No newline at end of file +} diff --git a/buffer/buffer.php b/buffer/buffer.php index c788d4aa..9c36f7c4 100644 --- a/buffer/buffer.php +++ b/buffer/buffer.php @@ -55,22 +55,24 @@ function buffer_content(&$a) { return $o; } -function buffer_plugin_admin(&$a, &$o){ - $t = get_markup_template( "admin.tpl", "addon/buffer/" ); +function buffer_addon_admin(&$a, &$o) +{ + $t = get_markup_template("admin.tpl", "addon/buffer/"); $o = replace_macros($t, [ '$submit' => t('Save Settings'), - // name, label, value, help, [extra values] - '$client_id' => ['client_id', t('Client ID'), Config::get('buffer', 'client_id' ), ''], - '$client_secret' => ['client_secret', t('Client Secret'), Config::get('buffer', 'client_secret' ), ''], + // name, label, value, help, [extra values] + '$client_id' => ['client_id', t('Client ID'), Config::get('buffer', 'client_id'), ''], + '$client_secret' => ['client_secret', t('Client Secret'), Config::get('buffer', 'client_secret'), ''], ]); } -function buffer_plugin_admin_post(&$a){ - $client_id = ((x($_POST,'client_id')) ? notags(trim($_POST['client_id'])) : ''); - $client_secret = ((x($_POST,'client_secret')) ? notags(trim($_POST['client_secret'])): ''); - Config::set('buffer','client_id',$client_id); - Config::set('buffer','client_secret',$client_secret); - info( t('Settings updated.'). EOL ); +function buffer_addon_admin_post(&$a) +{ + $client_id = ((x($_POST, 'client_id')) ? notags(trim($_POST['client_id'])) : ''); + $client_secret = ((x($_POST, 'client_secret')) ? notags(trim($_POST['client_secret'])): ''); + Config::set('buffer', 'client_id', $client_id); + Config::set('buffer', 'client_secret', $client_secret); + info(t('Settings updated.'). EOL); } function buffer_connect(&$a) { @@ -155,7 +157,7 @@ function buffer_settings(&$a,&$s) { $s .= '
'; } else { $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index f3e4783e..169d2416 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -33,25 +33,28 @@ function communityhome_getopts() { ]; } -function communityhome_plugin_admin(&$a, &$o) { - $tpl = get_markup_template( 'settings.tpl', 'addon/communityhome/' ); +function communityhome_addon_admin(&$a, &$o) +{ + $tpl = get_markup_template('settings.tpl', 'addon/communityhome/'); $opts = communityhome_getopts(); $ctx = [ '$submit' => t("Submit"), '$fields' => [], ]; - foreach($opts as $k=>$v) { + + foreach ($opts as $k => $v) { $ctx['fields'][] = ['communityhome_'.$k, $v, Config::get('communityhome', $k)]; } $o = replace_macros($tpl, $ctx); } -function communityhome_plugin_admin_post(&$a,&$b) { - if(x($_POST,'communityhome-submit')) { +function communityhome_addon_admin_post(&$a, &$b) +{ + if (x($_POST, 'communityhome-submit')) { $opts = communityhome_getopts(); - foreach($opts as $k=>$v) { - Config::set('communityhome', $k, x($_POST,'communityhome_'.$k)); + foreach ($opts as $k => $v) { + Config::set('communityhome', $k, x($_POST, 'communityhome_'.$k)); } } } diff --git a/curweather/curweather.php b/curweather/curweather.php index bcbba91d..dc9f9bb8 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -66,16 +66,17 @@ function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0) return $r; } -function curweather_install() { +function curweather_install() +{ Addon::registerHook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); - Addon::registerHook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); - Addon::registerHook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); + Addon::registerHook('addon_settings', 'addon/curweather/curweather.php', 'curweather_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/curweather/curweather.php', 'curweather_addon_settings_post'); } function curweather_uninstall() { Addon::unregisterHook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); - Addon::unregisterHook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/curweather/curweather.php', 'curweather_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/curweather/curweather.php', 'curweather_addon_settings_post'); } function curweather_network_mod_init(&$fk_app,&$b) { @@ -141,7 +142,7 @@ function curweather_network_mod_init(&$fk_app,&$b) { } -function curweather_plugin_settings_post($a,$post) { +function curweather_addon_settings_post($a,$post) { if(! local_user() || (! x($_POST,'curweather-settings-submit'))) return; PConfig::set(local_user(),'curweather','curweather_loc',trim($_POST['curweather_loc'])); @@ -152,7 +153,7 @@ function curweather_plugin_settings_post($a,$post) { } -function curweather_plugin_settings(&$a,&$s) { +function curweather_addon_settings(&$a,&$s) { if(! local_user()) return; @@ -186,7 +187,7 @@ function curweather_plugin_settings(&$a,&$s) { } // Config stuff for the admin panel to let the admin of the node set a APPID // for accessing the API of openweathermap -function curweather_plugin_admin_post (&$a) { +function curweather_addon_admin_post (&$a) { if(! is_site_admin()) return; if ($_POST['curweather-submit']) { @@ -195,7 +196,7 @@ function curweather_plugin_admin_post (&$a) { info( t('Curweather settings saved.'.EOL)); } } -function curweather_plugin_admin (&$a, &$o) { +function curweather_addon_admin (&$a, &$o) { if(! is_site_admin()) return; $appid = Config::get('curweather','appid'); diff --git a/dav/friendica/main.php b/dav/friendica/main.php index afeadcf0..d73edfd3 100644 --- a/dav/friendica/main.php +++ b/dav/friendica/main.php @@ -203,7 +203,7 @@ function dav_content() } } } catch (DAVVersionMismatchException $e) { - $x = t("The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."); + $x = t("The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."); } return $x; } @@ -302,9 +302,9 @@ function dav_cron(&$a, &$b) * @param App $a * @param null|object $o */ -function dav_plugin_admin_post(&$a = null, &$o = null) +function dav_addon_admin_post(&$a = null, &$o = null) { - check_form_security_token_redirectOnErr('/admin/plugins/dav', 'dav_admin_save'); + check_form_security_token_redirectOnErr('/admin/addons/dav', 'dav_admin_save'); dav_include_files(); require_once(__DIR__ . "/database-init.inc.php"); @@ -327,7 +327,7 @@ function dav_plugin_admin_post(&$a = null, &$o = null) * @param App $a * @param string $o */ -function dav_plugin_admin(&$a, &$o) +function dav_addon_admin(&$a, &$o) { dav_include_files(); require_once(__DIR__ . "/database-init.inc.php"); diff --git a/fromapp/fromapp.php b/fromapp/fromapp.php index 4872e2a0..32234d15 100644 --- a/fromapp/fromapp.php +++ b/fromapp/fromapp.php @@ -12,8 +12,8 @@ use Friendica\Core\PConfig; function fromapp_install() { Addon::registerHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - Addon::registerHook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - Addon::registerHook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); + Addon::registerHook('addon_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::registerHook('addon_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("installed fromapp"); } @@ -22,8 +22,8 @@ function fromapp_install() { function fromapp_uninstall() { Addon::unregisterHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("removed fromapp"); diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index b8910d5d..c028ea85 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -30,8 +30,8 @@ function fromgplus_uninstall() { Addon::unregisterHook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); // Old hooks - Addon::unregisterHook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); } function fromgplus_addon_settings(&$a,&$s) { @@ -94,19 +94,21 @@ function fromgplus_addon_settings_post(&$a,&$b) { } } -function fromgplus_plugin_admin(&$a, &$o){ - $t = get_markup_template("admin.tpl", "addon/fromgplus/"); +function fromgplus_addon_admin(&$a, &$o) +{ + $t = get_markup_template("admin.tpl", "addon/fromgplus/"); - $o = replace_macros($t, [ - '$submit' => t('Save Settings'), - '$key' => ['key', t('Key'), trim(Config::get('fromgplus', 'key')), t('')], - ]); + $o = replace_macros($t, [ + '$submit' => t('Save Settings'), + '$key' => ['key', t('Key'), trim(Config::get('fromgplus', 'key')), t('')], + ]); } -function fromgplus_plugin_admin_post(&$a){ - $key = ((x($_POST,'key')) ? trim($_POST['key']) : ''); - Config::set('fromgplus','key',$key); - info( t('Settings updated.'). EOL ); +function fromgplus_addon_admin_post(&$a) +{ + $key = ((x($_POST, 'key')) ? trim($_POST['key']) : ''); + Config::set('fromgplus', 'key', $key); + info(t('Settings updated.'). EOL); } function fromgplus_cron($a,$b) { diff --git a/geocoordinates/geocoordinates.php b/geocoordinates/geocoordinates.php index 714b8d81..fa72c2a8 100644 --- a/geocoordinates/geocoordinates.php +++ b/geocoordinates/geocoordinates.php @@ -81,24 +81,24 @@ function geocoordinates_post_hook($a, &$item) geocoordinates_resolve_item($item); } -function geocoordinates_plugin_admin(&$a, &$o) +function geocoordinates_addon_admin(&$a, &$o) { $t = get_markup_template("admin.tpl", "addon/geocoordinates/"); $o = replace_macros($t, [ '$submit' => t('Save Settings'), - '$api_key' => ['api_key', t('API Key'), Config::get('geocoordinates', 'api_key' ), ''], - '$language' => ['language', t('Language code (IETF format)'), Config::get('geocoordinates', 'language' ), ''], + '$api_key' => ['api_key', t('API Key'), Config::get('geocoordinates', 'api_key'), ''], + '$language' => ['language', t('Language code (IETF format)'), Config::get('geocoordinates', 'language'), ''], ]); } -function geocoordinates_plugin_admin_post(&$a) +function geocoordinates_addon_admin_post(&$a) { - $api_key = ((x($_POST,'api_key')) ? notags(trim($_POST['api_key'])) : ''); - Config::set('geocoordinates','api_key',$api_key); + $api_key = ((x($_POST, 'api_key')) ? notags(trim($_POST['api_key'])) : ''); + Config::set('geocoordinates', 'api_key', $api_key); - $language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : ''); - Config::set('geocoordinates','language',$language); + $language = ((x($_POST, 'language')) ? notags(trim($_POST['language'])) : ''); + Config::set('geocoordinates', 'language', $language); info(t('Settings updated.'). EOL); } diff --git a/geonames/geonames.php b/geonames/geonames.php index 55ae1920..45d8fde5 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -12,7 +12,7 @@ * $a->config['geonames']['username'] = 'your_username'; * Also visit http://geonames.org/manageaccount and enable access to the free web services * - * When plugin is installed, the system calls the plugin + * When addon is installed, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the @@ -27,7 +27,7 @@ function geonames_install() { /** * - * Our plugin will attach in three places. + * Our addon will attach in three places. * The first is just prior to storing a local post. * */ @@ -36,14 +36,14 @@ function geonames_install() { /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - Addon::registerHook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - Addon::registerHook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::registerHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); + Addon::registerHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); logger("installed geonames"); } @@ -60,8 +60,8 @@ function geonames_uninstall() { */ Addon::unregisterHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - Addon::unregisterHook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::unregisterHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); + Addon::unregisterHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); logger("removed geonames"); @@ -76,7 +76,7 @@ function geonames_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -137,7 +137,7 @@ function geonames_post_hook($a, &$item) { * */ -function geonames_plugin_admin_post($a,$post) { +function geonames_addon_admin_post($a,$post) { if(! local_user() || (! x($_POST,'geonames-submit'))) return; PConfig::set(local_user(),'geonames','enable',intval($_POST['geonames'])); @@ -148,14 +148,14 @@ function geonames_plugin_admin_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ -function geonames_plugin_admin(&$a,&$s) { +function geonames_addon_admin(&$a,&$s) { if(! local_user()) return; @@ -180,7 +180,7 @@ function geonames_plugin_admin(&$a,&$s) { $s .= '
'; $s .= '

' . t('Geonames Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/gnot/gnot.php b/gnot/gnot.php index 70f422b6..38fb3069 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -12,8 +12,8 @@ use Friendica\Core\PConfig; function gnot_install() { - Addon::registerHook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - Addon::registerHook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::registerHook('addon_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::registerHook('addon_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); Addon::registerHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); logger("installed gnot"); @@ -22,8 +22,8 @@ function gnot_install() { function gnot_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); Addon::unregisterHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); @@ -52,7 +52,7 @@ function gnot_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -80,7 +80,7 @@ function gnot_settings(&$a,&$s) { $s .= '

' . t('Gnot Settings') . '

'; $s .= '
'; $s .= '
' . t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/gravatar/gravatar.php b/gravatar/gravatar.php index 731129c0..840b361b 100644 --- a/gravatar/gravatar.php +++ b/gravatar/gravatar.php @@ -1,7 +1,7 @@ */ @@ -9,7 +9,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; /** - * Installs the plugin hook + * Installs the addon hook */ function gravatar_install() { Addon::registerHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); @@ -18,7 +18,7 @@ function gravatar_install() { } /** - * Removes the plugin hook + * Removes the addon hook */ function gravatar_uninstall() { Addon::unregisterHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); @@ -56,7 +56,7 @@ function gravatar_lookup($a, &$b) { /** * Display admin settings for this addon */ -function gravatar_plugin_admin (&$a, &$o) { +function gravatar_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/gravatar/" ); $default_avatar = Config::get('gravatar', 'default_img'); @@ -103,7 +103,7 @@ function gravatar_plugin_admin (&$a, &$o) { /** * Save admin settings */ -function gravatar_plugin_admin_post (&$a) { +function gravatar_addon_admin_post (&$a) { check_form_security_token('gravatarsave'); $default_avatar = ((x($_POST, 'avatar')) ? notags(trim($_POST['avatar'])) : 'identicon'); diff --git a/group_text/group_text.php b/group_text/group_text.php index 27bd173b..d5163e73 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -10,8 +10,8 @@ use Friendica\Core\PConfig; function group_text_install() { - Addon::registerHook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - Addon::registerHook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::registerHook('addon_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::registerHook('addon_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("installed group_text"); } @@ -19,8 +19,8 @@ function group_text_install() { function group_text_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("removed group_text"); @@ -48,7 +48,7 @@ function group_text_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ diff --git a/impressum/impressum.php b/impressum/impressum.php index 15e33869..df508868 100644 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -1,7 +1,7 @@ * License: 3-clause BSD license @@ -16,13 +16,13 @@ use Friendica\Core\Config; function impressum_install() { Addon::registerHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); Addon::registerHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); - logger("installed impressum plugin"); + logger("installed impressum Addon"); } function impressum_uninstall() { Addon::unregisterHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); Addon::unregisterHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); - logger("uninstalled impressum plugin"); + logger("uninstalled impressum Addon"); } function impressum_module() { @@ -74,7 +74,7 @@ function impressum_show($a,&$b) { } } -function impressum_plugin_admin_post (&$a) { +function impressum_addon_admin_post (&$a) { $owner = ((x($_POST, 'owner')) ? notags(trim($_POST['owner'])) : ''); $ownerprofile = ((x($_POST, 'ownerprofile')) ? notags(trim($_POST['ownerprofile'])) : ''); $postal = ((x($_POST, 'postal')) ? (trim($_POST['postal'])) : ''); @@ -89,7 +89,7 @@ function impressum_plugin_admin_post (&$a) { Config::set('impressum','footer_text',strip_tags($footer_text)); info( t('Settings updated.'). EOL ); } -function impressum_plugin_admin (&$a, &$o) { +function impressum_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/impressum/" ); $o = replace_macros($t, [ '$submit' => t('Save Settings'), diff --git a/irc/irc.php b/irc/irc.php index e2fd50ba..288f65ca 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -1,6 +1,6 @@ @@ -12,13 +12,13 @@ use Friendica\Core\PConfig; function irc_install() { Addon::registerHook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); - Addon::registerHook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/irc/irc.php', 'irc_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/irc/irc.php', 'irc_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/irc/irc.php', 'irc_addon_settings_post'); } function irc_uninstall() { Addon::unregisterHook('app_menu', 'addon/irc/irc.php', 'irc_app_menu'); - Addon::unregisterHook('plugin_settings', 'addon/irc/irc.php', 'irc_addon_settings'); + Addon::unregisterHook('addon_settings', 'addon/irc/irc.php', 'irc_addon_settings'); } @@ -120,7 +120,7 @@ return $o; } -function irc_plugin_admin_post (&$a) { +function irc_addon_admin_post (&$a) { if(! is_site_admin()) return; @@ -131,7 +131,7 @@ function irc_plugin_admin_post (&$a) { info( t('IRC settings saved.') . EOL); } } -function irc_plugin_admin (&$a, &$o) { +function irc_addon_admin (&$a, &$o) { $sitechats = Config::get('irc','sitechats'); /* popular channels */ $autochans = Config::get('irc','autochans'); /* auto connect chans */ $t = get_markup_template( "admin.tpl", "addon/irc/" ); diff --git a/jappixmini/jappixmini.php b/jappixmini/jappixmini.php index 2e3cbc77..dc40840a 100644 --- a/jappixmini/jappixmini.php +++ b/jappixmini/jappixmini.php @@ -70,8 +70,8 @@ use Friendica\Model\User; function jappixmini_install() { - Addon::registerHook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); - Addon::registerHook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); + Addon::registerHook('addon_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); + Addon::registerHook('addon_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); Addon::registerHook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); Addon::registerHook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); @@ -104,8 +104,8 @@ function jappixmini_install() function jappixmini_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/jappixmini/jappixmini.php', 'jappixmini_settings_post'); Addon::unregisterHook('page_end', 'addon/jappixmini/jappixmini.php', 'jappixmini_script'); Addon::unregisterHook('authenticate', 'addon/jappixmini/jappixmini.php', 'jappixmini_login'); @@ -115,7 +115,7 @@ function jappixmini_uninstall() Addon::unregisterHook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_download_source'); } -function jappixmini_plugin_admin(App $a, &$o) +function jappixmini_addon_admin(App $a, &$o) { // display instructions and warnings on addon settings page for admin if (!file_exists("addon/jappixmini.tgz")) { @@ -159,7 +159,7 @@ function jappixmini_plugin_admin(App $a, &$o) $o .= ''; } -function jappixmini_plugin_admin_post(App $a) +function jappixmini_addon_admin_post(App $a) { // set info text $submit = $_REQUEST['jappixmini-admin-settings']; @@ -230,7 +230,7 @@ function jappixmini_init() } - // do not return an address if user deactivated plugin + // do not return an address if user deactivated addon $activated = PConfig::get($uid, 'jappixmini', 'activate'); if (!$activated) { killme(); diff --git a/krynn/krynn.php b/krynn/krynn.php index 93082419..6d47bc5f 100644 --- a/krynn/krynn.php +++ b/krynn/krynn.php @@ -16,7 +16,7 @@ function krynn_install() { /** * - * Our demo plugin will attach in three places. + * Our demo addon will attach in three places. * The first is just prior to storing a local post. * */ @@ -25,14 +25,14 @@ function krynn_install() { /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - Addon::registerHook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); - Addon::registerHook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); + Addon::registerHook('addon_settings', 'addon/krynn/krynn.php', 'krynn_settings'); + Addon::registerHook('addon_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); logger("installed krynn"); } @@ -49,8 +49,8 @@ function krynn_uninstall() { */ Addon::unregisterHook('post_local', 'addon/krynn/krynn.php', 'krynn_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/krynn/krynn.php', 'krynn_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/krynn/krynn.php', 'krynn_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); logger("removed krynn"); @@ -65,7 +65,7 @@ function krynn_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -126,7 +126,7 @@ function krynn_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the addon Setting form. * Add our own settings info to the page. * */ @@ -162,7 +162,7 @@ function krynn_settings(&$a,&$s) { $s .= '
'; $s .= '

' . t('Krynn Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; /* provide a submit button */ diff --git a/langfilter/langfilter.php b/langfilter/langfilter.php index 4bc1b232..e569ed37 100644 --- a/langfilter/langfilter.php +++ b/langfilter/langfilter.php @@ -20,15 +20,15 @@ use Friendica\Core\PConfig; function langfilter_install() { Addon::registerHook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body', 10); - Addon::registerHook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); } function langfilter_uninstall() { Addon::unregisterHook('prepare_body', 'addon/langfilter/langfilter.php', 'langfilter_prepare_body'); - Addon::unregisterHook('plugin_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/langfilter/langfilter.php', 'langfilter_addon_settings_post'); } /* The settings diff --git a/libravatar/libravatar.php b/libravatar/libravatar.php index 3979416f..bba5a881 100644 --- a/libravatar/libravatar.php +++ b/libravatar/libravatar.php @@ -1,7 +1,7 @@ = 5.3) + * Description: If there is no avatar image for a new user or contact this addon will look for one at Libravatar. Please disable Gravatar addon if you use this one. (requires PHP >= 5.3) * Version: 1.1 * Author: Klaus Weidenbach */ @@ -9,7 +9,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; /** - * Installs the plugin hook + * Installs the addon hook */ function libravatar_install() { if (! version_compare(PHP_VERSION, '5.3.0', '>=')) { @@ -23,7 +23,7 @@ function libravatar_install() { } /** - * Removes the plugin hook + * Removes the addon hook */ function libravatar_uninstall() { Addon::unregisterHook('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); @@ -61,7 +61,7 @@ function libravatar_lookup($a, &$b) { /** * Display admin settings for this addon */ -function libravatar_plugin_admin (&$a, &$o) { +function libravatar_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/libravatar" ); $default_avatar = Config::get('libravatar', 'default_img'); @@ -106,7 +106,7 @@ function libravatar_plugin_admin (&$a, &$o) { /** * Save admin settings */ -function libravatar_plugin_admin_post (&$a) { +function libravatar_addon_admin_post (&$a) { check_form_security_token('libravatarrsave'); $default_avatar = ((x($_POST, 'avatar')) ? notags(trim($_POST['avatar'])) : 'identicon'); diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index c427ae76..d40fdb7a 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -11,8 +11,8 @@ use Friendica\Core\PConfig; use Friendica\Database\DBM; function mailstream_install() { - Addon::registerHook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); - Addon::registerHook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); + Addon::registerHook('addon_settings', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings_post'); Addon::registerHook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); Addon::registerHook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); Addon::registerHook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); @@ -52,8 +52,8 @@ function mailstream_install() { } function mailstream_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings_post'); Addon::unregisterHook('post_local', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); Addon::unregisterHook('post_remote', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); Addon::unregisterHook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); @@ -66,7 +66,7 @@ function mailstream_uninstall() { function mailstream_module() {} -function mailstream_plugin_admin(&$a,&$o) { +function mailstream_addon_admin(&$a,&$o) { $frommail = Config::get('mailstream', 'frommail'); $template = get_markup_template('admin.tpl', 'addon/mailstream/'); $config = ['frommail', @@ -78,7 +78,7 @@ function mailstream_plugin_admin(&$a,&$o) { '$submit' => t('Save Settings')]); } -function mailstream_plugin_admin_post ($a) { +function mailstream_addon_admin_post ($a) { if (x($_POST, 'frommail')) { Config::set('mailstream', 'frommail', $_POST['frommail']); } @@ -266,7 +266,7 @@ function mailstream_send($a, $message_id, $item, $user) { } $mail = new PHPmailer; try { - $mail->XMailer = 'Friendica Mailstream Plugin'; + $mail->XMailer = 'Friendica Mailstream Addon'; $mail->SetFrom($frommail, mailstream_sender($item)); $mail->AddAddress($address, $user['username']); $mail->MessageID = $message_id; @@ -346,7 +346,7 @@ function mailstream_cron($a, $b) { mailstream_tidy(); } -function mailstream_plugin_settings(&$a,&$s) { +function mailstream_addon_settings(&$a,&$s) { $enabled = PConfig::get(local_user(), 'mailstream', 'enabled'); $address = PConfig::get(local_user(), 'mailstream', 'address'); $nolikes = PConfig::get(local_user(), 'mailstream', 'nolikes'); @@ -376,7 +376,7 @@ function mailstream_plugin_settings(&$a,&$s) { '$submit' => t('Save Settings')]); } -function mailstream_plugin_settings_post($a,$post) { +function mailstream_addon_settings_post($a,$post) { if ($_POST['mailstream_address'] != "") { PConfig::set(local_user(), 'mailstream', 'address', $_POST['mailstream_address']); } diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index fc18b51d..8308651f 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -13,14 +13,14 @@ use Friendica\Core\PConfig; function mathjax_install() { Addon::registerHook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); - Addon::registerHook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); - Addon::registerHook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); - logger('installed js_math plugin'); + Addon::registerHook('addon_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); + Addon::registerHook('addon_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); + logger('installed js_math addon'); } function mathjax_uninstall() { Addon::unregisterHook('page_header', 'addon/mathjax/mathjax.php', 'mathjax_page_header'); - Addon::unregisterHook('plugin_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/mathjax/mathjax.php', 'mathjax_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/mathjax/mathjax.php', 'mathjax_settings_post'); } function mathjax_settings_post ($a, $post) { if (! local_user()) @@ -68,12 +68,12 @@ function mathjax_page_header($a, &$b) { } } } -function mathjax_plugin_admin_post (&$a) { +function mathjax_addon_admin_post (&$a) { $baseurl = ((x($_POST, 'baseurl')) ? trim($_POST['baseurl']) : 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'); Config::set('mathjax','baseurl',$baseurl); info( t('Settings updated.'). EOL); } -function mathjax_plugin_admin (&$a, &$o) { +function mathjax_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/mathjax/" ); if (Config::get('mathjax','baseurl','') == '') { Config::set('mathjax','baseurl','http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'); diff --git a/membersince/membersince.php b/membersince/membersince.php index 3b454fa3..14669e35 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -1,21 +1,30 @@ - * + * */ use Friendica\Core\Addon; -require_once('include/datetime.php'); +require_once 'include/datetime.php'; -function membersince_install(){ Addon::registerHook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } +function membersince_install() +{ + Addon::registerHook('profile_advanced', 'addon/membersince/membersince.php', 'membersince_display'); +} -function membersince_uninstall(){ Addon::unregisterHook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } +function membersince_uninstall() +{ + Addon::unregisterHook('profile_advanced', 'addon/membersince/membersince.php', 'membersince_display'); +} -function membersince_display(&$a,&$b) { -$b = preg_replace('/<\/dl>/',"\n\n\n
\n
" . t('Member since:') . "
\n
" . datetime_convert('UTC',date_default_timezone_get(),$a->profile['register_date']) . "
\n
" ,$b, 1); -//$b = str_replace('
' . "\n" . '
',sprintf( t(' - Member since: %s') . EOL, datetime_convert('UTC',date_default_timezone_get(),$a->profile['register_date'])) . '' . "\n" . '
',$b); -} \ No newline at end of file +function membersince_display(&$a, &$b) +{ + // Works in Vier + $b = preg_replace('/<\/dl>/', "\n\n\n
\n
" . t('Member since:') . "
\n
" . datetime_convert('UTC', date_default_timezone_get(), $a->profile['register_date']) . "
\n
", $b, 1); + + // Trying for Frio + //$b = preg_replace('/<\/div>/', "

" . t('Member since:') . "
" . datetime_convert('UTC', date_default_timezone_get(), $a->profile['register_date']) . "
", $b, 1); +} diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index b912b074..516a472e 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -37,7 +37,7 @@ function newmemberwidget_network_mod_init ( $a, $b) { } } -function newmemberwidget_plugin_admin_post( &$a ) { +function newmemberwidget_addon_admin_post( &$a ) { $ft = ((x($_POST, 'freetext')) ? trim($_POST['freetext']) : ""); $lsn = ((x($_POST, 'localsupportname')) ? notags(trim($_POST['localsupportname'])) : ""); $gs = intval($_POST['linkglobalsupport']); @@ -48,7 +48,7 @@ function newmemberwidget_plugin_admin_post( &$a ) { Config::set ( 'newmemberwidget', 'localsupport', trim($lsn)); } -function newmemberwidget_plugin_admin(&$a, &$o){ +function newmemberwidget_addon_admin(&$a, &$o){ $t = get_markup_template('admin.tpl','addon/newmemberwidget'); $o = replace_macros($t, [ '$submit' => t('Save Settings'), diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index a667f6a6..cdaa1815 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -21,7 +21,7 @@ function notifyall_uninstall() { function notifyall_module() {} -function notifyall_plugin_admin(&$a, &$o) { +function notifyall_addon_admin(&$a, &$o) { $o = '
    ' . t('Send email to all members') . '
'; diff --git a/notimeline/notimeline.php b/notimeline/notimeline.php index bc06f78b..a1acd72c 100644 --- a/notimeline/notimeline.php +++ b/notimeline/notimeline.php @@ -12,15 +12,15 @@ use Friendica\Core\PConfig; function notimeline_install() { - Addon::registerHook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); - Addon::registerHook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); + Addon::registerHook('addon_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); + Addon::registerHook('addon_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); } function notimeline_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/notimeline/notimeline.php', 'notimeline_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/notimeline/notimeline.php', 'notimeline_settings_post'); } diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index 7c37fc2e..e43f0b51 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -11,16 +11,16 @@ use Friendica\Core\PConfig; function nsfw_install() { Addon::registerHook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body', 10); - Addon::registerHook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); } function nsfw_uninstall() { Addon::unregisterHook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); - Addon::unregisterHook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); } @@ -83,7 +83,7 @@ function nsfw_addon_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= '

' . t ('This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter.') . '

'; + $s .= '

' . t ('This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter.') . '

'; $s .= ''; $s .= ''; $s .= '
'; diff --git a/numfriends/numfriends.php b/numfriends/numfriends.php index 9e3463c3..5d6575c4 100644 --- a/numfriends/numfriends.php +++ b/numfriends/numfriends.php @@ -10,8 +10,8 @@ use Friendica\Core\PConfig; function numfriends_install() { - Addon::registerHook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); - Addon::registerHook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); + Addon::registerHook('addon_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); + Addon::registerHook('addon_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); logger("installed numfriends"); } @@ -19,15 +19,13 @@ function numfriends_install() { function numfriends_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); logger("removed numfriends"); } - - /** * * Callback from the settings post function. @@ -36,7 +34,6 @@ function numfriends_uninstall() { * and if so set our configuration setting for this person. * */ - function numfriends_settings_post($a,$post) { if(! local_user() || (! x($_POST,'numfriends-submit'))) return; @@ -48,13 +45,10 @@ function numfriends_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ - - - function numfriends_settings(&$a, &$s) { if (! local_user()) { diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index d61d0020..29ada924 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -163,7 +163,7 @@ function openstreetmap_generate_map(&$a, &$b) } -function openstreetmap_plugin_admin(&$a, &$o) +function openstreetmap_addon_admin(&$a, &$o) { $t = get_markup_template("admin.tpl", "addon/openstreetmap/"); $tmsserver = Config::get('openstreetmap', 'tmsserver'); @@ -192,7 +192,7 @@ function openstreetmap_plugin_admin(&$a, &$o) ]); } -function openstreetmap_plugin_admin_post(&$a) +function openstreetmap_addon_admin_post(&$a) { $urltms = ((x($_POST, 'tmsserver')) ? notags(trim($_POST['tmsserver'])) : ''); $urlnom = ((x($_POST, 'nomserver')) ? notags(trim($_POST['nomserver'])) : ''); diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 0a293103..96ad3630 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -12,16 +12,16 @@ use Friendica\Core\Config; function pageheader_install() { Addon::registerHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - Addon::registerHook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); } function pageheader_uninstall() { Addon::unregisterHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - Addon::unregisterHook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); // hook moved, uninstall the old one if still there. Addon::unregisterHook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); diff --git a/piwik/piwik.php b/piwik/piwik.php index ddba2dd9..326b931f 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -1,13 +1,13 @@ * Author: Klaus Weidenbach */ -/* Piwik Analytics Plugin for Friendica +/* Piwik Analytics Addon for Friendica * * Author: Tobias Diekershoff * tobias.diekershoff@gmx.net @@ -35,19 +35,19 @@ use Friendica\Core\Config; function piwik_install() { Addon::registerHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); - logger("installed piwik plugin"); + logger("installed piwik addon"); } function piwik_uninstall() { Addon::unregisterHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); - logger("uninstalled piwik plugin"); + logger("uninstalled piwik addon"); } function piwik_analytics($a,&$b) { /* - * styling of every HTML block added by this plugin is done in the + * styling of every HTML block added by this addon is done in the * associated CSS file. We just have to tell Friendica to get it * into the page header. */ @@ -85,7 +85,7 @@ function piwik_analytics($a,&$b) { $b .= "
"; } } -function piwik_plugin_admin (&$a, &$o) { +function piwik_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/piwik/" ); $o = replace_macros( $t, [ '$submit' => t('Save Settings'), @@ -95,7 +95,7 @@ function piwik_plugin_admin (&$a, &$o) { '$async' => ['async', t('Asynchronous tracking'), Config::get('piwik','async' ), ''], ]); } -function piwik_plugin_admin_post (&$a) { +function piwik_addon_admin_post (&$a) { $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : ''); $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : ''); $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : ''); diff --git a/planets/planets.php b/planets/planets.php index 794d1f02..04fb72ca 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -1,7 +1,7 @@ * Author: Tony Baldwin @@ -13,7 +13,7 @@ function planets_install() { /** * - * Our demo plugin will attach in three places. + * Our demo addon will attach in three places. * The first is just prior to storing a local post. * */ @@ -22,14 +22,14 @@ function planets_install() { /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - Addon::registerHook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - Addon::registerHook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::registerHook('addon_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::registerHook('addon_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("installed planets"); } @@ -46,8 +46,8 @@ function planets_uninstall() { */ Addon::unregisterHook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("removed planets"); @@ -62,7 +62,7 @@ function planets_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -123,7 +123,7 @@ function planets_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -158,7 +158,7 @@ function planets_settings(&$a,&$s) { $s .= '
'; $s .= '

' . t('Planets Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/pledgie/pledgie.php b/pledgie/pledgie.php index 27897e52..2b75268b 100644 --- a/pledgie/pledgie.php +++ b/pledgie/pledgie.php @@ -12,14 +12,14 @@ use Friendica\Core\Config; function pledgie_install() { Addon::registerHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - Addon::registerHook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_uninstall() { Addon::unregisterHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - Addon::unregisterHook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_addon_settings(&$a,&$s) { diff --git a/public_server/public_server.php b/public_server/public_server.php index 422746f0..2c096568 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -1,7 +1,7 @@ */ @@ -141,8 +141,8 @@ function public_server_login($a,$b) { ); } -function public_server_plugin_admin_post ( &$a ) { - check_form_security_token_redirectOnErr('/admin/plugins/publicserver', 'publicserver'); +function public_server_addon_admin_post ( &$a ) { + check_form_security_token_redirectOnErr('/admin/addons/publicserver', 'publicserver'); $expiredays = (( x($_POST, 'expiredays') ) ? notags(trim($_POST['expiredays'] )) : ''); $expireposts = (( x($_POST, 'expireposts') ) ? notags(trim($_POST['expireposts'] )) : ''); $nologin = (( x($_POST, 'nologin') ) ? notags(trim($_POST['nologin'] )) : ''); @@ -157,7 +157,7 @@ function public_server_plugin_admin_post ( &$a ) { Config::set( 'public_server','flagpostsexpire',$flagpostsexpire ); info( t('Settings saved').EOL ); } -function public_server_plugin_admin ( &$a, &$o) { +function public_server_addon_admin ( &$a, &$o) { $token = get_form_security_token("publicserver"); $t = get_markup_template( "admin.tpl", "addon/public_server"); $o = replace_macros($t, [ diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 2e1783c0..447f8abf 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -9,7 +9,7 @@ * * Provides a set of text "snippets" which can be inserted into a comment window by clicking on them. * First enable the addon in the system admin panel. - * Then each person can tailor their choice of words in Settings->Plugin Settings in the Qcomment + * Then each person can tailor their choice of words in Settings->Addon Settings in the Qcomment * pane. Initially no qcomments are provided, but on viewing the settings page, a default set of * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents * a different qcomment. @@ -23,15 +23,15 @@ use Friendica\Core\Addon; use Friendica\Core\PConfig; function qcomment_install() { - Addon::registerHook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } function qcomment_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } diff --git a/randplace/randplace.php b/randplace/randplace.php index a6a639ec..96e549a6 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -1,7 +1,7 @@ * @@ -11,7 +11,7 @@ * Addons are registered with the system through the admin * panel. * - * When registration is detected, the system calls the plugin + * When registration is detected, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the @@ -25,7 +25,7 @@ function randplace_install() { /** * - * Our demo plugin will attach in three places. + * Our demo addon will attach in three places. * The first is just prior to storing a local post. * */ @@ -34,14 +34,14 @@ function randplace_install() { /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - Addon::registerHook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - Addon::registerHook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::registerHook('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::registerHook('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("installed randplace"); } @@ -58,8 +58,8 @@ function randplace_uninstall() { */ Addon::unregisterHook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("removed randplace"); @@ -74,7 +74,7 @@ function randplace_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -142,7 +142,7 @@ function randplace_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -169,7 +169,7 @@ function randplace_settings(&$a,&$s) { $s .= '
'; $s .= '

' . t('Randplace Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/remote_permissions/remote_permissions.php b/remote_permissions/remote_permissions.php index 7c74df9f..408316e6 100644 --- a/remote_permissions/remote_permissions.php +++ b/remote_permissions/remote_permissions.php @@ -12,14 +12,14 @@ use Friendica\Core\PConfig; function remote_permissions_install() { Addon::registerHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - Addon::registerHook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - Addon::registerHook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::registerHook('addon_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::registerHook('addon_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_uninstall() { Addon::unregisterHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - Addon::unregisterHook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_settings(&$a,&$o) { @@ -192,7 +192,7 @@ function remote_permissions_content($a, $item_copy) { return; } -function remote_permissions_plugin_admin(&$a, &$o){ +function remote_permissions_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/remote_permissions/" ); $o = replace_macros($t, [ '$submit' => t('Save Settings'), @@ -201,7 +201,7 @@ function remote_permissions_plugin_admin(&$a, &$o){ ]); } -function remote_permissions_plugin_admin_post(&$a){ +function remote_permissions_addon_admin_post(&$a){ $choice = ((x($_POST,'remotepermschoice')) ? notags(trim($_POST['remotepermschoice'])) : ''); Config::set('remote_perms','global',($choice == 1 ? 1 : 0)); info( t('Settings updated.'). EOL ); diff --git a/securemail/securemail.php b/securemail/securemail.php index 33bbf030..e62b6076 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -24,8 +24,8 @@ require_once 'openpgp_crypt_symmetric.php'; function securemail_install() { - Addon::registerHook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); - Addon::registerHook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); + Addon::registerHook('addon_settings', 'addon/securemail/securemail.php', 'securemail_settings'); + Addon::registerHook('addon_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); Addon::registerHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); @@ -33,8 +33,8 @@ function securemail_install() { } function securemail_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/securemail/securemail.php', 'securemail_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post'); Addon::unregisterHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare'); @@ -44,7 +44,7 @@ function securemail_uninstall() { /** * @brief Build user settings form * - * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#plugin_settings 'plugin_settings' hook + * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#addon_settings 'addon_settings' hook * * @param App $a App instance * @param string $s output html @@ -73,7 +73,7 @@ function securemail_settings(App &$a, &$s){ /** * @brief Handle data from user settings form * - * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#plugin_settings_post 'plugin_settings_post' hook + * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#addon_settings_post 'addon_settings_post' hook * * @param App $a App instance * @param array $b hook data @@ -138,7 +138,7 @@ function securemail_settings_post(App &$a, array &$b){ /** * @brief Encrypt notification emails text * - * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#emailer_send_prepare 'emailer_send_prepare' hook + * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#emailer_send_prepare 'emailer_send_prepare' hook * * @param App $a App instance * @param array $b hook data diff --git a/showmore/showmore.php b/showmore/showmore.php index 8f0e6693..f6e5028c 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -12,14 +12,14 @@ use Friendica\Core\PConfig; function showmore_install() { Addon::registerHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - Addon::registerHook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_uninstall() { Addon::unregisterHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - Addon::unregisterHook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_addon_settings(&$a,&$s) { diff --git a/startpage/startpage.php b/startpage/startpage.php index 263ec395..872fb234 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -11,15 +11,15 @@ use Friendica\Core\PConfig; function startpage_install() { Addon::registerHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - Addon::registerHook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - Addon::registerHook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::registerHook('addon_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::registerHook('addon_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } function startpage_uninstall() { Addon::unregisterHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - Addon::unregisterHook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } @@ -54,7 +54,7 @@ function startpage_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index e867ea46..3d708389 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -170,8 +170,8 @@ function statusnet_uninstall() // old setting - remove only Addon::unregisterHook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); } function statusnet_check_item_notification(App $a, &$notification_data) @@ -707,7 +707,7 @@ function statusnet_post_hook(App $a, &$b) } } -function statusnet_plugin_admin_post(App $a) +function statusnet_addon_admin_post(App $a) { $sites = []; @@ -739,7 +739,7 @@ function statusnet_plugin_admin_post(App $a) $sites = Config::set('statusnet', 'sites', $sites); } -function statusnet_plugin_admin(App $a, &$o) +function statusnet_addon_admin(App $a, &$o) { $sites = Config::get('statusnet', 'sites'); $sitesform = []; diff --git a/superblock/superblock.php b/superblock/superblock.php index 2e1004a1..b6d19de4 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -13,8 +13,8 @@ use Friendica\Core\PConfig; function superblock_install() { - Addon::registerHook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); Addon::registerHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); Addon::registerHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); Addon::registerHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); @@ -24,8 +24,8 @@ function superblock_install() { function superblock_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); Addon::unregisterHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); Addon::unregisterHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); Addon::unregisterHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index df47a8e3..ff218d0a 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -58,7 +58,7 @@ function tumblr_content(&$a) { return $o; } -function tumblr_plugin_admin(&$a, &$o){ +function tumblr_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/tumblr/" ); $o = replace_macros($t, [ @@ -69,7 +69,7 @@ function tumblr_plugin_admin(&$a, &$o){ ]); } -function tumblr_plugin_admin_post(&$a){ +function tumblr_addon_admin_post(&$a){ $consumer_key = ((x($_POST,'consumer_key')) ? notags(trim($_POST['consumer_key'])) : ''); $consumer_secret = ((x($_POST,'consumer_secret')) ? notags(trim($_POST['consumer_secret'])): ''); Config::set('tumblr','consumer_key',$consumer_key); @@ -218,7 +218,7 @@ function tumblr_settings(&$a,&$s) { $s .= '
'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/twitter/twitter.php b/twitter/twitter.php index 1b475801..a33415d8 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -33,7 +33,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -/* Twitter Plugin for Friendica +/* Twitter Addon for Friendica * * Author: Tobias Diekershoff * tobias.diekershoff@gmx.net @@ -41,7 +41,7 @@ * License:3-clause BSD license * * Configuration: - * To use this plugin you need a OAuth Consumer key pair (key & secret) + * To use this addon you need a OAuth Consumer key pair (key & secret) * you can get it from Twitter at https://twitter.com/apps * * Register your Friendica site as "Client" application with "Read & Write" access @@ -53,9 +53,9 @@ * $a->config['twitter']['consumerkey'] = 'your consumer_key here'; * $a->config['twitter']['consumersecret'] = 'your consumer_secret here'; * - * To activate the plugin itself add it to the $a->config['system']['addon'] + * To activate the addon itself add it to the $a->config['system']['addon'] * setting. After this, your user can configure their Twitter account settings - * from "Settings -> Plugin Settings". + * from "Settings -> Addon Settings". * * Requirements: PHP5, curl [Slinky library] */ @@ -109,8 +109,8 @@ function twitter_uninstall() // old setting - remove only Addon::unregisterHook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); - Addon::unregisterHook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); } function twitter_check_item_notification(App $a, &$notification_data) @@ -301,7 +301,7 @@ function twitter_settings(App $a, &$s) /* * * * make some nice form */ - $s .= '

' . t('At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

'; + $s .= '

' . t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

'; $s .= '' . t('Log in with Twitter') . ''; $s .= '
'; $s .= ''; @@ -641,7 +641,7 @@ function twitter_post_hook(App $a, &$b) } } -function twitter_plugin_admin_post(App $a) +function twitter_addon_admin_post(App $a) { $consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : ''; $consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : ''; @@ -650,7 +650,7 @@ function twitter_plugin_admin_post(App $a) info(t('Settings updated.') . EOL); } -function twitter_plugin_admin(App $a, &$o) +function twitter_addon_admin(App $a, &$o) { $t = get_markup_template("admin.tpl", "addon/twitter/"); diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index fe12248e..a71bac2a 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -22,14 +22,14 @@ function webrtc_app_menu($a,&$b) { $b['app_menu'][] = ''; } -function webrtc_plugin_admin (&$a, &$o) { +function webrtc_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/webrtc/" ); $o = replace_macros( $t, [ '$submit' => t('Save Settings'), '$webrtcurl' => ['webrtcurl', t('WebRTC Base URL'), Config::get('webrtc','webrtcurl' ), t('Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .')], ]); } -function webrtc_plugin_admin_post (&$a) { +function webrtc_addon_admin_post (&$a) { $url = ((x($_POST, 'webrtcurl')) ? notags(trim($_POST['webrtcurl'])) : ''); Config::set('webrtc', 'webrtcurl', $url); info( t('Settings updated.'). EOL); diff --git a/widgets/widgets.php b/widgets/widgets.php index 69f03a8e..9867b884 100644 --- a/widgets/widgets.php +++ b/widgets/widgets.php @@ -9,13 +9,13 @@ use Friendica\Core\Addon; use Friendica\Core\PConfig; function widgets_install() { - Addon::registerHook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - Addon::registerHook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::registerHook('addon_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::registerHook('addon_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); logger("installed widgets"); } function widgets_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); } @@ -122,7 +122,7 @@ function widgets_content(&$a) { if (isset($_GET['p']) && local_user()==$conf['uid'] ) { $o .= ""; $o .= "

Preview Widget

"; - $o .= ''. t("Plugin Settings") .''; + $o .= ''. t("Addon Settings") .''; $o .= "

".call_user_func($a->argv[1].'_widget_name')."

"; $o .= call_user_func($a->argv[1].'_widget_help'); diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 377d2cd4..861bb7af 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -10,7 +10,7 @@ * Pre-requisite: Windows Phone mobile device (at least WP 7.0) * Friendica mobile app on Windows Phone * - * When plugin is installed, the system calls the plugin + * When addon is installed, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the @@ -32,19 +32,19 @@ use Friendica\Model\User; function windowsphonepush_install() { - /* Our plugin will attach in three places. + /* Our addon will attach in three places. * The first is within cron - so the push notifications will be * sent every 10 minutes (or whatever is set in crontab). */ Addon::registerHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - /* Then we'll attach into the plugin settings page, and also the + /* Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update - * user preferences. User shall be able to activate the plugin and + * user preferences. User shall be able to activate the addon and * define whether he allows pushing first characters of item text */ - Addon::registerHook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - Addon::registerHook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::registerHook('addon_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::registerHook('addon_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("installed windowsphonepush"); } @@ -55,8 +55,8 @@ function windowsphonepush_uninstall() * during install. Don't delete data in table `pconfig`. */ Addon::unregisterHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - Addon::unregisterHook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("removed windowsphonepush"); } @@ -89,7 +89,7 @@ function windowsphonepush_settings_post($a, $post) info(t('WindowsPhonePush settings updated.') . EOL); } -/* Called from the Plugin Setting form. +/* Called from the Addon Setting form. * Add our own settings info to the page. */ function windowsphonepush_settings(&$a, &$s) @@ -115,7 +115,7 @@ function windowsphonepush_settings(&$a, &$s) $s .= '

' . t('WindowsPhonePush Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; @@ -136,12 +136,12 @@ function windowsphonepush_settings(&$a, &$s) return; } -/* Cron function used to regularly check all users on the server with active windowsphonepushplugin and send +/* Cron function used to regularly check all users on the server with active windowsphonepushaddon and send * notifications to the Microsoft servers and consequently to the Windows Phone device */ function windowsphonepush_cron() { - // retrieve all UID's for which the plugin windowsphonepush is enabled and loop through every user + // retrieve all UID's for which the addon windowsphonepush is enabled and loop through every user $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'windowsphonepush' AND `k` = 'enable' AND `v` = 1"); if (count($r)) { foreach ($r as $rr) { @@ -152,7 +152,7 @@ function windowsphonepush_cron() // pushing only possible if device_url (the URI on Microsoft server) is available or not "NA" (which will be sent // by app if user has switched the server setting in app - sending blank not possible as this would return an update error) if (( $device_url == "" ) || ( $device_url == "NA" )) { - // no Device-URL for the user availabe, but plugin is enabled --> write info to Logger + // no Device-URL for the user availabe, but addon is enabled --> write info to Logger logger("WARN: windowsphonepush is enable for user " . $rr['uid'] . ", but no Device-URL is specified for the user."); } else { // retrieve the number of unseen items and the id of the latest one (if there are more than @@ -393,7 +393,7 @@ function windowsphonepush_updatesettings() return "Not Authenticated"; } - // no updating if user hasn't enabled the plugin + // no updating if user hasn't enabled the addon $enable = PConfig::get(local_user(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; @@ -434,7 +434,7 @@ function windowsphonepush_updatecounterunseen() return "Not Authenticated"; } - // no updating if user hasn't enabled the plugin + // no updating if user hasn't enabled the addon $enable = PConfig::get(local_user(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; diff --git a/wppost/wppost.php b/wppost/wppost.php index d73005a3..af371af1 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -26,8 +26,8 @@ function wppost_uninstall() { // obsolete - remove Addon::unregisterHook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); - Addon::unregisterHook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } @@ -86,7 +86,7 @@ function wppost_settings(&$a,&$s) { $s .= '

'. t('Wordpress Export').'

'; $s .= ''; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/xmpp/xmpp.php b/xmpp/xmpp.php index fc2d6bb5..2548005e 100644 --- a/xmpp/xmpp.php +++ b/xmpp/xmpp.php @@ -13,21 +13,21 @@ use Friendica\Core\PConfig; function xmpp_install() { - Addon::registerHook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); - Addon::registerHook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); + Addon::registerHook('addon_settings', 'addon/xmpp/xmpp.php', 'xmpp_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_addon_settings_post'); Addon::registerHook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); Addon::registerHook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); } function xmpp_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_plugin_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/xmpp/xmpp.php', 'xmpp_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/xmpp/xmpp.php', 'xmpp_addon_settings_post'); Addon::unregisterHook('page_end', 'addon/xmpp/xmpp.php', 'xmpp_script'); Addon::unregisterHook('logged_in', 'addon/xmpp/xmpp.php', 'xmpp_login'); } -function xmpp_plugin_settings_post() +function xmpp_addon_settings_post() { if (!local_user() || (!x($_POST, 'xmpp-settings-submit'))) { return; @@ -39,7 +39,7 @@ function xmpp_plugin_settings_post() info(t('XMPP settings updated.') . EOL); } -function xmpp_plugin_settings(App $a, &$s) +function xmpp_addon_settings(App $a, &$s) { if (!local_user()) { return; @@ -100,7 +100,7 @@ function xmpp_login() } } -function xmpp_plugin_admin(App $a, &$o) +function xmpp_addon_admin(App $a, &$o) { $t = get_markup_template("admin.tpl", "addon/xmpp/"); @@ -111,7 +111,7 @@ function xmpp_plugin_admin(App $a, &$o) ]); } -function xmpp_plugin_admin_post() +function xmpp_addon_admin_post() { $bosh_proxy = ((x($_POST, 'bosh_proxy')) ? trim($_POST['bosh_proxy']) : ''); $central_userbase = ((x($_POST, 'central_userbase')) ? intval($_POST['central_userbase']) : false); diff --git a/yourls/yourls.php b/yourls/yourls.php index 96554bb5..84bfa8d7 100644 --- a/yourls/yourls.php +++ b/yourls/yourls.php @@ -3,7 +3,7 @@ /** * Name: Yourls - * Description: Defines a YourLS url shortener for the Statusnet & Twitter plugins + * Description: Defines a YourLS url shortener for the Statusnet & Twitter addons * Version: 1.0 * Author: Keith Fernie * @@ -12,15 +12,15 @@ use Friendica\Core\Addon; use Friendica\Core\Config; function yourls_install() { - Addon::registerHook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); - Addon::registerHook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); } function yourls_uninstall() { - Addon::unregisterHook('plugin_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); - Addon::unregisterHook('plugin_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/yourls/yourls.php', 'yourls_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/yourls/yourls.php', 'yourls_addon_settings_post'); Config::set('yourls','url1',trim($_POST[''])); Config::set('yourls','username1',trim($_POST[''])); Config::set('yourls','password1',trim($_POST[''])); From eec158b5f3767fd39f8c79970a885094d9abed65 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 20 Jan 2018 09:30:08 -0500 Subject: [PATCH 005/116] Add missing include/fix zrl location --- forumdirectory/forumdirectory.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 393063cb..10924c67 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -11,6 +11,12 @@ use Friendica\Content\Nav; use Friendica\Content\Widget; use Friendica\Core\Config; use Friendica\Database\DBM; +use Friendica\Model\Profile; + +require_once 'boot.php'; +require_once 'include/dba.php'; +require_once 'include/plugin.php'; +require_once 'include/text.php'; function forumdirectory_install() { @@ -74,7 +80,7 @@ function forumdirectory_content(&$a) $gdirpath = Config::get('system', 'directory'); if (strlen($gdirpath)) { $globaldir = ''; + . Profile::zrl($gdirpath, true) . '">' . t('Global Directory') . '
'; } $admin = ''; From 96c41e56233765571870b56081efc366655bead4 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sat, 20 Jan 2018 11:01:59 -0500 Subject: [PATCH 006/116] Update strings update strings to contain addon --- INSTALL.txt | 4 +- README.md | 8 +- blackout/README.md | 4 +- blogger/lang/C/messages.po | 2 +- blogger/lang/ca/strings.php | 2 +- blogger/lang/cs/messages.po | 4 +- blogger/lang/de/messages.po | 4 +- blogger/lang/de/strings.php | 2 +- blogger/lang/eo/strings.php | 2 +- blogger/lang/es/messages.po | 4 +- blogger/lang/es/strings.php | 2 +- blogger/lang/fr/messages.po | 2 +- blogger/lang/fr/strings.php | 2 +- blogger/lang/is/messages.po | 2 +- blogger/lang/is/strings.php | 2 +- blogger/lang/it/messages.po | 4 +- blogger/lang/it/strings.php | 2 +- blogger/lang/nb-no/strings.php | 2 +- blogger/lang/pl/strings.php | 2 +- blogger/lang/pt-br/messages.po | 2 +- blogger/lang/pt-br/strings.php | 2 +- blogger/lang/ro/messages.po | 2 +- blogger/lang/ro/strings.php | 2 +- blogger/lang/ru/messages.po | 2 +- blogger/lang/ru/strings.php | 2 +- blogger/lang/zh-cn/strings.php | 2 +- buffer/README.md | 2 +- buffer/lang/C/messages.po | 2 +- buffer/lang/cs/messages.po | 4 +- buffer/lang/cs/strings.php | 2 +- buffer/lang/de/messages.po | 4 +- buffer/lang/de/strings.php | 2 +- buffer/lang/es/messages.po | 4 +- buffer/lang/es/strings.php | 2 +- buffer/lang/fr/messages.po | 2 +- buffer/lang/fr/strings.php | 2 +- buffer/lang/it/messages.po | 4 +- buffer/lang/it/strings.php | 2 +- buffer/lang/pt-br/messages.po | 4 +- buffer/lang/pt-br/strings.php | 2 +- buffer/lang/ro/messages.po | 2 +- buffer/lang/ro/strings.php | 2 +- buffer/lang/ru/messages.po | 2 +- buffer/lang/ru/strings.php | 2 +- communityhome/README.md | 4 +- dav/README.md | 4 +- dav/SabreDAV/ChangeLog | 74 +++---- .../lib/Sabre/CalDAV/ICSExportPlugin.php | 4 +- .../Sabre/CalDAV/Notifications/Collection.php | 2 +- .../CalDAV/Notifications/ICollection.php | 2 +- dav/SabreDAV/lib/Sabre/CalDAV/Plugin.php | 22 +-- .../lib/Sabre/CalDAV/Schedule/Outbox.php | 2 +- dav/SabreDAV/lib/Sabre/CardDAV/Plugin.php | 14 +- dav/SabreDAV/lib/Sabre/DAV/Auth/Plugin.php | 8 +- .../Sabre/DAV/Browser/GuessContentType.php | 4 +- .../Sabre/DAV/Browser/MapGetToPropFind.php | 4 +- dav/SabreDAV/lib/Sabre/DAV/Browser/Plugin.php | 8 +- dav/SabreDAV/lib/Sabre/DAV/Locks/Plugin.php | 16 +- dav/SabreDAV/lib/Sabre/DAV/Mount/Plugin.php | 4 +- .../lib/Sabre/DAV/PartialUpdate/Plugin.php | 14 +- dav/SabreDAV/lib/Sabre/DAV/Server.php | 18 +- dav/SabreDAV/lib/Sabre/DAV/ServerPlugin.php | 12 +- .../Sabre/DAV/TemporaryFileFilterPlugin.php | 8 +- dav/SabreDAV/lib/Sabre/DAVACL/Plugin.php | 18 +- .../lib/Sabre/DAVACL/PrincipalBackend/PDO.php | 2 +- dav/colorpicker/README.md | 2 +- dav/common/wdcal/js/jquery.calendar.js | 2 +- dav/friendica/layout.fnk.php | 6 +- dav/jqueryui/jquery.ui.datepicker-de.js | 2 +- dav/lang/C/messages.po | 2 +- dav/lang/ca/strings.php | 2 +- dav/lang/cs/messages.po | 2 +- dav/lang/cs/strings.php | 2 +- dav/lang/de/messages.po | 2 +- dav/lang/de/strings.php | 2 +- dav/lang/eo/strings.php | 2 +- dav/lang/es/messages.po | 4 +- dav/lang/es/strings.php | 2 +- dav/lang/fr/strings.php | 2 +- dav/lang/is/strings.php | 2 +- dav/lang/it/messages.po | 4 +- dav/lang/it/strings.php | 2 +- dav/lang/nb-no/strings.php | 2 +- dav/lang/pl/strings.php | 2 +- dav/lang/pt-br/strings.php | 2 +- dav/lang/ro/messages.po | 2 +- dav/lang/ro/strings.php | 2 +- dav/lang/ru/strings.php | 2 +- dav/lang/zh-cn/strings.php | 2 +- diaspora/diaspora.php | 2 +- diaspora/lang/C/messages.po | 2 +- diaspora/lang/cs/messages.po | 4 +- diaspora/lang/cs/strings.php | 2 +- diaspora/lang/de/messages.po | 2 +- diaspora/lang/de/strings.php | 2 +- diaspora/lang/es/messages.po | 4 +- diaspora/lang/es/strings.php | 2 +- diaspora/lang/fr/messages.po | 2 +- diaspora/lang/fr/strings.php | 2 +- diaspora/lang/it/messages.po | 4 +- diaspora/lang/it/strings.php | 2 +- diaspora/lang/pt-br/messages.po | 2 +- diaspora/lang/ro/messages.po | 2 +- diaspora/lang/ro/strings.php | 2 +- diaspora/lang/ru/messages.po | 2 +- diaspora/lang/ru/strings.php | 2 +- diaspora/lang/zh-cn/messages.po | 2 +- diaspora/lang/zh-cn/strings.php | 2 +- dwpost/dwpost.php | 2 +- dwpost/lang/C/messages.po | 2 +- dwpost/lang/ca/strings.php | 2 +- dwpost/lang/cs/messages.po | 4 +- dwpost/lang/cs/strings.php | 2 +- dwpost/lang/de/messages.po | 4 +- dwpost/lang/de/strings.php | 2 +- dwpost/lang/eo/strings.php | 2 +- dwpost/lang/es/messages.po | 4 +- dwpost/lang/es/strings.php | 2 +- dwpost/lang/fr/messages.po | 2 +- dwpost/lang/fr/strings.php | 2 +- dwpost/lang/is/strings.php | 2 +- dwpost/lang/it/messages.po | 4 +- dwpost/lang/it/strings.php | 2 +- dwpost/lang/nb-no/strings.php | 2 +- dwpost/lang/pl/strings.php | 2 +- dwpost/lang/pt-br/messages.po | 2 +- dwpost/lang/pt-br/strings.php | 2 +- dwpost/lang/ro/messages.po | 2 +- dwpost/lang/ro/strings.php | 2 +- dwpost/lang/ru/messages.po | 2 +- dwpost/lang/ru/strings.php | 2 +- dwpost/lang/zh-cn/strings.php | 2 +- fortunate/fortunate.php | 2 +- geonames/lang/C/messages.po | 2 +- geonames/lang/ca/strings.php | 2 +- geonames/lang/cs/messages.po | 2 +- geonames/lang/cs/strings.php | 2 +- geonames/lang/de/messages.po | 4 +- geonames/lang/de/strings.php | 2 +- geonames/lang/eo/strings.php | 2 +- geonames/lang/es/messages.po | 4 +- geonames/lang/es/strings.php | 2 +- geonames/lang/fr/strings.php | 2 +- geonames/lang/is/strings.php | 2 +- geonames/lang/it/messages.po | 4 +- geonames/lang/it/strings.php | 2 +- geonames/lang/nb-no/strings.php | 2 +- geonames/lang/pl/strings.php | 2 +- geonames/lang/pt-br/strings.php | 2 +- geonames/lang/ro/messages.po | 2 +- geonames/lang/ro/strings.php | 2 +- geonames/lang/ru/messages.po | 2 +- geonames/lang/ru/strings.php | 2 +- geonames/lang/zh-cn/strings.php | 2 +- gnot/lang/C/messages.po | 2 +- gnot/lang/ca/strings.php | 2 +- gnot/lang/cs/messages.po | 4 +- gnot/lang/cs/strings.php | 2 +- gnot/lang/de/messages.po | 4 +- gnot/lang/de/strings.php | 2 +- gnot/lang/eo/strings.php | 2 +- gnot/lang/es/messages.po | 4 +- gnot/lang/es/strings.php | 2 +- gnot/lang/fr/strings.php | 2 +- gnot/lang/is/strings.php | 2 +- gnot/lang/it/messages.po | 4 +- gnot/lang/it/strings.php | 2 +- gnot/lang/nb-no/strings.php | 2 +- gnot/lang/pl/strings.php | 2 +- gnot/lang/pt-br/strings.php | 2 +- gnot/lang/ro/messages.po | 2 +- gnot/lang/ro/strings.php | 2 +- gnot/lang/ru/messages.po | 2 +- gnot/lang/ru/strings.php | 2 +- gnot/lang/zh-cn/strings.php | 2 +- gravatar/README.md | 2 +- ijpost/ijpost.php | 2 +- ijpost/lang/C/messages.po | 2 +- ijpost/lang/ca/strings.php | 2 +- ijpost/lang/cs/messages.po | 4 +- ijpost/lang/cs/strings.php | 2 +- ijpost/lang/de/messages.po | 4 +- ijpost/lang/de/strings.php | 2 +- ijpost/lang/eo/strings.php | 2 +- ijpost/lang/es/messages.po | 4 +- ijpost/lang/es/strings.php | 2 +- ijpost/lang/fr/strings.php | 2 +- ijpost/lang/is/strings.php | 2 +- ijpost/lang/it/messages.po | 4 +- ijpost/lang/it/strings.php | 2 +- ijpost/lang/nb-no/strings.php | 2 +- ijpost/lang/pl/strings.php | 2 +- ijpost/lang/pt-br/messages.po | 2 +- ijpost/lang/pt-br/strings.php | 2 +- ijpost/lang/ro/messages.po | 2 +- ijpost/lang/ro/strings.php | 2 +- ijpost/lang/ru/strings.php | 2 +- ijpost/lang/zh-cn/strings.php | 2 +- impressum/README.md | 6 +- impressum/lang/de/messages.po | 2 +- impressum/lang/de/strings.php | 2 +- impressum/lang/it/messages.po | 2 +- impressum/lang/it/strings.php | 2 +- jappixmini/README | 4 +- jappixmini/jappix/js/adhoc.js | 2 +- jappixmini/jappix/js/anonymous.js | 4 +- jappixmini/jappix/js/archives.js | 2 +- jappixmini/jappix/js/connection.js | 4 +- jappixmini/jappix/js/directory.js | 2 +- jappixmini/jappix/js/discovery.js | 2 +- jappixmini/jappix/js/favorites.js | 2 +- jappixmini/jappix/js/home.js | 4 +- jappixmini/jappix/js/inbox.js | 2 +- jappixmini/jappix/js/integratebox.js | 4 +- jappixmini/jappix/js/interface.js | 4 +- jappixmini/jappix/js/jquery.js | 2 +- jappixmini/jappix/js/jquery.placeholder.js | 2 +- jappixmini/jappix/js/me.js | 2 +- jappixmini/jappix/js/microblog.js | 2 +- jappixmini/jappix/js/mini.js | 2 +- jappixmini/jappix/js/mucadmin.js | 2 +- jappixmini/jappix/js/music.js | 2 +- jappixmini/jappix/js/notification.js | 2 +- jappixmini/jappix/js/options.js | 2 +- jappixmini/jappix/js/pep.js | 2 +- jappixmini/jappix/js/presence.js | 2 +- jappixmini/jappix/js/privacy.js | 2 +- jappixmini/jappix/js/roster.js | 2 +- jappixmini/jappix/js/rosterx.js | 2 +- jappixmini/jappix/js/talk.js | 2 +- jappixmini/jappix/js/userinfos.js | 2 +- jappixmini/jappix/js/vcard.js | 2 +- jappixmini/jappix/js/welcome.js | 2 +- jappixmini/jappix/lang/ar/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/bg/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/cs/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/de/LC_MESSAGES/main.po | 4 +- .../jappix/lang/en/LC_MESSAGES/main.pot | 2 +- jappixmini/jappix/lang/eo/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/es/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/et/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/fa/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/fr/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/hu/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/id/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/it/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/ja/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/nl/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/oc/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/pl/LC_MESSAGES/main.po | 4 +- .../jappix/lang/pt-BR/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/ru/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/sk/LC_MESSAGES/main.po | 4 +- jappixmini/jappix/lang/sv/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/uk/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/lang/zh/LC_MESSAGES/main.po | 2 +- jappixmini/jappix/php/install.php | 2 +- jappixmini/lang/it/messages.po | 4 +- jappixmini/lang/it/strings.php | 4 +- js_upload/file-uploader/readme.md | 8 +- krynn/lang/C/messages.po | 2 +- krynn/lang/ca/strings.php | 2 +- krynn/lang/cs/messages.po | 4 +- krynn/lang/cs/strings.php | 2 +- krynn/lang/de/messages.po | 4 +- krynn/lang/de/strings.php | 2 +- krynn/lang/eo/strings.php | 2 +- krynn/lang/es/messages.po | 4 +- krynn/lang/es/strings.php | 2 +- krynn/lang/fr/strings.php | 2 +- krynn/lang/is/strings.php | 2 +- krynn/lang/it/messages.po | 4 +- krynn/lang/it/strings.php | 2 +- krynn/lang/nb-no/strings.php | 2 +- krynn/lang/pl/strings.php | 2 +- krynn/lang/pt-br/strings.php | 2 +- krynn/lang/ro/messages.po | 2 +- krynn/lang/ro/strings.php | 2 +- krynn/lang/ru/strings.php | 2 +- krynn/lang/zh-cn/strings.php | 2 +- langfilter/lang/it/messages.po | 2 +- langfilter/lang/it/strings.php | 2 +- libertree/lang/C/messages.po | 2 +- libertree/lang/ca/strings.php | 2 +- libertree/lang/cs/messages.po | 2 +- libertree/lang/cs/strings.php | 2 +- libertree/lang/de/messages.po | 4 +- libertree/lang/de/strings.php | 2 +- libertree/lang/eo/strings.php | 2 +- libertree/lang/es/messages.po | 4 +- libertree/lang/es/strings.php | 2 +- libertree/lang/fr/messages.po | 4 +- libertree/lang/fr/strings.php | 2 +- libertree/lang/is/strings.php | 2 +- libertree/lang/it/messages.po | 4 +- libertree/lang/it/strings.php | 2 +- libertree/lang/nb-no/strings.php | 2 +- libertree/lang/pl/strings.php | 2 +- libertree/lang/pt-br/messages.po | 2 +- libertree/lang/pt-br/strings.php | 2 +- libertree/lang/ro/messages.po | 2 +- libertree/lang/ro/strings.php | 2 +- libertree/lang/ru/strings.php | 2 +- libertree/lang/zh-cn/strings.php | 2 +- libertree/libertree.php | 2 +- libravatar/README.md | 4 +- ljpost/lang/C/messages.po | 2 +- ljpost/lang/ca/strings.php | 2 +- ljpost/lang/cs/messages.po | 4 +- ljpost/lang/cs/strings.php | 2 +- ljpost/lang/de/messages.po | 4 +- ljpost/lang/de/strings.php | 2 +- ljpost/lang/eo/strings.php | 2 +- ljpost/lang/es/messages.po | 4 +- ljpost/lang/es/strings.php | 2 +- ljpost/lang/fr/strings.php | 2 +- ljpost/lang/is/strings.php | 2 +- ljpost/lang/it/messages.po | 4 +- ljpost/lang/it/strings.php | 2 +- ljpost/lang/nb-no/strings.php | 2 +- ljpost/lang/pl/strings.php | 2 +- ljpost/lang/pt-br/messages.po | 2 +- ljpost/lang/pt-br/strings.php | 2 +- ljpost/lang/ro/messages.po | 2 +- ljpost/lang/ro/strings.php | 2 +- ljpost/lang/ru/strings.php | 2 +- ljpost/lang/zh-cn/strings.php | 2 +- ljpost/ljpost.php | 2 +- mailstream/phpmailer/class.phpmailer.php | 2 +- mathjax/lang/it/messages.po | 2 +- mathjax/lang/it/strings.php | 2 +- nsfw/README | 2 +- nsfw/lang/C/messages.po | 2 +- nsfw/lang/ca/strings.php | 2 +- nsfw/lang/cs/messages.po | 4 +- nsfw/lang/cs/strings.php | 2 +- nsfw/lang/de/messages.po | 4 +- nsfw/lang/de/strings.php | 2 +- nsfw/lang/eo/strings.php | 2 +- nsfw/lang/es/messages.po | 4 +- nsfw/lang/es/strings.php | 2 +- nsfw/lang/fr/strings.php | 2 +- nsfw/lang/is/strings.php | 2 +- nsfw/lang/it/messages.po | 4 +- nsfw/lang/it/strings.php | 2 +- nsfw/lang/nb-no/strings.php | 2 +- nsfw/lang/pl/strings.php | 2 +- nsfw/lang/pt-br/messages.po | 2 +- nsfw/lang/pt-br/strings.php | 2 +- nsfw/lang/ro/messages.po | 2 +- nsfw/lang/ro/strings.php | 2 +- nsfw/lang/ru/strings.php | 2 +- nsfw/lang/zh-cn/strings.php | 2 +- openstreetmap/README | 8 +- pageheader/README | 2 +- piwik/README.md | 4 +- planets/lang/C/messages.po | 2 +- planets/lang/ca/strings.php | 2 +- planets/lang/cs/messages.po | 4 +- planets/lang/cs/strings.php | 2 +- planets/lang/de/messages.po | 4 +- planets/lang/de/strings.php | 2 +- planets/lang/eo/strings.php | 2 +- planets/lang/es/messages.po | 4 +- planets/lang/es/strings.php | 2 +- planets/lang/fr/strings.php | 2 +- planets/lang/is/strings.php | 2 +- planets/lang/it/messages.po | 4 +- planets/lang/it/strings.php | 2 +- planets/lang/nb-no/strings.php | 2 +- planets/lang/pl/strings.php | 2 +- planets/lang/pt-br/strings.php | 2 +- planets/lang/ro/messages.po | 2 +- planets/lang/ro/strings.php | 2 +- planets/lang/ru/strings.php | 2 +- planets/lang/zh-cn/strings.php | 2 +- public_server/README.md | 6 +- pumpio/lang/C/messages.po | 2 +- pumpio/lang/cs/messages.po | 4 +- pumpio/lang/cs/strings.php | 2 +- pumpio/lang/de/messages.po | 4 +- pumpio/lang/de/strings.php | 2 +- pumpio/lang/es/messages.po | 4 +- pumpio/lang/es/strings.php | 2 +- pumpio/lang/fr/messages.po | 2 +- pumpio/lang/fr/strings.php | 2 +- pumpio/lang/it/messages.po | 4 +- pumpio/lang/it/strings.php | 2 +- pumpio/lang/pt-br/messages.po | 2 +- pumpio/lang/pt-br/strings.php | 2 +- pumpio/lang/ro/messages.po | 2 +- pumpio/lang/ro/strings.php | 2 +- pumpio/pumpio.php | 2 +- randplace/lang/C/messages.po | 2 +- randplace/lang/ca/strings.php | 2 +- randplace/lang/cs/messages.po | 4 +- randplace/lang/cs/strings.php | 2 +- randplace/lang/de/messages.po | 4 +- randplace/lang/de/strings.php | 2 +- randplace/lang/eo/strings.php | 2 +- randplace/lang/es/messages.po | 4 +- randplace/lang/es/strings.php | 2 +- randplace/lang/fr/strings.php | 2 +- randplace/lang/is/strings.php | 2 +- randplace/lang/it/messages.po | 4 +- randplace/lang/it/strings.php | 2 +- randplace/lang/nb-no/strings.php | 2 +- randplace/lang/pl/strings.php | 2 +- randplace/lang/pt-br/strings.php | 2 +- randplace/lang/ro/messages.po | 2 +- randplace/lang/ro/strings.php | 2 +- randplace/lang/ru/strings.php | 2 +- randplace/lang/sv/strings.php | 2 +- randplace/lang/zh-cn/strings.php | 2 +- remote_permissions/README.md | 6 +- sniper/sniper.php | 2 +- statusnet/README.md | 6 +- testdrive/README.md | 8 +- testdrive/testdrive.php | 2 +- tumblr/README.md | 2 +- tumblr/lang/C/messages.po | 2 +- tumblr/lang/ca/strings.php | 2 +- tumblr/lang/cs/messages.po | 2 +- tumblr/lang/cs/strings.php | 2 +- tumblr/lang/de/messages.po | 4 +- tumblr/lang/de/strings.php | 2 +- tumblr/lang/eo/strings.php | 2 +- tumblr/lang/es/messages.po | 4 +- tumblr/lang/es/strings.php | 2 +- tumblr/lang/fr/strings.php | 2 +- tumblr/lang/is/strings.php | 2 +- tumblr/lang/it/messages.po | 4 +- tumblr/lang/it/strings.php | 2 +- tumblr/lang/nb-no/strings.php | 2 +- tumblr/lang/pl/strings.php | 2 +- tumblr/lang/pt-br/messages.po | 2 +- tumblr/lang/pt-br/strings.php | 2 +- tumblr/lang/ro/messages.po | 2 +- tumblr/lang/ro/strings.php | 2 +- tumblr/lang/ru/strings.php | 2 +- tumblr/lang/zh-cn/strings.php | 2 +- twitter/README.md | 6 +- twitter/lang/C/messages.po | 2 +- twitter/lang/ca/strings.php | 2 +- twitter/lang/cs/messages.po | 4 +- twitter/lang/cs/strings.php | 2 +- twitter/lang/de/messages.po | 4 +- twitter/lang/de/strings.php | 2 +- twitter/lang/eo/strings.php | 2 +- twitter/lang/es/messages.po | 4 +- twitter/lang/es/strings.php | 2 +- twitter/lang/fr/messages.po | 2 +- twitter/lang/fr/strings.php | 2 +- twitter/lang/is/strings.php | 2 +- twitter/lang/it/messages.po | 4 +- twitter/lang/it/strings.php | 2 +- twitter/lang/nb-no/strings.php | 2 +- twitter/lang/pl/strings.php | 2 +- twitter/lang/pt-br/messages.po | 2 +- twitter/lang/pt-br/strings.php | 2 +- twitter/lang/ro/messages.po | 2 +- twitter/lang/ro/strings.php | 2 +- twitter/lang/ru/messages.po | 2 +- twitter/lang/ru/strings.php | 2 +- twitter/lang/sv/strings.php | 2 +- twitter/lang/zh-cn/strings.php | 2 +- webrtc/README.md | 6 +- webrtc/lang/it/messages.po | 2 +- webrtc/lang/it/strings.php | 2 +- widgets/lang/C/messages.po | 2 +- widgets/lang/ca/strings.php | 2 +- widgets/lang/cs/strings.php | 2 +- widgets/lang/de/strings.php | 2 +- widgets/lang/eo/strings.php | 2 +- widgets/lang/es/strings.php | 2 +- widgets/lang/fr/strings.php | 2 +- widgets/lang/is/strings.php | 2 +- widgets/lang/it/strings.php | 2 +- widgets/lang/nb-no/strings.php | 2 +- widgets/lang/pl/strings.php | 2 +- widgets/lang/pt-br/strings.php | 2 +- widgets/lang/ru/strings.php | 2 +- widgets/lang/sv/strings.php | 2 +- widgets/lang/zh-cn/strings.php | 2 +- windowsphonepush/lang/C/messages.po | 2 +- windowsphonepush/lang/de/messages.po | 4 +- windowsphonepush/lang/de/strings.php | 2 +- windowsphonepush/lang/es/messages.po | 4 +- windowsphonepush/lang/es/strings.php | 2 +- windowsphonepush/lang/fr/messages.po | 2 +- windowsphonepush/lang/fr/strings.php | 2 +- windowsphonepush/lang/it/messages.po | 4 +- windowsphonepush/lang/it/strings.php | 2 +- windowsphonepush/lang/ro/messages.po | 4 +- windowsphonepush/lang/ro/strings.php | 2 +- wppost/lang/C/messages.po | 2 +- wppost/lang/ca/strings.php | 2 +- wppost/lang/cs/messages.po | 2 +- wppost/lang/cs/strings.php | 2 +- wppost/lang/de/messages.po | 4 +- wppost/lang/de/strings.php | 2 +- wppost/lang/eo/strings.php | 2 +- wppost/lang/es/messages.po | 4 +- wppost/lang/es/strings.php | 2 +- wppost/lang/fr/strings.php | 2 +- wppost/lang/is/strings.php | 2 +- wppost/lang/it/messages.po | 4 +- wppost/lang/it/strings.php | 2 +- wppost/lang/nb-no/strings.php | 2 +- wppost/lang/pl/strings.php | 2 +- wppost/lang/pt-br/messages.po | 2 +- wppost/lang/pt-br/strings.php | 2 +- wppost/lang/ro/messages.po | 2 +- wppost/lang/ro/strings.php | 2 +- wppost/lang/ru/strings.php | 2 +- wppost/lang/zh-cn/strings.php | 2 +- xmpp/converse/README.rst | 2 +- xmpp/converse/builds/converse.min.js | 180 +++++++++--------- yourls/README | 6 +- 519 files changed, 829 insertions(+), 829 deletions(-) diff --git a/INSTALL.txt b/INSTALL.txt index f45e86b8..c06b08e2 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -6,7 +6,7 @@ To install all addons using git, cd into your top level Friendica directory and git clone https://github.com/friendica/friendica-addons.git addon -This will clone the entire repository in a directory called addon. They can now be activated in the plugins section of your admin panel. +This will clone the entire repository in a directory called addon. They can now be activated in the addons section of your admin panel. ******************** * Install Manually * @@ -15,4 +15,4 @@ This will clone the entire repository in a directory called addon. They can now 1. Download the archive (Download ZIP button) containing the addons. 2. Unzip the contents of the archive to your harddrive. 3. Upload the extracted directory and all it's contents to /path/to/friendica/addon. You will need to create the addon directory if this is the first addon you have installed. -4. Activate the addon in the plugins section of your admin panel. +4. Activate the addon in the addons section of your admin panel. diff --git a/README.md b/README.md index 52fdbb2e..deffa2a5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ Addons for Friendica ==================== -This repository is a collection of plugins for the [Friendica Social Communications Server](https://github.com/friendica/friendica). -You can add these plugins to the /addon directory of your Friendica installation +This repository is a collection of addons for the [Friendica Social Communications Server](https://github.com/friendica/friendica). +You can add these addons to the /addon directory of your Friendica installation do extend the functionality of your node. After uploading the addons to your server, you need to activate the desired addons @@ -14,7 +14,7 @@ in cases the addon developers have choosen not to include them here. Connectors ---------- -Among these plugins there are also the [connectors](https://github.com/friendica/friendica/blob/master/doc/Connectors.md) for various other networks +Among these addons there are also the [connectors](https://github.com/friendica/friendica/blob/master/doc/Connectors.md) for various other networks (e.g. Twitter, pump.io, Google+) that are needed for communication when the protocoll is not supported by Friendica core (DFRN, OStatus and Diaspora). @@ -28,7 +28,7 @@ Development The addon interface of Friendica is very flexible and powerful, so if you are missing functionality, your chances are high it may be added with an addon. -See the [documentation](https://github.com/friendica/friendica/blob/master/doc/Plugins.md) for more informations on the plugin development. +See the [documentation](https://github.com/friendica/friendica/blob/master/doc/Addons.md) for more informations on the addon development. Addons can be translated like any other part of Friendica. Translations for the addons included in this repository are done at the [Transifex project](https://www.transifex.com/projects/p/friendica/) for Friendica. diff --git a/blackout/README.md b/blackout/README.md index 1974ef7b..1bf536ca 100644 --- a/blackout/README.md +++ b/blackout/README.md @@ -8,12 +8,12 @@ blackout addon About ----- -This plugin will allow you to enter a date/time period during which +This addon will allow you to enter a date/time period during which all your ~friendica visitors from the web will be redirected to a page you can configure in the admin panel as well. Calls to the API and the communication with other ~friendica nodes is -not effected from this plugin. +not effected from this addon. If you enter a period the current date would be affected none of the currently logged in users will be effected as well. But if they log diff --git a/blogger/lang/C/messages.po b/blogger/lang/C/messages.po index 1f99bc65..f04bbb39 100644 --- a/blogger/lang/C/messages.po +++ b/blogger/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Blogger Export" msgstr "" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "" #: blogger.php:87 diff --git a/blogger/lang/ca/strings.php b/blogger/lang/ca/strings.php index 354d354a..572617ca 100644 --- a/blogger/lang/ca/strings.php +++ b/blogger/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Enviament a blogger"; $a->strings["Blogger Post Settings"] = "Ajustos d'enviament a blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Habilita el Plugin d'Enviaments a Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Habilita el Addon d'Enviaments a Blogger"; $a->strings["Blogger username"] = "Nom d'usuari a blogger"; $a->strings["Blogger password"] = "Contrasenya a blogger"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/cs/messages.po b/blogger/lang/cs/messages.po index 0d2a1227..e2389585 100644 --- a/blogger/lang/cs/messages.po +++ b/blogger/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Blogger Export" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Povolit Blogger Post Plugin" +msgid "Enable Blogger Post Addon" +msgstr "Povolit Blogger Post Addon" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/de/messages.po b/blogger/lang/de/messages.po index 61cb7863..0ecdfd79 100644 --- a/blogger/lang/de/messages.po +++ b/blogger/lang/de/messages.po @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Blogger Export" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Blogger-Post-Plugin aktivieren" +msgid "Enable Blogger Post Addon" +msgstr "Blogger-Post-Addon aktivieren" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/de/strings.php b/blogger/lang/de/strings.php index 8e44b4c2..549b6a2b 100644 --- a/blogger/lang/de/strings.php +++ b/blogger/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to blogger"] = "Auf Blogger posten"; $a->strings["Blogger Export"] = "Blogger Export"; -$a->strings["Enable Blogger Post Plugin"] = "Blogger-Post-Plugin aktivieren"; +$a->strings["Enable Blogger Post Addon"] = "Blogger-Post-Addon aktivieren"; $a->strings["Blogger username"] = "Blogger-Benutzername"; $a->strings["Blogger password"] = "Blogger-Passwort"; $a->strings["Blogger API URL"] = "Blogger-API-URL"; diff --git a/blogger/lang/eo/strings.php b/blogger/lang/eo/strings.php index 5ab29790..a7783cd8 100644 --- a/blogger/lang/eo/strings.php +++ b/blogger/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Afiŝi al blogger"; $a->strings["Blogger Post Settings"] = "Agordo pri Blogger Afiŝoj"; -$a->strings["Enable Blogger Post Plugin"] = "Ŝalti la Blogger afiŝo kromprogramon"; +$a->strings["Enable Blogger Post Addon"] = "Ŝalti la Blogger afiŝo kromprogramon"; $a->strings["Blogger username"] = "Blogger uzantonomo"; $a->strings["Blogger password"] = "Blogger pasvorto"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/es/messages.po b/blogger/lang/es/messages.po index 86b1dcb7..66b6804f 100644 --- a/blogger/lang/es/messages.po +++ b/blogger/lang/es/messages.po @@ -27,8 +27,8 @@ msgid "Blogger Export" msgstr "Esportar Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Activar plugin de entrada de Blogger" +msgid "Enable Blogger Post Addon" +msgstr "Activar addon de entrada de Blogger" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/es/strings.php b/blogger/lang/es/strings.php index 01441ae5..47e44a49 100644 --- a/blogger/lang/es/strings.php +++ b/blogger/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to blogger"] = "Entrada para blogger"; $a->strings["Blogger Export"] = "Esportar Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Activar plugin de entrada de Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Activar addon de entrada de Blogger"; $a->strings["Blogger username"] = "Nombre de usuario de Blogger"; $a->strings["Blogger password"] = "Contraseña de Blogger"; $a->strings["Blogger API URL"] = "URL API de Blogger"; diff --git a/blogger/lang/fr/messages.po b/blogger/lang/fr/messages.po index 0438f3d8..497bf0be 100644 --- a/blogger/lang/fr/messages.po +++ b/blogger/lang/fr/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Activer le connecteur Blogger" #: blogger.php:87 diff --git a/blogger/lang/fr/strings.php b/blogger/lang/fr/strings.php index 2265182a..89a429ae 100644 --- a/blogger/lang/fr/strings.php +++ b/blogger/lang/fr/strings.php @@ -7,7 +7,7 @@ function string_plural_select_fr($n){ ; $a->strings["Post to blogger"] = "Poster sur Blogger"; $a->strings["Blogger Export"] = ""; -$a->strings["Enable Blogger Post Plugin"] = "Activer le connecteur Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Activer le connecteur Blogger"; $a->strings["Blogger username"] = "Nom d'utilisateur Blogger"; $a->strings["Blogger password"] = "Mot de passe Blogger"; $a->strings["Blogger API URL"] = "URL de l'API de Blogger"; diff --git a/blogger/lang/is/messages.po b/blogger/lang/is/messages.po index 1c76cf74..e29ce496 100644 --- a/blogger/lang/is/messages.po +++ b/blogger/lang/is/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "Flytja út blogg" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Virkja sendiviðbót fyrir blogg" #: blogger.php:87 diff --git a/blogger/lang/is/strings.php b/blogger/lang/is/strings.php index 01f532f6..deab7af8 100644 --- a/blogger/lang/is/strings.php +++ b/blogger/lang/is/strings.php @@ -7,7 +7,7 @@ function string_plural_select_is($n){ ; $a->strings["Post to blogger"] = "Senda færslu á bloggara"; $a->strings["Blogger Export"] = "Flytja út blogg"; -$a->strings["Enable Blogger Post Plugin"] = "Virkja sendiviðbót fyrir blogg"; +$a->strings["Enable Blogger Post Addon"] = "Virkja sendiviðbót fyrir blogg"; $a->strings["Blogger username"] = "Notandanafn bloggara"; $a->strings["Blogger password"] = "Aðgangsorð bloggara"; $a->strings["Blogger API URL"] = "API slóð bloggs"; diff --git a/blogger/lang/it/messages.po b/blogger/lang/it/messages.po index 6babcabf..ed0b95d7 100644 --- a/blogger/lang/it/messages.po +++ b/blogger/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Esporta Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Abilita il plugin di invio a Blogger" +msgid "Enable Blogger Post Addon" +msgstr "Abilita il addon di invio a Blogger" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/it/strings.php b/blogger/lang/it/strings.php index deea28a5..953fbc0a 100644 --- a/blogger/lang/it/strings.php +++ b/blogger/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to blogger"] = "Invia a Blogger"; $a->strings["Blogger Export"] = "Esporta Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Abilita il plugin di invio a Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Abilita il addon di invio a Blogger"; $a->strings["Blogger username"] = "Nome utente Blogger"; $a->strings["Blogger password"] = "Password Blogger"; $a->strings["Blogger API URL"] = "Indirizzo API Blogger"; diff --git a/blogger/lang/nb-no/strings.php b/blogger/lang/nb-no/strings.php index de7246bc..3c5a03df 100644 --- a/blogger/lang/nb-no/strings.php +++ b/blogger/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = ""; $a->strings["Blogger Post Settings"] = ""; -$a->strings["Enable Blogger Post Plugin"] = ""; +$a->strings["Enable Blogger Post Addon"] = ""; $a->strings["Blogger username"] = ""; $a->strings["Blogger password"] = ""; $a->strings["Blogger API URL"] = ""; diff --git a/blogger/lang/pl/strings.php b/blogger/lang/pl/strings.php index a08b447b..c2e7e2d6 100644 --- a/blogger/lang/pl/strings.php +++ b/blogger/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Post na blogger"; $a->strings["Blogger Post Settings"] = "Ustawienia postów na Blogger"; -$a->strings["Enable Blogger Post Plugin"] = ""; +$a->strings["Enable Blogger Post Addon"] = ""; $a->strings["Blogger username"] = "Nazwa użytkownika na Blogger"; $a->strings["Blogger password"] = "Hasło do Blogger"; $a->strings["Blogger API URL"] = ""; diff --git a/blogger/lang/pt-br/messages.po b/blogger/lang/pt-br/messages.po index af8a5ba0..6b22fc20 100644 --- a/blogger/lang/pt-br/messages.po +++ b/blogger/lang/pt-br/messages.po @@ -29,7 +29,7 @@ msgid "Blogger Export" msgstr "Exportador Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Habilitar plug-in para publicar no Blogger" #: blogger.php:87 diff --git a/blogger/lang/pt-br/strings.php b/blogger/lang/pt-br/strings.php index dcd10fab..74a79aca 100644 --- a/blogger/lang/pt-br/strings.php +++ b/blogger/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to blogger"] = "Publicar no Blogger"; $a->strings["Blogger Export"] = "Exportador Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Habilitar plug-in para publicar no Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Habilitar plug-in para publicar no Blogger"; $a->strings["Blogger username"] = "Nome de usuário no Blogger"; $a->strings["Blogger password"] = "Senha do Blogger"; $a->strings["Blogger API URL"] = "URL da API do Blogger"; diff --git a/blogger/lang/ro/messages.po b/blogger/lang/ro/messages.po index 8ba21d2f..de35da2b 100644 --- a/blogger/lang/ro/messages.po +++ b/blogger/lang/ro/messages.po @@ -27,7 +27,7 @@ msgid "Blogger Export" msgstr "Export pe Blogger " #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Activare Modul Postare pe Blogger " #: blogger.php:87 diff --git a/blogger/lang/ro/strings.php b/blogger/lang/ro/strings.php index f89fd4b9..f6aac95d 100644 --- a/blogger/lang/ro/strings.php +++ b/blogger/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to blogger"] = "Postați pe Blogger"; $a->strings["Blogger Export"] = "Export pe Blogger "; -$a->strings["Enable Blogger Post Plugin"] = "Activare Modul Postare pe Blogger "; +$a->strings["Enable Blogger Post Addon"] = "Activare Modul Postare pe Blogger "; $a->strings["Blogger username"] = "Utilizator Blogger"; $a->strings["Blogger password"] = "Parolă Blogger "; $a->strings["Blogger API URL"] = "URL Cheie API Blogger "; diff --git a/blogger/lang/ru/messages.po b/blogger/lang/ru/messages.po index 38942ed6..93d8ce3f 100644 --- a/blogger/lang/ru/messages.po +++ b/blogger/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "Экспорт в Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Включить плагин Blogger" #: blogger.php:87 diff --git a/blogger/lang/ru/strings.php b/blogger/lang/ru/strings.php index a718ce74..3c2e1a29 100644 --- a/blogger/lang/ru/strings.php +++ b/blogger/lang/ru/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ru($n){ ; $a->strings["Post to blogger"] = "Написать в Blogger"; $a->strings["Blogger Export"] = "Экспорт в Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Включить плагин Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Включить плагин Blogger"; $a->strings["Blogger username"] = "Имя пользователя Blogger"; $a->strings["Blogger password"] = "Пароль Blogger"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/zh-cn/strings.php b/blogger/lang/zh-cn/strings.php index 6134a7d1..d9b71731 100644 --- a/blogger/lang/zh-cn/strings.php +++ b/blogger/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "转播到blogger"; $a->strings["Blogger Post Settings"] = "Blogger转播设置"; -$a->strings["Enable Blogger Post Plugin"] = "使Blogger转播插件可用"; +$a->strings["Enable Blogger Post Addon"] = "使Blogger转播插件可用"; $a->strings["Blogger username"] = "Blogger用户名"; $a->strings["Blogger password"] = "Blogger密码"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/buffer/README.md b/buffer/README.md index 2ba2b01e..f97cf07b 100644 --- a/buffer/README.md +++ b/buffer/README.md @@ -5,4 +5,4 @@ Please register an app at [http://bufferapp.com/developers/api](http://bufferapp Please use (your server address)/buffer/connect as Callback URL. After the registration please enter the values for "Client ID" and "Client Secret" in the -[administration](admin/plugins/buffer). +[administration](admin/addons/buffer). diff --git a/buffer/lang/C/messages.po b/buffer/lang/C/messages.po index 17522ebe..3d519337 100644 --- a/buffer/lang/C/messages.po +++ b/buffer/lang/C/messages.po @@ -58,7 +58,7 @@ msgid "Authenticate your Buffer connection" msgstr "" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" +msgid "Enable Buffer Post Addon" msgstr "" #: buffer.php:151 diff --git a/buffer/lang/cs/messages.po b/buffer/lang/cs/messages.po index 7ec1390b..63e753b0 100644 --- a/buffer/lang/cs/messages.po +++ b/buffer/lang/cs/messages.po @@ -60,8 +60,8 @@ msgid "Authenticate your Buffer connection" msgstr "Přihlásit ke spojení na Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" -msgstr "Povolit Buffer Post Plugin" +msgid "Enable Buffer Post Addon" +msgstr "Povolit Buffer Post Addon" #: buffer.php:151 msgid "Post to Buffer by default" diff --git a/buffer/lang/cs/strings.php b/buffer/lang/cs/strings.php index 052b3e8e..f6ecd1e3 100644 --- a/buffer/lang/cs/strings.php +++ b/buffer/lang/cs/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "návrat ke stránce konektor"; $a->strings["Post to Buffer"] = "Příspěvek na Buffer"; $a->strings["Buffer Export"] = "Buffer Export"; $a->strings["Authenticate your Buffer connection"] = "Přihlásit ke spojení na Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Povolit Buffer Post Plugin"; +$a->strings["Enable Buffer Post Addon"] = "Povolit Buffer Post Addon"; $a->strings["Post to Buffer by default"] = "Defaultně zaslat na Buffer"; $a->strings["Check to delete this preset"] = "Zaškrtnout pro smazání tohoto nastavení"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Příspěvky jsou zasílány na všechny účty, které jsou defaultně povoleny:"; diff --git a/buffer/lang/de/messages.po b/buffer/lang/de/messages.po index 21bbdda1..a252d87c 100644 --- a/buffer/lang/de/messages.po +++ b/buffer/lang/de/messages.po @@ -60,8 +60,8 @@ msgid "Authenticate your Buffer connection" msgstr "Authentifiziere deine Verbindung zu buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" -msgstr "Buffer Post-Plugin aktivieren" +msgid "Enable Buffer Post Addon" +msgstr "Buffer Post-Addon aktivieren" #: buffer.php:151 msgid "Post to Buffer by default" diff --git a/buffer/lang/de/strings.php b/buffer/lang/de/strings.php index 4ddbf1e9..dbf3f7dc 100644 --- a/buffer/lang/de/strings.php +++ b/buffer/lang/de/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "zurück zur Connector Seite"; $a->strings["Post to Buffer"] = "Auf buffer veröffentlichen"; $a->strings["Buffer Export"] = "Buffer Export"; $a->strings["Authenticate your Buffer connection"] = "Authentifiziere deine Verbindung zu buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Buffer Post-Plugin aktivieren"; +$a->strings["Enable Buffer Post Addon"] = "Buffer Post-Addon aktivieren"; $a->strings["Post to Buffer by default"] = "Standardmäßig auf buffer veröffentlichen"; $a->strings["Check to delete this preset"] = "Markieren um dieses Preset zu löschen"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Beiträge werden an alle Accounts geschickt, die Standardmäßig aktiviert sind."; diff --git a/buffer/lang/es/messages.po b/buffer/lang/es/messages.po index 20ceacae..7a40dd46 100644 --- a/buffer/lang/es/messages.po +++ b/buffer/lang/es/messages.po @@ -59,8 +59,8 @@ msgid "Authenticate your Buffer connection" msgstr "Autenticar su conexión de Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" -msgstr "Active el plugin de publicación de Buffer" +msgid "Enable Buffer Post Addon" +msgstr "Active el addon de publicación de Buffer" #: buffer.php:151 msgid "Post to Buffer by default" diff --git a/buffer/lang/es/strings.php b/buffer/lang/es/strings.php index 15c58cd1..0ee13d76 100644 --- a/buffer/lang/es/strings.php +++ b/buffer/lang/es/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "Vuelva a la página de conexión" $a->strings["Post to Buffer"] = "Publique en Buffer"; $a->strings["Buffer Export"] = "Exportar Buffer"; $a->strings["Authenticate your Buffer connection"] = "Autenticar su conexión de Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Active el plugin de publicación de Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Active el addon de publicación de Buffer"; $a->strings["Post to Buffer by default"] = "Publicar en Buffer por defecto"; $a->strings["Check to delete this preset"] = "Verificar para eliminar este preajuste"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Las publicaciones van a todas las cuentas que estén habilitadas por defecto"; diff --git a/buffer/lang/fr/messages.po b/buffer/lang/fr/messages.po index bc159341..5ba45daa 100644 --- a/buffer/lang/fr/messages.po +++ b/buffer/lang/fr/messages.po @@ -62,7 +62,7 @@ msgid "Authenticate your Buffer connection" msgstr "Authentifier votre connexion à Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" +msgid "Enable Buffer Post Addon" msgstr "Activer le connecteur Buffer" #: buffer.php:151 diff --git a/buffer/lang/fr/strings.php b/buffer/lang/fr/strings.php index 07460f47..f86822c5 100644 --- a/buffer/lang/fr/strings.php +++ b/buffer/lang/fr/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "revenir à la page du connecteur" $a->strings["Post to Buffer"] = "Publier sur Buffer"; $a->strings["Buffer Export"] = "Export Buffer"; $a->strings["Authenticate your Buffer connection"] = "Authentifier votre connexion à Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Activer le connecteur Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Activer le connecteur Buffer"; $a->strings["Post to Buffer by default"] = "Publier sur Buffer par défaut"; $a->strings["Check to delete this preset"] = "Cocher pour supprimer ce préréglage"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Les posts sont envoyés à tous les comptes activés par défault:"; diff --git a/buffer/lang/it/messages.po b/buffer/lang/it/messages.po index 232cd2d6..f74d2cfa 100644 --- a/buffer/lang/it/messages.po +++ b/buffer/lang/it/messages.po @@ -61,8 +61,8 @@ msgid "Authenticate your Buffer connection" msgstr "Autentica la tua connessione a Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" -msgstr "Abilita il plugin di invio a Buffer" +msgid "Enable Buffer Post Addon" +msgstr "Abilita il addon di invio a Buffer" #: buffer.php:151 msgid "Post to Buffer by default" diff --git a/buffer/lang/it/strings.php b/buffer/lang/it/strings.php index 9081af8a..d0c01770 100644 --- a/buffer/lang/it/strings.php +++ b/buffer/lang/it/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "ritorna alla pagina del connettor $a->strings["Post to Buffer"] = "Invia a Buffer"; $a->strings["Buffer Export"] = "Esporta Buffer"; $a->strings["Authenticate your Buffer connection"] = "Autentica la tua connessione a Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Abilita il plugin di invio a Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Abilita il addon di invio a Buffer"; $a->strings["Post to Buffer by default"] = "Invia sempre a Buffer"; $a->strings["Check to delete this preset"] = "Seleziona per eliminare questo preset"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "I messaggi andranno a tutti gli account che sono abilitati:"; diff --git a/buffer/lang/pt-br/messages.po b/buffer/lang/pt-br/messages.po index 08884bd4..795f2642 100644 --- a/buffer/lang/pt-br/messages.po +++ b/buffer/lang/pt-br/messages.po @@ -61,8 +61,8 @@ msgid "Authenticate your Buffer connection" msgstr "Autenticar sua conexão de Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" -msgstr "Habilita plugin para publicar no Buffer" +msgid "Enable Buffer Post Addon" +msgstr "Habilita addon para publicar no Buffer" #: buffer.php:151 msgid "Post to Buffer by default" diff --git a/buffer/lang/pt-br/strings.php b/buffer/lang/pt-br/strings.php index 272a071e..737a86eb 100644 --- a/buffer/lang/pt-br/strings.php +++ b/buffer/lang/pt-br/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "Volte a página de conectores."; $a->strings["Post to Buffer"] = "Publicar no Buffer"; $a->strings["Buffer Export"] = "Exportar Buffer"; $a->strings["Authenticate your Buffer connection"] = "Autenticar sua conexão de Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Habilita plugin para publicar no Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Habilita addon para publicar no Buffer"; $a->strings["Post to Buffer by default"] = "Publica no Buffer por padrão"; $a->strings["Check to delete this preset"] = "Marque para excluir este perfil"; $a->strings["Posts are going to all accounts that are enabled by default:"] = ""; diff --git a/buffer/lang/ro/messages.po b/buffer/lang/ro/messages.po index 383390aa..81e46a5a 100644 --- a/buffer/lang/ro/messages.po +++ b/buffer/lang/ro/messages.po @@ -59,7 +59,7 @@ msgid "Authenticate your Buffer connection" msgstr "Autentificați-vă conectarea la Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" +msgid "Enable Buffer Post Addon" msgstr "Activare Modul Postare pe Buffer" #: buffer.php:151 diff --git a/buffer/lang/ro/strings.php b/buffer/lang/ro/strings.php index 7e7e575f..a6bda064 100644 --- a/buffer/lang/ro/strings.php +++ b/buffer/lang/ro/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "revenire la pagina de conectare"; $a->strings["Post to Buffer"] = "Postați pe Buffer"; $a->strings["Buffer Export"] = "Export pe Buffer "; $a->strings["Authenticate your Buffer connection"] = "Autentificați-vă conectarea la Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Activare Modul Postare pe Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Activare Modul Postare pe Buffer"; $a->strings["Post to Buffer by default"] = "Postați implicit pe Buffer"; $a->strings["Check to delete this preset"] = "Bifați pentru a șterge această presetare"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Posturile merg către toate conturile care sunt activate implicit:"; diff --git a/buffer/lang/ru/messages.po b/buffer/lang/ru/messages.po index 84e2531c..68107abc 100644 --- a/buffer/lang/ru/messages.po +++ b/buffer/lang/ru/messages.po @@ -60,7 +60,7 @@ msgid "Authenticate your Buffer connection" msgstr "Аутентифицируйте свое соединение с Buffer" #: buffer.php:146 -msgid "Enable Buffer Post Plugin" +msgid "Enable Buffer Post Addon" msgstr "Включить плагин Buffer" #: buffer.php:151 diff --git a/buffer/lang/ru/strings.php b/buffer/lang/ru/strings.php index 9b8bd041..8572ffd6 100644 --- a/buffer/lang/ru/strings.php +++ b/buffer/lang/ru/strings.php @@ -15,7 +15,7 @@ $a->strings["return to the connector page"] = "вернуться на стра $a->strings["Post to Buffer"] = "Написать в Buffer"; $a->strings["Buffer Export"] = "Экспорт в Buffer"; $a->strings["Authenticate your Buffer connection"] = "Аутентифицируйте свое соединение с Buffer"; -$a->strings["Enable Buffer Post Plugin"] = "Включить плагин Buffer"; +$a->strings["Enable Buffer Post Addon"] = "Включить плагин Buffer"; $a->strings["Post to Buffer by default"] = "Отправлять в Buffer по умолчанию"; $a->strings["Check to delete this preset"] = "Отметьте для удаления этих настроек"; $a->strings["Posts are going to all accounts that are enabled by default:"] = "Сообщения уходят во все учетные записи по умолчанию:"; diff --git a/communityhome/README.md b/communityhome/README.md index 21f2a946..91838d9f 100644 --- a/communityhome/README.md +++ b/communityhome/README.md @@ -1,12 +1,12 @@ Community Home -------------- -This plugin overwrites the default home page shown to not logged users. +This addon overwrites the default home page shown to not logged users. On sidebar there are the login form, last ten users (if they have choosed to be in site directory), last ten public photos and last ten "likes" sent by a site user or about a site user's item -In main content is shown the community stream. This plugin doesn't +In main content is shown the community stream. This addon doesn't honour your community page visibility site setting: the community stream is shown also if you have choose to not show the community page. diff --git a/dav/README.md b/dav/README.md index 7c2abdb8..b86d47fc 100644 --- a/dav/README.md +++ b/dav/README.md @@ -30,7 +30,7 @@ At the moment, the calendar system supports the following features: - CalDAV-Sync (http://dmfs.org/caldav/) works, non-free ## Installation -After activating, serveral tables in the database have to be created. The admin-interface of the plugin will try to do this automatically. +After activating, serveral tables in the database have to be created. The admin-interface of the addon will try to do this automatically. In case of errors, the SQL-statement to create the tables manually are shown in the admin-interface. @@ -63,7 +63,7 @@ MIT License -Author of this plugin (the parts that are not part of the libraries above): +Author of this addon (the parts that are not part of the libraries above): Tobias Hößl http://friendica.hoessl.eu/profile/cato http://www.hoessl.eu/ diff --git a/dav/SabreDAV/ChangeLog b/dav/SabreDAV/ChangeLog index 3f424d95..aa7b686d 100644 --- a/dav/SabreDAV/ChangeLog +++ b/dav/SabreDAV/ChangeLog @@ -17,7 +17,7 @@ * Changed: The Sabre_VObject library now spawned into it's own project! * New feature: Support for caldav notifications! * Changed: Responsibility for dealing with the calendar-query is now - moved from the CalDAV plugin to the CalDAV backends. This allows for + moved from the CalDAV addon to the CalDAV backends. This allows for heavy optimizations. * Changed: The CalDAV PDO backend is now a lot faster for common calendar queries. @@ -27,7 +27,7 @@ receiving "text/x-vcard; charset=utf-8" for a contenttype. * Added: Sabre_DAV_Client now throws more specific exceptions in cases where we already has an exception class. - * Added: Sabre_DAV_PartialUpdate. This plugin allows you to use the + * Added: Sabre_DAV_PartialUpdate. This addon allows you to use the PATCH method to update parts of a file. * Added: Tons of timezone name mappings for Microsoft Exchange. * Added: Support for an 'exception' event. @@ -69,13 +69,13 @@ * Fixed: Issue 112: Stronger validation of iCalendar objects. Now making sure every iCalendar object only contains 1 component, and disallowing vcards, forcing every component to have a UID. - * Fixed: Basic validation for vcards in the CardDAV plugin. + * Fixed: Basic validation for vcards in the CardDAV addon. * Fixed: Issue 213: Workaround for an Evolution bug, that prevented it from updating events. * Fixed: Issue 211: A time-limit query on a non-relative alarm trigger in a recurring event could result in an endless loop. * Fixed: All uri fields are now a maximum of 200 characters. The Bynari - outlook plugin used much longer strings so this should improve + outlook addon used much longer strings so this should improve compatibility. * Fixed: Added a workaround for a bug in KDE 4.8.2 contact syncing. See https://bugs.kde.org/show_bug.cgi?id=300047 @@ -109,7 +109,7 @@ COUNT= parameter in the RRULE property. * Added: Support for time-range filters on VALARM components. * Fixed: Correctly filtering all-day events. - * Fixed: Sending back correct mimetypes from the browser plugin (thanks + * Fixed: Sending back correct mimetypes from the browser addon (thanks Jürgen). * Fixed: Issue 195: Sabre_CardDAV pear package had an incorrect dependency. * Fixed: Calendardata would be destroyed when performing a MOVE request. @@ -134,8 +134,8 @@ * BC Break: Default Principals PDO backend now needs a new field in the 'principals' table. See the website for details. * Added: Ability to create new calendars and addressbooks from within the - browser plugin. - * Added: Browser plugin: icons for various nodes. + browser addon. + * Added: Browser addon: icons for various nodes. * Added: Support for FREEBUSY reports! * Added: Support for creating principals with admin-level privileges. * Added: Possibility to let server send out invitation emails on behalf of @@ -143,11 +143,11 @@ * Changed: beforeCreateFile event now passes data argument by reference. * Changed: The 'propertyMap' property from Sabre_VObject_Reader, must now be specified in Sabre_VObject_Property::$classMap. - * Added: Ability for plugins to tell the ACL plugin which principal - plugins are searchable. + * Added: Ability for addons to tell the ACL addon which principal + addons are searchable. * Added: [DAVACL] Per-node overriding of supported privileges. This allows for custom privileges where needed. - * Added: [DAVACL] Public 'principalSearch' method on the DAVACL plugin, + * Added: [DAVACL] Public 'principalSearch' method on the DAVACL addon, which allows for easy searching for principals, based on their properties. * Added: Sabre_VObject_Component::getComponents() to return a list of only @@ -231,8 +231,8 @@ * Fixed: VObject properties are now always encoded before components. * Fixed: Sabre_DAVACL had issues with multiple levels of privilege aggregration. - * Changed: Added 'GuessContentType' plugin to fileserver.php example. - * Fixed: The Browser plugin will now trigger the correct events when + * Changed: Added 'GuessContentType' addon to fileserver.php example. + * Fixed: The Browser addon will now trigger the correct events when creating files. * Fixed: The ICSExportPlugin now considers ACL's. * Added: Made it optional to supply carddata from an Addressbook backend @@ -251,7 +251,7 @@ files to be locked at the same time. 1.5.4-stable (2011-10-28) - * Fixed: GuessContentType plugin now supports mixed case file extensions. + * Fixed: GuessContentType addon now supports mixed case file extensions. * Fixed: DATE-TIME encoding was wrong in VObject. (we used 'DATETIME'). * Changed: Sending back HTTP 204 after a PUT request on an existing resource instead of HTTP 200. This should fix Evolution CardDAV client @@ -283,7 +283,7 @@ * Fixed: Issue 140: Not returning 201 Created if an event cancelled the creation of a file. * Fixed: Issue 150: Faster URLUtil::encodePath() implementation. - * Fixed: Issue 144: Browser plugin could interfere with + * Fixed: Issue 144: Browser addon could interfere with TemporaryFileFilterPlugin if it was loaded first. * Added: It's not possible to specify more 'alternate uris' in principal backends. @@ -314,7 +314,7 @@ * Added: Clark-notation parser to XML utility. * Added: unset() support to VObject components. * Fixed: Refactored CalDAV property fetching to be faster and simpler. - * Added: Central string-matcher for CalDAV and CardDAV plugins. + * Added: Central string-matcher for CalDAV and CardDAV addons. * Added: i;unicode-casemap support * Fixed: VObject bug: wouldn't parse parameters if they weren't specified in uppercase. @@ -322,7 +322,7 @@ * Fixed: VObject bug: Parameters with no value are now correctly parsed. * Changed: If calendars don't specify which components they allow, 'all' components are assumed (e.g.: VEVENT, VTODO, VJOURNAL). - * Changed: Browser plugin now uses POST variable 'sabreAction' instead of + * Changed: Browser addon now uses POST variable 'sabreAction' instead of 'action' to reduce the chance of collisions. 1.4.4-stable (2011-07-07) @@ -388,7 +388,7 @@ * Added: Ability to automatically generate full .ics feeds off calendars. To use: Add the Sabre_CalDAV_ICSExportPlugin, and add ?export to your calendar url. - * Added: Plugins can now specify a pluginname, for easy access using + * Added: Plugins can now specify a addonname, for easy access using Sabre_DAV_Server::getPlugin(). * Added: beforeGetProperties event. * Added: updateProperties event. @@ -428,7 +428,7 @@ break, so if you implement Sabre_DAV_ICollection directly, add the method. * Changed: Almost all HTTP method implementations now take a uri argument, including events. This allows for internal rerouting of certain calls. - If you have custom plugins, make sure they use this argument. If they + If you have custom addons, make sure they use this argument. If they don't, they will likely still work, but it might get in the way of future changes. * Changed: All getETag methods MUST now surround the etag with @@ -441,7 +441,7 @@ instead. * Removed: Sabre_DAV_IDirectory interface, use Sabre_DAV_ICollection instead. - * Added: Browser plugin now uses {DAV:}displayname if this property is + * Added: Browser addon now uses {DAV:}displayname if this property is available. * Added: Cache layer in the ObjectTree. * Added: Tree classes now have a delete and getChildren method. @@ -488,7 +488,7 @@ * Updated: Small improvements to example files. 1.2.0 (2010-05-24) - * Fixed: Browser plugin now displays international characters. + * Fixed: Browser addon now displays international characters. * Changed: More properties in CalDAV classes are now protected instead of private. @@ -530,7 +530,7 @@ * Update: Complete rewrite of property updating. Now easier to use and atomic. * Fixed: Issue 16, automatically adding trailing / to baseUri. - * Added: text/plain is used for .txt files in GuessContentType plugin. + * Added: text/plain is used for .txt files in GuessContentType addon. * Added: support for principal-property-search and principal-search-property-set reports. * Added: Issue 31: Hiding exception information by default. Can be turned @@ -603,10 +603,10 @@ this. * Added: PDO authentication backend. * Added: Example sql for auth, caldav, locks for sqlite. - * Added: Sabre_DAV_Browser_GuessContentType plugin - * Changed: Authentication plugin refactored, making it possible to + * Added: Sabre_DAV_Browser_GuessContentType addon + * Changed: Authentication addon refactored, making it possible to implement non-digest authentication. - * Fixed: Better error display in browser plugin. + * Fixed: Better error display in browser addon. * Added: Support for {DAV:}supported-report-set * Added: XML utility class with helper functions for the WebDAV protocol. * Added: Tons of unittests @@ -706,15 +706,15 @@ Before, execution would be stopped by anything loosely evaluating to false. * Changed: the getPropertiesForPath method now takes a different set of - arguments, and returns a different response. This allows plugin + arguments, and returns a different response. This allows addon developers to return statuses for properties other than 200 and 404. The hrefs are now also always calculated relative to the baseUri, and not the uri of the request. * Changed: generatePropFindResponse is renamed to generateMultiStatus, and now takes a list of properties similar to the response of getPropertiesForPath. This was also needed to improve flexibility for - plugin development. - * Changed: Auth plugins are no longer included. They were not yet stable + addon development. + * Changed: Auth addons are no longer included. They were not yet stable quality, so they will probably be reintroduced in a later version. * Changed: PROPPATCH also used generateMultiStatus now. * Removed: unknownProperties event. This is replaced by the @@ -732,7 +732,7 @@ * Fixed: Copy and Move could fail in the root directory. This is now fixed. * Added: Plugins can now be retrieved by their classname. This is useful - for inter-plugin communication. + for inter-addon communication. * Added: The Auth backend can now return usernames and user-id's. * Added: The Auth backend got a getUsers method * Added: Sabre_DAV_FSExt_Directory now returns quota info @@ -741,7 +741,7 @@ * Fixed: UNLOCK bug. Unlock didn't work at all 0.12-beta (2009-09-10) - * Updated: Browser plugin now shows multiple {DAV:}resourcetype values + * Updated: Browser addon now shows multiple {DAV:}resourcetype values if available. * Added: Experimental PDO backend for Locks Manager * Fixed: Sending Content-Length: 0 for every empty response. This @@ -766,7 +766,7 @@ * Added: Ability to choose to use auth-int, auth or both for HTTP Digest authentication. (Issue 11) * Changed: Made more methods in Sabre_DAV_Server public. - * Fixed: TemporaryFileFilter plugin now intercepts HTTP LOCK requests + * Fixed: TemporaryFileFilter addon now intercepts HTTP LOCK requests to non-existent files. (Issue 12) * Added: Central list of defined xml namespace prefixes. This can reduce Bandwidth and legibility for xml bodies with user-defined namespaces. @@ -779,8 +779,8 @@ and IDirectory objects. If you created your own Tree objects, this will most likely break in this release. * Changed: Moved all the Locking logic from the Tree and Server classes - into a separate plugin. - * Changed: TemporaryFileFilter is now a plugin. + into a separate addon. + * Changed: TemporaryFileFilter is now a addon. * Added: Comes with an autoloader script. This can be used instead of the includer script, and is preferred by some people. * Added: AWS Authentication class. @@ -790,7 +790,7 @@ priority. This is for example needed to ensure that the Authentication Plugin is used before any other Plugin. * Added: 22 new tests. - * Added: Users-manager plugin for .htdigest files. Experimental and + * Added: Users-manager addon for .htdigest files. Experimental and subject to change. * Added: RFC 2324 HTTP 418 status code * Fixed: Exclusive locks could in some cases be picked up as shared locks @@ -801,7 +801,7 @@ * Changed: Renamed all exceptions! This is a compatibility break. Every Exception now follows Sabre_DAV_Exception_FileNotFound convention instead of Sabre_DAV_FileNotFoundException. - * Added: Browser plugin now allows uploading and creating directories + * Added: Browser addon now allows uploading and creating directories straight from the browser. * Added: 12 more unittests * Fixed: Locking bug, which became prevalent on Windows Vista. @@ -815,14 +815,14 @@ * Added: support for {DAV:}supportedlock. * Added: support for {DAV:}lockdiscovery. * Added: 6 new tests. - * Added: New plugin system. - * Added: Simple HTML directory plugin, for browser access. + * Added: New addon system. + * Added: Simple HTML directory addon, for browser access. * Added: Server class now sends back standard pre-condition error xml bodies. This was new since RFC4918. * Added: Sabre_DAV_Tree_Aggregrate, which can 'host' multiple Tree objects into one. * Added: simple basis for HTTP REPORT method. This method is not used yet, - but can be used by plugins to add reports. + but can be used by addons to add reports. * Changed: ->getSize is only called for files, no longer for collections. r303 * Changed: Sabre_DAV_FilterTree is now Sabre_DAV_Tree_Filter diff --git a/dav/SabreDAV/lib/Sabre/CalDAV/ICSExportPlugin.php b/dav/SabreDAV/lib/Sabre/CalDAV/ICSExportPlugin.php index d3e4e7b7..7d989a95 100644 --- a/dav/SabreDAV/lib/Sabre/CalDAV/ICSExportPlugin.php +++ b/dav/SabreDAV/lib/Sabre/CalDAV/ICSExportPlugin.php @@ -5,7 +5,7 @@ use Sabre\VObject; /** * ICS Exporter * - * This plugin adds the ability to export entire calendars as .ics files. + * This addon adds the ability to export entire calendars as .ics files. * This is useful for clients that don't support CalDAV yet. They often do * support ics files. * @@ -25,7 +25,7 @@ class Sabre_CalDAV_ICSExportPlugin extends Sabre_DAV_ServerPlugin { private $server; /** - * Initializes the plugin and registers event handlers + * Initializes the addon and registers event handlers * * @param Sabre_DAV_Server $server * @return void diff --git a/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/Collection.php b/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/Collection.php index 8f6cb260..479720c6 100644 --- a/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/Collection.php +++ b/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/Collection.php @@ -4,7 +4,7 @@ * This node represents a list of notifications. * * It provides no additional functionality, but you must implement this - * interface to allow the Notifications plugin to mark the collection + * interface to allow the Notifications addon to mark the collection * as a notifications collection. * * This collection should only return Sabre_CalDAV_Notifications_INode nodes as diff --git a/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/ICollection.php b/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/ICollection.php index eb873af3..bdf6bf1e 100644 --- a/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/ICollection.php +++ b/dav/SabreDAV/lib/Sabre/CalDAV/Notifications/ICollection.php @@ -4,7 +4,7 @@ * This node represents a list of notifications. * * It provides no additional functionality, but you must implement this - * interface to allow the Notifications plugin to mark the collection + * interface to allow the Notifications addon to mark the collection * as a notifications collection. * * This collection should only return Sabre_CalDAV_Notifications_INode nodes as diff --git a/dav/SabreDAV/lib/Sabre/CalDAV/Plugin.php b/dav/SabreDAV/lib/Sabre/CalDAV/Plugin.php index c0e4a206..f1c93af0 100644 --- a/dav/SabreDAV/lib/Sabre/CalDAV/Plugin.php +++ b/dav/SabreDAV/lib/Sabre/CalDAV/Plugin.php @@ -3,9 +3,9 @@ use Sabre\VObject; /** - * CalDAV plugin + * CalDAV addon * - * This plugin provides functionality added by CalDAV (RFC 4791) + * This addon provides functionality added by CalDAV (RFC 4791) * It implements new reports, and the MKCALENDAR method. * * @package Sabre @@ -67,7 +67,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * Use this method to tell the server this plugin defines additional + * Use this method to tell the server this addon defines additional * HTTP methods. * * This method is passed a uri. It should only return HTTP methods that are @@ -107,9 +107,9 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * Returns a plugin name. + * Returns a addon name. * - * Using this name other plugins will be able to access other plugins + * Using this name other addons will be able to access other addons * using Sabre_DAV_Server::getPlugin * * @return string @@ -121,7 +121,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * Returns a list of reports this plugin supports. + * Returns a list of reports this addon supports. * * This will be used in the {DAV:}supported-report-set property. * Note that you still need to subscribe to the 'report' event to actually @@ -147,7 +147,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * Initializes the plugin + * Initializes the addon * * @param Sabre_DAV_Server $server * @return void @@ -631,7 +631,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { $acl = $this->server->getPlugin('acl'); if (!$acl) { - throw new Sabre_DAV_Exception('The ACL plugin must be loaded for free-busy queries to work'); + throw new Sabre_DAV_Exception('The ACL addon must be loaded for free-busy queries to work'); } $uri = $this->server->getRequestUri(); $acl->checkPrivileges($uri,'{' . self::NS_CALDAV . '}read-free-busy'); @@ -665,7 +665,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method is triggered before a file gets updated with new content. * - * This plugin uses this method to ensure that CalDAV objects receive + * This addon uses this method to ensure that CalDAV objects receive * valid calendar data. * * @param string $path @@ -685,7 +685,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method is triggered before a new file is created. * - * This plugin uses this method to ensure that newly created calendar + * This addon uses this method to ensure that newly created calendar * objects contain valid calendar data. * * @param string $path @@ -1014,7 +1014,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method allows us to intercept the 'mkcalendar' sabreAction. This - * action enables the user to create new calendars from the browser plugin. + * action enables the user to create new calendars from the browser addon. * * @param string $uri * @param string $action diff --git a/dav/SabreDAV/lib/Sabre/CalDAV/Schedule/Outbox.php b/dav/SabreDAV/lib/Sabre/CalDAV/Schedule/Outbox.php index 09aa07d7..639f5d0d 100644 --- a/dav/SabreDAV/lib/Sabre/CalDAV/Schedule/Outbox.php +++ b/dav/SabreDAV/lib/Sabre/CalDAV/Schedule/Outbox.php @@ -5,7 +5,7 @@ * * The outbox is mainly used as an endpoint in the tree for a client to do * free-busy requests. This functionality is completely handled by the - * Scheduling plugin, so this object is actually mostly static. + * Scheduling addon, so this object is actually mostly static. * * @package Sabre * @subpackage CalDAV diff --git a/dav/SabreDAV/lib/Sabre/CardDAV/Plugin.php b/dav/SabreDAV/lib/Sabre/CardDAV/Plugin.php index 30194bb6..aa6a523d 100644 --- a/dav/SabreDAV/lib/Sabre/CardDAV/Plugin.php +++ b/dav/SabreDAV/lib/Sabre/CardDAV/Plugin.php @@ -3,9 +3,9 @@ use Sabre\VObject; /** - * CardDAV plugin + * CardDAV addon * - * The CardDAV plugin adds CardDAV functionality to the WebDAV server + * The CardDAV addon adds CardDAV functionality to the WebDAV server * * @package Sabre * @subpackage CardDAV @@ -41,7 +41,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { protected $server; /** - * Initializes the plugin + * Initializes the addon * * @param Sabre_DAV_Server $server * @return void @@ -91,7 +91,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { } /** - * Returns a list of reports this plugin supports. + * Returns a list of reports this addon supports. * * This will be used in the {DAV:}supported-report-set property. * Note that you still need to subscribe to the 'report' event to actually @@ -290,7 +290,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method is triggered before a file gets updated with new content. * - * This plugin uses this method to ensure that Card nodes receive valid + * This addon uses this method to ensure that Card nodes receive valid * vcard data. * * @param string $path @@ -310,7 +310,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method is triggered before a new file is created. * - * This plugin uses this method to ensure that Card nodes receive valid + * This addon uses this method to ensure that Card nodes receive valid * vcard data. * * @param string $path @@ -671,7 +671,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin { /** * This method allows us to intercept the 'mkcalendar' sabreAction. This - * action enables the user to create new calendars from the browser plugin. + * action enables the user to create new calendars from the browser addon. * * @param string $uri * @param string $action diff --git a/dav/SabreDAV/lib/Sabre/DAV/Auth/Plugin.php b/dav/SabreDAV/lib/Sabre/DAV/Auth/Plugin.php index 55a4e391..256e0c02 100644 --- a/dav/SabreDAV/lib/Sabre/DAV/Auth/Plugin.php +++ b/dav/SabreDAV/lib/Sabre/DAV/Auth/Plugin.php @@ -1,7 +1,7 @@ server->tree->getNodeForPath($uri); } catch (Sabre_DAV_Exception_NotFound $e) { // We're simply stopping when the file isn't found to not interfere - // with other plugins. + // with other addons. return; } if ($node instanceof Sabre_DAV_IFile) diff --git a/dav/SabreDAV/lib/Sabre/DAV/Locks/Plugin.php b/dav/SabreDAV/lib/Sabre/DAV/Locks/Plugin.php index 957ac506..3e5c71bc 100644 --- a/dav/SabreDAV/lib/Sabre/DAV/Locks/Plugin.php +++ b/dav/SabreDAV/lib/Sabre/DAV/Locks/Plugin.php @@ -1,9 +1,9 @@ plugins as $plugin) $methods = array_merge($methods, $plugin->getHTTPMethods($uri)); array_unique($methods); @@ -1464,7 +1464,7 @@ class Sabre_DAV_Server { * * Currently this is done by HTTP PUT and HTTP LOCK (in the Locks_Plugin). * It was important to get this done through a centralized function, - * allowing plugins to intercept this using the beforeCreateFile event. + * allowing addons to intercept this using the beforeCreateFile event. * * This method will return true if the file was actually created * @@ -1654,7 +1654,7 @@ class Sabre_DAV_Server { } if (!$hasError) { - // Allowing plugins to take care of property updating + // Allowing addons to take care of property updating $hasError = !$this->broadcastEvent('updateProperties',array( &$remainingProperties, &$result, diff --git a/dav/SabreDAV/lib/Sabre/DAV/ServerPlugin.php b/dav/SabreDAV/lib/Sabre/DAV/ServerPlugin.php index 131863d1..4dcee587 100644 --- a/dav/SabreDAV/lib/Sabre/DAV/ServerPlugin.php +++ b/dav/SabreDAV/lib/Sabre/DAV/ServerPlugin.php @@ -1,7 +1,7 @@ diff --git a/dav/common/wdcal/js/jquery.calendar.js b/dav/common/wdcal/js/jquery.calendar.js index 201917c0..c8221a69 100644 --- a/dav/common/wdcal/js/jquery.calendar.js +++ b/dav/common/wdcal/js/jquery.calendar.js @@ -141,7 +141,7 @@ if ($.fn.noSelect == undefined) { - $.fn.noSelect = function (p) { //no select plugin by me :-) + $.fn.noSelect = function (p) { //no select addon by me :-) var prevent; if (p == null) prevent = true; diff --git a/dav/friendica/layout.fnk.php b/dav/friendica/layout.fnk.php index f384c50c..8a06e64d 100644 --- a/dav/friendica/layout.fnk.php +++ b/dav/friendica/layout.fnk.php @@ -501,14 +501,14 @@ function wdcal_getSettingsPage(&$a) $o .= "

" . t("Warning") . "

"; - $o .= "This plugin still is in a very early stage of development. Expect major bugs!
"; + $o .= "This addon still is in a very early stage of development. Expect major bugs!
"; $o .= "

" . t("Synchronization (iPhone, Thunderbird Lightning, Android, ...)") . "

"; - $o .= 'This plugin enables synchronization of your dates and contacts with CalDAV- and CardDAV-enabled programs or devices.
+ $o .= 'This addon enables synchronization of your dates and contacts with CalDAV- and CardDAV-enabled programs or devices.
As an example, the instructions how to set up two-way synchronization with an iPhone/iPodTouch are provided below.
Unfortunately, Android does not have native support for CalDAV or CardDAV, so an app has to be installed.
- On desktops, the Lightning-extension to Mozilla Thunderbird should be able to use this plugin as a backend.

'; + On desktops, the Lightning-extension to Mozilla Thunderbird should be able to use this addon as a backend.

'; $o .= '

' . t('Synchronizing this calendar with the iPhone') . '

'; diff --git a/dav/jqueryui/jquery.ui.datepicker-de.js b/dav/jqueryui/jquery.ui.datepicker-de.js index ac2d516a..c7726531 100644 --- a/dav/jqueryui/jquery.ui.datepicker-de.js +++ b/dav/jqueryui/jquery.ui.datepicker-de.js @@ -1,4 +1,4 @@ -/* German initialisation for the jQuery UI date picker plugin. */ +/* German initialisation for the jQuery UI date picker addon. */ /* Written by Milian Wolff (mail@milianw.de). */ jQuery(function($){ $.datepicker.regional['de'] = { diff --git a/dav/lang/C/messages.po b/dav/lang/C/messages.po index 7913b53a..0f2fc5c7 100644 --- a/dav/lang/C/messages.po +++ b/dav/lang/C/messages.po @@ -183,7 +183,7 @@ msgstr "" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." msgstr "" diff --git a/dav/lang/ca/strings.php b/dav/lang/ca/strings.php index f198cd89..93816d2a 100644 --- a/dav/lang/ca/strings.php +++ b/dav/lang/ca/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "Avís"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Syncronització (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sncronitzant aquest calendari amb el iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sincronitzant els teus contactes a Friendica amb el iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = "Calendari"; $a->strings["Extended calendar with CalDAV-support"] = "Calendari ampliat amb suport CalDAV"; $a->strings["noreply"] = "no contestar"; diff --git a/dav/lang/cs/messages.po b/dav/lang/cs/messages.po index d55ac2e0..561206a4 100644 --- a/dav/lang/cs/messages.po +++ b/dav/lang/cs/messages.po @@ -185,7 +185,7 @@ msgstr "Synchronizovat Vaše Friendica kontakty s iPhone" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." msgstr "Stávající verze tohoto rozšíření nebyla správně nastavena. Prosím, kontaktujte administrátora webu, ať to opraví." diff --git a/dav/lang/cs/strings.php b/dav/lang/cs/strings.php index a42a3a30..0c5066f5 100644 --- a/dav/lang/cs/strings.php +++ b/dav/lang/cs/strings.php @@ -45,7 +45,7 @@ $a->strings["Warning"] = "Omezení"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Synchronizace (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Synchronizovat tento kalendář s iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Synchronizovat Vaše Friendica kontakty s iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Stávající verze tohoto rozšíření nebyla správně nastavena. Prosím, kontaktujte administrátora webu, ať to opraví."; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Stávající verze tohoto rozšíření nebyla správně nastavena. Prosím, kontaktujte administrátora webu, ať to opraví."; $a->strings["Calendar"] = "Kalendář"; $a->strings["Extended calendar with CalDAV-support"] = "Rozšířený kalendář s podporou CalDAV"; $a->strings["noreply"] = "bez odpovědi"; diff --git a/dav/lang/de/messages.po b/dav/lang/de/messages.po index 9eeb56d6..3f816fb3 100644 --- a/dav/lang/de/messages.po +++ b/dav/lang/de/messages.po @@ -185,7 +185,7 @@ msgstr "Friendica-Kontakte mit dem iPhone synchronisieren" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." msgstr "Die aktuelle Version dieses Plugins wurde nicht korrekt eingestellt. Bitte kontaktiere den System-Administrator deiner Friendica Installation um den Fehler zu beheben." diff --git a/dav/lang/de/strings.php b/dav/lang/de/strings.php index 441a1dac..2a938464 100644 --- a/dav/lang/de/strings.php +++ b/dav/lang/de/strings.php @@ -45,7 +45,7 @@ $a->strings["Warning"] = "Warnung"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Synchronisation (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Diesen Kalender mit dem iPhone synchronisieren"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Friendica-Kontakte mit dem iPhone synchronisieren"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Die aktuelle Version dieses Plugins wurde nicht korrekt eingestellt. Bitte kontaktiere den System-Administrator deiner Friendica Installation um den Fehler zu beheben."; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Die aktuelle Version dieses Plugins wurde nicht korrekt eingestellt. Bitte kontaktiere den System-Administrator deiner Friendica Installation um den Fehler zu beheben."; $a->strings["Calendar"] = "Kalender"; $a->strings["Extended calendar with CalDAV-support"] = "Erweiterter Kalender mit CalDAV Unterstützung."; $a->strings["noreply"] = "noreply"; diff --git a/dav/lang/eo/strings.php b/dav/lang/eo/strings.php index 6e902d5b..5ecd486b 100644 --- a/dav/lang/eo/strings.php +++ b/dav/lang/eo/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "Averto"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Sinkronigo (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sinkronigi tiun kalendaron kun la iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sinkronigi viajn Friendica kontaktojn kun la iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = "Kalendaro"; $a->strings["Extended calendar with CalDAV-support"] = "Etendita kalendaro kun CalDAV subteno"; $a->strings["noreply"] = "nerespondi"; diff --git a/dav/lang/es/messages.po b/dav/lang/es/messages.po index d00bbe26..7bc95e0b 100644 --- a/dav/lang/es/messages.po +++ b/dav/lang/es/messages.po @@ -186,10 +186,10 @@ msgstr "Sincronizar sus contactos de Friendica con el iPhone" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." -msgstr "La versión actual de este plugin no se ha instalado correctamente. Por favor contacte con el administrador del sistema de su instalación de Friendica para resolver esto." +msgstr "La versión actual de este addon no se ha instalado correctamente. Por favor contacte con el administrador del sistema de su instalación de Friendica para resolver esto." #: friendica/main.php:239 common/wdcal_edit.inc.php:146 msgid "Calendar" diff --git a/dav/lang/es/strings.php b/dav/lang/es/strings.php index 5300246a..76a3ad2e 100644 --- a/dav/lang/es/strings.php +++ b/dav/lang/es/strings.php @@ -45,7 +45,7 @@ $a->strings["Warning"] = "Advertencia"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Sincronización (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sincronizar este calendario con el iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sincronizar sus contactos de Friendica con el iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La versión actual de este plugin no se ha instalado correctamente. Por favor contacte con el administrador del sistema de su instalación de Friendica para resolver esto."; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La versión actual de este addon no se ha instalado correctamente. Por favor contacte con el administrador del sistema de su instalación de Friendica para resolver esto."; $a->strings["Calendar"] = "Calendario"; $a->strings["Extended calendar with CalDAV-support"] = "Estendido el calendario con soporte CalDAV"; $a->strings["noreply"] = "no responder"; diff --git a/dav/lang/fr/strings.php b/dav/lang/fr/strings.php index 86dae0d1..0705d6a3 100644 --- a/dav/lang/fr/strings.php +++ b/dav/lang/fr/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "Avertissement"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Synchronisation (Iphone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Synchronisation avec l'Iphone en cours"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Synchronisation de vos contacts Friendica avec l'Iphone en cours"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La version actuelle de cette extension n'a pas été configurée correctement. Merci de contacter votre administrateur Friendica pour régler ce problème. "; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La version actuelle de cette extension n'a pas été configurée correctement. Merci de contacter votre administrateur Friendica pour régler ce problème. "; $a->strings["Calendar"] = "Calendrier"; $a->strings["Extended calendar with CalDAV-support"] = "Calendrier étendu avec support CalDAV"; $a->strings["noreply"] = "noreply"; diff --git a/dav/lang/is/strings.php b/dav/lang/is/strings.php index e592e7de..69fc6178 100644 --- a/dav/lang/is/strings.php +++ b/dav/lang/is/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = ""; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = ""; $a->strings["Synchronizing this calendar with the iPhone"] = ""; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = ""; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = ""; $a->strings["Extended calendar with CalDAV-support"] = ""; $a->strings["noreply"] = "ekki svara"; diff --git a/dav/lang/it/messages.po b/dav/lang/it/messages.po index ae53f06e..b1911a70 100644 --- a/dav/lang/it/messages.po +++ b/dav/lang/it/messages.po @@ -185,10 +185,10 @@ msgstr "Sincronizzare i tuoi contatti di Friendica con l'iPhone" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." -msgstr "La versione corrente di questo plugin non è stata configurata correttamente. Contatta l'amministratore." +msgstr "La versione corrente di questo addon non è stata configurata correttamente. Contatta l'amministratore." #: friendica/main.php:239 common/wdcal_edit.inc.php:146 msgid "Calendar" diff --git a/dav/lang/it/strings.php b/dav/lang/it/strings.php index 9fe374cc..ce1f78a8 100644 --- a/dav/lang/it/strings.php +++ b/dav/lang/it/strings.php @@ -45,7 +45,7 @@ $a->strings["Warning"] = "Attenzione"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Sincronizzazione (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sincronizzare questo calendario con l'iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sincronizzare i tuoi contatti di Friendica con l'iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La versione corrente di questo plugin non è stata configurata correttamente. Contatta l'amministratore."; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "La versione corrente di questo addon non è stata configurata correttamente. Contatta l'amministratore."; $a->strings["Calendar"] = "Calendario"; $a->strings["Extended calendar with CalDAV-support"] = "Calendario esteso con supporto CalDAV"; $a->strings["noreply"] = "nonrispondere"; diff --git a/dav/lang/nb-no/strings.php b/dav/lang/nb-no/strings.php index 3ba89070..132f0750 100644 --- a/dav/lang/nb-no/strings.php +++ b/dav/lang/nb-no/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = ""; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = ""; $a->strings["Synchronizing this calendar with the iPhone"] = ""; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = ""; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = ""; $a->strings["Extended calendar with CalDAV-support"] = ""; $a->strings["noreply"] = "ikke svar"; diff --git a/dav/lang/pl/strings.php b/dav/lang/pl/strings.php index 171a73e1..9fcae4b8 100644 --- a/dav/lang/pl/strings.php +++ b/dav/lang/pl/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "Ostrzeżenie"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Synchronizacja (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Zsynchronizuj kalendarz z iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Zsynchronizuj kontakty friendica z iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = "Kalendarz"; $a->strings["Extended calendar with CalDAV-support"] = ""; $a->strings["noreply"] = "brak odpowiedzi"; diff --git a/dav/lang/pt-br/strings.php b/dav/lang/pt-br/strings.php index 566c3a84..d57df030 100644 --- a/dav/lang/pt-br/strings.php +++ b/dav/lang/pt-br/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "Aviso"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Sincronização (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sincronização desta agenda com o iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sincronização dos seus contatos Friendica com o iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = "Agenda"; $a->strings["Extended calendar with CalDAV-support"] = ""; $a->strings["noreply"] = "naoresponda"; diff --git a/dav/lang/ro/messages.po b/dav/lang/ro/messages.po index c6925954..ec8cdc19 100644 --- a/dav/lang/ro/messages.po +++ b/dav/lang/ro/messages.po @@ -184,7 +184,7 @@ msgstr "Sincronizați contactele Friendica cu iPhone" #: friendica/main.php:202 msgid "" -"The current version of this plugin has not been set up correctly. Please " +"The current version of this addon has not been set up correctly. Please " "contact the system administrator of your installation of friendica to fix " "this." msgstr "Versiunea curentă a acestui modul nu a fost corect configurată. Vă rugăm să contactați administratorul de sistem al aplicației dvs. friendica, pentru a corecta această situație." diff --git a/dav/lang/ro/strings.php b/dav/lang/ro/strings.php index f2870213..cf3ff449 100644 --- a/dav/lang/ro/strings.php +++ b/dav/lang/ro/strings.php @@ -45,7 +45,7 @@ $a->strings["Warning"] = "Atenție"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Sincronizare (iPhone, Thunderbird Lightning, Android, ...)"; $a->strings["Synchronizing this calendar with the iPhone"] = "Sincronizați acest calendar cu iPhone"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Sincronizați contactele Friendica cu iPhone"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Versiunea curentă a acestui modul nu a fost corect configurată. Vă rugăm să contactați administratorul de sistem al aplicației dvs. friendica, pentru a corecta această situație."; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "Versiunea curentă a acestui modul nu a fost corect configurată. Vă rugăm să contactați administratorul de sistem al aplicației dvs. friendica, pentru a corecta această situație."; $a->strings["Calendar"] = "Calendar"; $a->strings["Extended calendar with CalDAV-support"] = "Calendar extins cu suport-CalDAV"; $a->strings["noreply"] = "nu-răspunde"; diff --git a/dav/lang/ru/strings.php b/dav/lang/ru/strings.php index 32921b3b..7e4a4fb2 100644 --- a/dav/lang/ru/strings.php +++ b/dav/lang/ru/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = ""; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = ""; $a->strings["Synchronizing this calendar with the iPhone"] = ""; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = ""; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = ""; $a->strings["Calendar"] = ""; $a->strings["Extended calendar with CalDAV-support"] = ""; $a->strings["noreply"] = "без ответа"; diff --git a/dav/lang/zh-cn/strings.php b/dav/lang/zh-cn/strings.php index 45de3639..7ace01d7 100644 --- a/dav/lang/zh-cn/strings.php +++ b/dav/lang/zh-cn/strings.php @@ -40,7 +40,7 @@ $a->strings["Warning"] = "警告"; $a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "同步(iPhone,Thunderbird Lightning, 案桌,等)"; $a->strings["Synchronizing this calendar with the iPhone"] = "正在把这个日历跟iPhone同步"; $a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "正在把您的Friendica熟人跟iPhone同步"; -$a->strings["The current version of this plugin has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "现有的插件没安装好。请跟系统管理您的friendica安装联系为维修。"; +$a->strings["The current version of this addon has not been set up correctly. Please contact the system administrator of your installation of friendica to fix this."] = "现有的插件没安装好。请跟系统管理您的friendica安装联系为维修。"; $a->strings["Calendar"] = "日历"; $a->strings["Extended calendar with CalDAV-support"] = "增能日历跟CalDAV支持"; $a->strings["noreply"] = "noreply"; diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index 7deb2b72..0d0d2744 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -172,7 +172,7 @@ function diaspora_settings(&$a,&$s) { } $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/diaspora/lang/C/messages.po b/diaspora/lang/C/messages.po index 0f71c2cd..6764eaf1 100644 --- a/diaspora/lang/C/messages.po +++ b/diaspora/lang/C/messages.po @@ -32,7 +32,7 @@ msgid "Diaspora Export" msgstr "" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "" #: diaspora.php:168 diff --git a/diaspora/lang/cs/messages.po b/diaspora/lang/cs/messages.po index 22e1cfef..5d8b0a30 100644 --- a/diaspora/lang/cs/messages.po +++ b/diaspora/lang/cs/messages.po @@ -34,8 +34,8 @@ msgid "Diaspora Export" msgstr "Diaspora export" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" -msgstr "Povolit Diaspora Plugin" +msgid "Enable Diaspora Post Addon" +msgstr "Povolit Diaspora Addon" #: diaspora.php:168 msgid "Diaspora username" diff --git a/diaspora/lang/cs/strings.php b/diaspora/lang/cs/strings.php index 9db09791..1a87dc1f 100644 --- a/diaspora/lang/cs/strings.php +++ b/diaspora/lang/cs/strings.php @@ -8,7 +8,7 @@ function string_plural_select_cs($n){ $a->strings["Post to Diaspora"] = "Příspěvek na Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Nelze se přihlásit na váš Diaspora účet. Prosím ověřte své uživatelské jméno a heslo a ujistěte se, že jste použili kompletní adresu (včetně http...)"; $a->strings["Diaspora Export"] = "Diaspora export"; -$a->strings["Enable Diaspora Post Plugin"] = "Povolit Diaspora Plugin"; +$a->strings["Enable Diaspora Post Addon"] = "Povolit Diaspora Addon"; $a->strings["Diaspora username"] = "Diaspora uživatelské jméno"; $a->strings["Diaspora password"] = "Diaspora heslo"; $a->strings["Diaspora site URL"] = "Adresa webu Diaspora"; diff --git a/diaspora/lang/de/messages.po b/diaspora/lang/de/messages.po index eaeb24ed..22187254 100644 --- a/diaspora/lang/de/messages.po +++ b/diaspora/lang/de/messages.po @@ -34,7 +34,7 @@ msgid "Diaspora Export" msgstr "Diaspora Export" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "Veröffentlichungen bei Diaspora erlauben" #: diaspora.php:168 diff --git a/diaspora/lang/de/strings.php b/diaspora/lang/de/strings.php index 597d4cea..22990765 100644 --- a/diaspora/lang/de/strings.php +++ b/diaspora/lang/de/strings.php @@ -8,7 +8,7 @@ function string_plural_select_de($n){ $a->strings["Post to Diaspora"] = "Auf Diaspora veröffentlichen"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Anmeldung bei deinem Diaspora Account fehlgeschlagen. Bitte überprüfe Nutzername und Passwort und stelle sicher, dass die komplette Adresse (inklusive des htto...) verwendet wurde."; $a->strings["Diaspora Export"] = "Diaspora Export"; -$a->strings["Enable Diaspora Post Plugin"] = "Veröffentlichungen bei Diaspora erlauben"; +$a->strings["Enable Diaspora Post Addon"] = "Veröffentlichungen bei Diaspora erlauben"; $a->strings["Diaspora username"] = "Diaspora Nutzername"; $a->strings["Diaspora password"] = "Diaspora Passwort"; $a->strings["Diaspora site URL"] = "URL der Diaspora Seite"; diff --git a/diaspora/lang/es/messages.po b/diaspora/lang/es/messages.po index 16ce4539..a7beaa04 100644 --- a/diaspora/lang/es/messages.po +++ b/diaspora/lang/es/messages.po @@ -34,8 +34,8 @@ msgid "Diaspora Export" msgstr "Exportar a Diaspora*" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" -msgstr "Habilitar publicar a traves de Diaspora* plugin." +msgid "Enable Diaspora Post Addon" +msgstr "Habilitar publicar a traves de Diaspora* addon." #: diaspora.php:168 msgid "Diaspora username" diff --git a/diaspora/lang/es/strings.php b/diaspora/lang/es/strings.php index b3251898..e25594c3 100644 --- a/diaspora/lang/es/strings.php +++ b/diaspora/lang/es/strings.php @@ -8,7 +8,7 @@ function string_plural_select_es($n){ $a->strings["Post to Diaspora"] = "Publicar hacia Diaspora*"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "No se puede ingresar a tu cuenta de Diaspora*. Por favor verificar nombre de usuario, contraseña y asegura de usar la dirección completa, incluyendo https.. ."; $a->strings["Diaspora Export"] = "Exportar a Diaspora*"; -$a->strings["Enable Diaspora Post Plugin"] = "Habilitar publicar a traves de Diaspora* plugin."; +$a->strings["Enable Diaspora Post Addon"] = "Habilitar publicar a traves de Diaspora* addon."; $a->strings["Diaspora username"] = "Nombre de usuario de Diaspora*."; $a->strings["Diaspora password"] = "Contraseña Diaspora*"; $a->strings["Diaspora site URL"] = "URL sitio Diaspora*"; diff --git a/diaspora/lang/fr/messages.po b/diaspora/lang/fr/messages.po index 6f2fa876..d8f79f97 100644 --- a/diaspora/lang/fr/messages.po +++ b/diaspora/lang/fr/messages.po @@ -35,7 +35,7 @@ msgid "Diaspora Export" msgstr "Export Diaspora" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "Activer l’extension « Publier sur Diaspora »" #: diaspora.php:168 diff --git a/diaspora/lang/fr/strings.php b/diaspora/lang/fr/strings.php index 8ba2940c..c9037b6a 100644 --- a/diaspora/lang/fr/strings.php +++ b/diaspora/lang/fr/strings.php @@ -8,7 +8,7 @@ function string_plural_select_fr($n){ $a->strings["Post to Diaspora"] = "Publier sur Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Impossible de se connecter à votre compte Diaspora. Veuillez vérifier votre identifiant et votre mot de passe, et assurez-vous d’avoir indiqué l’adresse complète (y compris le « http:// » initial)."; $a->strings["Diaspora Export"] = "Export Diaspora"; -$a->strings["Enable Diaspora Post Plugin"] = "Activer l’extension « Publier sur Diaspora »"; +$a->strings["Enable Diaspora Post Addon"] = "Activer l’extension « Publier sur Diaspora »"; $a->strings["Diaspora username"] = "Identifiant Diaspora"; $a->strings["Diaspora password"] = "Mot de passe Diaspora"; $a->strings["Diaspora site URL"] = "Adresse du site Diaspora"; diff --git a/diaspora/lang/it/messages.po b/diaspora/lang/it/messages.po index 514dcbb1..1468e523 100644 --- a/diaspora/lang/it/messages.po +++ b/diaspora/lang/it/messages.po @@ -34,8 +34,8 @@ msgid "Diaspora Export" msgstr "Esporta Diaspora" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" -msgstr "Abilita il plugin di invio a Diaspora" +msgid "Enable Diaspora Post Addon" +msgstr "Abilita il addon di invio a Diaspora" #: diaspora.php:168 msgid "Diaspora username" diff --git a/diaspora/lang/it/strings.php b/diaspora/lang/it/strings.php index 4b8affb6..4c1673e1 100644 --- a/diaspora/lang/it/strings.php +++ b/diaspora/lang/it/strings.php @@ -8,7 +8,7 @@ function string_plural_select_it($n){ $a->strings["Post to Diaspora"] = "Invia a Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Non riesco ad autenticarmi con il tuo account Diaspora. Controlla il nome utente e la password e assicurati di aver usato l'indirizzo completo (compreso \"http\" o \"https\")"; $a->strings["Diaspora Export"] = "Esporta Diaspora"; -$a->strings["Enable Diaspora Post Plugin"] = "Abilita il plugin di invio a Diaspora"; +$a->strings["Enable Diaspora Post Addon"] = "Abilita il addon di invio a Diaspora"; $a->strings["Diaspora username"] = "Nome utente Diaspora"; $a->strings["Diaspora password"] = "Password Diaspora"; $a->strings["Diaspora site URL"] = "Indirizzo sito Diaspora"; diff --git a/diaspora/lang/pt-br/messages.po b/diaspora/lang/pt-br/messages.po index 1034ffed..7b0bc741 100644 --- a/diaspora/lang/pt-br/messages.po +++ b/diaspora/lang/pt-br/messages.po @@ -34,7 +34,7 @@ msgid "Diaspora Export" msgstr "" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "Habilitar plug-in para publicar na Diaspora" #: diaspora.php:168 diff --git a/diaspora/lang/ro/messages.po b/diaspora/lang/ro/messages.po index 4ad834a1..11c6b1ec 100644 --- a/diaspora/lang/ro/messages.po +++ b/diaspora/lang/ro/messages.po @@ -33,7 +33,7 @@ msgid "Diaspora Export" msgstr "Exportare pe Diaspora " #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "Activare Modul Postare pe Diaspora" #: diaspora.php:168 diff --git a/diaspora/lang/ro/strings.php b/diaspora/lang/ro/strings.php index c40ac8b6..a6798158 100644 --- a/diaspora/lang/ro/strings.php +++ b/diaspora/lang/ro/strings.php @@ -8,7 +8,7 @@ function string_plural_select_ro($n){ $a->strings["Post to Diaspora"] = "Postați pe Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Nu se poate face autentificarea pe contul dvs. Diaspora. Verificați numele de utilizator şi parola şi asigurați-vă că ați folosit adresa completă (inclusiv http ... )"; $a->strings["Diaspora Export"] = "Exportare pe Diaspora "; -$a->strings["Enable Diaspora Post Plugin"] = "Activare Modul Postare pe Diaspora"; +$a->strings["Enable Diaspora Post Addon"] = "Activare Modul Postare pe Diaspora"; $a->strings["Diaspora username"] = "Utilizator Diaspora"; $a->strings["Diaspora password"] = "Parola Diaspora"; $a->strings["Diaspora site URL"] = "URL site Diaspora"; diff --git a/diaspora/lang/ru/messages.po b/diaspora/lang/ru/messages.po index 7a9322c9..3534b0ac 100644 --- a/diaspora/lang/ru/messages.po +++ b/diaspora/lang/ru/messages.po @@ -34,7 +34,7 @@ msgid "Diaspora Export" msgstr "Экспорт в Diaspora" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "Включить плагин отправки сообщений в Diaspora" #: diaspora.php:168 diff --git a/diaspora/lang/ru/strings.php b/diaspora/lang/ru/strings.php index ac120995..0d46c78d 100644 --- a/diaspora/lang/ru/strings.php +++ b/diaspora/lang/ru/strings.php @@ -8,7 +8,7 @@ function string_plural_select_ru($n){ $a->strings["Post to Diaspora"] = "Отправить в Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "Невозможно войти в вашу учетную запись Diaspora. Пожалуйста, проверьте имя пользователя, пароль и убедитесь, что вы ввели полный адрес пода (включая http/https)"; $a->strings["Diaspora Export"] = "Экспорт в Diaspora"; -$a->strings["Enable Diaspora Post Plugin"] = "Включить плагин отправки сообщений в Diaspora"; +$a->strings["Enable Diaspora Post Addon"] = "Включить плагин отправки сообщений в Diaspora"; $a->strings["Diaspora username"] = "Имя пользователя Diaspora"; $a->strings["Diaspora password"] = "Пароль Diaspora"; $a->strings["Diaspora site URL"] = "URL пода Diaspora"; diff --git a/diaspora/lang/zh-cn/messages.po b/diaspora/lang/zh-cn/messages.po index beb0d17a..c0a4978e 100644 --- a/diaspora/lang/zh-cn/messages.po +++ b/diaspora/lang/zh-cn/messages.po @@ -34,7 +34,7 @@ msgid "Diaspora Export" msgstr "Diaspora 导出" #: diaspora.php:163 -msgid "Enable Diaspora Post Plugin" +msgid "Enable Diaspora Post Addon" msgstr "启用 Diaspora 发文插件" #: diaspora.php:168 diff --git a/diaspora/lang/zh-cn/strings.php b/diaspora/lang/zh-cn/strings.php index 47c0f556..307a634f 100644 --- a/diaspora/lang/zh-cn/strings.php +++ b/diaspora/lang/zh-cn/strings.php @@ -8,7 +8,7 @@ function string_plural_select_zh_cn($n){ $a->strings["Post to Diaspora"] = "发到 Diaspora"; $a->strings["Can't login to your Diaspora account. Please check username and password and ensure you used the complete address (including http...)"] = "无法登录到你的 Diaspora 账户。请检查用户名和密码并确保你用了完整的地址(包括http...)"; $a->strings["Diaspora Export"] = "Diaspora 导出"; -$a->strings["Enable Diaspora Post Plugin"] = "启用 Diaspora 发文插件"; +$a->strings["Enable Diaspora Post Addon"] = "启用 Diaspora 发文插件"; $a->strings["Diaspora username"] = "Diaspora 用户名"; $a->strings["Diaspora password"] = "Diaspora 密码"; $a->strings["Diaspora site URL"] = "Diaspora 站点 URL"; diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 94d7937c..be2bcd11 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -76,7 +76,7 @@ function dwpost_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/dwpost/lang/C/messages.po b/dwpost/lang/C/messages.po index 6bed922f..c81e9f0f 100644 --- a/dwpost/lang/C/messages.po +++ b/dwpost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Dreamwidth Post Settings" msgstr "" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "" #: dwpost.php:77 diff --git a/dwpost/lang/ca/strings.php b/dwpost/lang/ca/strings.php index 6ad56a9b..3b7df6d0 100644 --- a/dwpost/lang/ca/strings.php +++ b/dwpost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Missatge a Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configuració d'enviaments a Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Habilitat el plugin d'enviaments a Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Habilitat el addon d'enviaments a Dreamwidth"; $a->strings["dreamwidth username"] = "Nom d'usuari a Dreamwidth"; $a->strings["dreamwidth password"] = "Contrasenya a Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Enviar per defecte a Dreamwidth"; diff --git a/dwpost/lang/cs/messages.po b/dwpost/lang/cs/messages.po index 2291657a..fb01a38e 100644 --- a/dwpost/lang/cs/messages.po +++ b/dwpost/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "Dreamwidth Post Settings" msgstr "Dreamwidth nastavení příspěvků" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Povolit dreamwidth Plugin" +msgid "Enable dreamwidth Post Addon" +msgstr "Povolit dreamwidth Addon" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/cs/strings.php b/dwpost/lang/cs/strings.php index 6d02b09f..df348a83 100644 --- a/dwpost/lang/cs/strings.php +++ b/dwpost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Dreamwidth"] = "Poslat na Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth nastavení příspěvků"; -$a->strings["Enable dreamwidth Post Plugin"] = "Povolit dreamwidth Plugin"; +$a->strings["Enable dreamwidth Post Addon"] = "Povolit dreamwidth Addon"; $a->strings["dreamwidth username"] = "dreamwidth uživatelské jméno"; $a->strings["dreamwidth password"] = "dreamwidth heslo"; $a->strings["Post to dreamwidth by default"] = "Defaultně umístit na dreamwidth"; diff --git a/dwpost/lang/de/messages.po b/dwpost/lang/de/messages.po index 81507eed..07e6beb6 100644 --- a/dwpost/lang/de/messages.po +++ b/dwpost/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "Dreamwidth Post Settings" msgstr "Dreamwidth Veröffentlichungs-Einstellungen" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Dreamwidth Post Plugin aktivieren" +msgid "Enable dreamwidth Post Addon" +msgstr "Dreamwidth Post Addon aktivieren" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/de/strings.php b/dwpost/lang/de/strings.php index a8095899..a810f79e 100644 --- a/dwpost/lang/de/strings.php +++ b/dwpost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Dreamwidth"] = "In Dreamwidth veröffentlichen"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth Veröffentlichungs-Einstellungen"; -$a->strings["Enable dreamwidth Post Plugin"] = "Dreamwidth Post Plugin aktivieren"; +$a->strings["Enable dreamwidth Post Addon"] = "Dreamwidth Post Addon aktivieren"; $a->strings["dreamwidth username"] = "Dreamwidth Benutzername"; $a->strings["dreamwidth password"] = "Dreamwidth Passwort"; $a->strings["Post to dreamwidth by default"] = "Standardmäßig bei Dreamwidth veröffentlichen"; diff --git a/dwpost/lang/eo/strings.php b/dwpost/lang/eo/strings.php index 967d4b9b..d0c96db6 100644 --- a/dwpost/lang/eo/strings.php +++ b/dwpost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Afiŝi al Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Agordoj por Afiŝoj al Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Ŝalti la Dreamwidth Kromprogramon"; +$a->strings["Enable dreamwidth Post Addon"] = "Ŝalti la Dreamwidth Kromprogramon"; $a->strings["dreamwidth username"] = "Dreamwidth salutnomo"; $a->strings["dreamwidth password"] = "Dreamwidth pasvorto"; $a->strings["Post to dreamwidth by default"] = "Defaŭlte afiŝi al Dreamwidth"; diff --git a/dwpost/lang/es/messages.po b/dwpost/lang/es/messages.po index 10368bb2..18036677 100644 --- a/dwpost/lang/es/messages.po +++ b/dwpost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Dreamwidth Post Settings" msgstr "Ajustes de publicación de Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Activar el plugin de publicación dreamwidth" +msgid "Enable dreamwidth Post Addon" +msgstr "Activar el addon de publicación dreamwidth" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/es/strings.php b/dwpost/lang/es/strings.php index 646b945b..4c5c116f 100644 --- a/dwpost/lang/es/strings.php +++ b/dwpost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Dreamwidth"] = "Publicar en Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Ajustes de publicación de Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Activar el plugin de publicación dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Activar el addon de publicación dreamwidth"; $a->strings["dreamwidth username"] = "Nombre de usuario de dreamwidth"; $a->strings["dreamwidth password"] = "Contraseña de dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Publicar en dreamwidth por defecto"; diff --git a/dwpost/lang/fr/messages.po b/dwpost/lang/fr/messages.po index d0010280..1277d590 100644 --- a/dwpost/lang/fr/messages.po +++ b/dwpost/lang/fr/messages.po @@ -29,7 +29,7 @@ msgid "Dreamwidth Post Settings" msgstr "Paramètres pour Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "" #: dwpost.php:77 diff --git a/dwpost/lang/fr/strings.php b/dwpost/lang/fr/strings.php index 138d9d8a..5ecda471 100644 --- a/dwpost/lang/fr/strings.php +++ b/dwpost/lang/fr/strings.php @@ -7,7 +7,7 @@ function string_plural_select_fr($n){ ; $a->strings["Post to Dreamwidth"] = "Publier sur Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Paramètres pour Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = "Nom d'utilisateur Dreamwidth"; $a->strings["dreamwidth password"] = "Mot de passe dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Poster sur Dreamwidth par défaut"; diff --git a/dwpost/lang/is/strings.php b/dwpost/lang/is/strings.php index 96f1f78b..e5fee400 100644 --- a/dwpost/lang/is/strings.php +++ b/dwpost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = ""; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/it/messages.po b/dwpost/lang/it/messages.po index dbd21016..8b19c299 100644 --- a/dwpost/lang/it/messages.po +++ b/dwpost/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "Dreamwidth Post Settings" msgstr "Impostazioni di invio a Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Abilita il plugin di invio a Dreamwidth" +msgid "Enable dreamwidth Post Addon" +msgstr "Abilita il addon di invio a Dreamwidth" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/it/strings.php b/dwpost/lang/it/strings.php index 5cded6e1..df904d62 100644 --- a/dwpost/lang/it/strings.php +++ b/dwpost/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to Dreamwidth"] = "Posta su Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Impostazioni di invio a Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Abilita il plugin di invio a Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Abilita il addon di invio a Dreamwidth"; $a->strings["dreamwidth username"] = "Nome utente Dreamwidth"; $a->strings["dreamwidth password"] = "password Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Invia sempre a Dreamwidth"; diff --git a/dwpost/lang/nb-no/strings.php b/dwpost/lang/nb-no/strings.php index 37677e6d..c4ea612b 100644 --- a/dwpost/lang/nb-no/strings.php +++ b/dwpost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = ""; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/pl/strings.php b/dwpost/lang/pl/strings.php index 237c95d9..9f1ff04e 100644 --- a/dwpost/lang/pl/strings.php +++ b/dwpost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Opublikuj na Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/pt-br/messages.po b/dwpost/lang/pt-br/messages.po index 26c3bba6..f0e49e4e 100644 --- a/dwpost/lang/pt-br/messages.po +++ b/dwpost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Configurações de publicação no Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Habilitar plug-in para publicar no Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/pt-br/strings.php b/dwpost/lang/pt-br/strings.php index 329cf9e3..03dc7d2d 100644 --- a/dwpost/lang/pt-br/strings.php +++ b/dwpost/lang/pt-br/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Publicar no Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configurações de publicação no Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Habilitar o plugin de publicação no Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Habilitar o addon de publicação no Dreamwidth"; $a->strings["dreamwidth username"] = "Nome de usuário do Dreamwidth"; $a->strings["dreamwidth password"] = "Senha do Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Publicar no Dreamwidth por padrão"; diff --git a/dwpost/lang/ro/messages.po b/dwpost/lang/ro/messages.po index f2fd9e0c..91285968 100644 --- a/dwpost/lang/ro/messages.po +++ b/dwpost/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Configurări Postări Dreamwidth " #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Activare Modul Postare pe Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/ro/strings.php b/dwpost/lang/ro/strings.php index d50f3803..ed3ece27 100644 --- a/dwpost/lang/ro/strings.php +++ b/dwpost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Dreamwidth"] = "Postați pe Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configurări Postări Dreamwidth "; -$a->strings["Enable dreamwidth Post Plugin"] = "Activare Modul Postare pe Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Activare Modul Postare pe Dreamwidth"; $a->strings["dreamwidth username"] = "Utilizator Dreamwidth"; $a->strings["dreamwidth password"] = "Parola Dreamwidth "; $a->strings["Post to dreamwidth by default"] = "Postați implicit pe Dreamwidth"; diff --git a/dwpost/lang/ru/messages.po b/dwpost/lang/ru/messages.po index fc01bce0..93e400e5 100644 --- a/dwpost/lang/ru/messages.po +++ b/dwpost/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Настройки сообщений Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Включить плагин отправки сообщений в Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/ru/strings.php b/dwpost/lang/ru/strings.php index db1b2755..7b6e5f47 100644 --- a/dwpost/lang/ru/strings.php +++ b/dwpost/lang/ru/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ru($n){ ; $a->strings["Post to Dreamwidth"] = "Отправить в Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Настройки сообщений Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Включить плагин отправки сообщений в Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Включить плагин отправки сообщений в Dreamwidth"; $a->strings["dreamwidth username"] = "Имя пользователя Dreamwidth"; $a->strings["dreamwidth password"] = "Пароль Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Отправлять сообщения в Dreamwidth по умолчанию"; diff --git a/dwpost/lang/zh-cn/strings.php b/dwpost/lang/zh-cn/strings.php index 93e075c6..131cd9fa 100644 --- a/dwpost/lang/zh-cn/strings.php +++ b/dwpost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "转播到Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth转播设置"; -$a->strings["Enable dreamwidth Post Plugin"] = "使Dreamwidth转播插件可用"; +$a->strings["Enable dreamwidth Post Addon"] = "使Dreamwidth转播插件可用"; $a->strings["dreamwidth username"] = "Dreamwidth用户名"; $a->strings["dreamwidth password"] = "Dreamwidth密码"; $a->strings["Post to dreamwidth by default"] = "默认地转播到Dreamwidth"; diff --git a/fortunate/fortunate.php b/fortunate/fortunate.php index 8e28879c..4d87bffe 100644 --- a/fortunate/fortunate.php +++ b/fortunate/fortunate.php @@ -14,7 +14,7 @@ define ('FORTUNATE_SERVER', 'hostname.com'); function fortunate_install() { Addon::registerHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); if(FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) { - notice('Fortunate plugin requires configuration. See README'); + notice('Fortunate addon requires configuration. See README'); } } diff --git a/geonames/lang/C/messages.po b/geonames/lang/C/messages.po index 49210658..81c239d2 100644 --- a/geonames/lang/C/messages.po +++ b/geonames/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Geonames Settings" msgstr "" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "" #: geonames.php:187 diff --git a/geonames/lang/ca/strings.php b/geonames/lang/ca/strings.php index 058ef8e5..259e81f4 100644 --- a/geonames/lang/ca/strings.php +++ b/geonames/lang/ca/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Actualitzada la configuració de Geonames."; $a->strings["Geonames Settings"] = "Configuració de Geonames"; -$a->strings["Enable Geonames Plugin"] = "Habilitar Plugin de Geonames"; +$a->strings["Enable Geonames Addon"] = "Habilitar Addon de Geonames"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/cs/messages.po b/geonames/lang/cs/messages.po index d88aef60..98d8f14f 100644 --- a/geonames/lang/cs/messages.po +++ b/geonames/lang/cs/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Nastavení Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Povolit Geonames rozšíření" #: geonames.php:187 diff --git a/geonames/lang/cs/strings.php b/geonames/lang/cs/strings.php index 134a6a77..dfd52e6c 100644 --- a/geonames/lang/cs/strings.php +++ b/geonames/lang/cs/strings.php @@ -7,5 +7,5 @@ function string_plural_select_cs($n){ ; $a->strings["Geonames settings updated."] = "Geonames nastavení aktualizováno."; $a->strings["Geonames Settings"] = "Nastavení Geonames"; -$a->strings["Enable Geonames Plugin"] = "Povolit Geonames rozšíření"; +$a->strings["Enable Geonames Addon"] = "Povolit Geonames rozšíření"; $a->strings["Submit"] = "Odeslat"; diff --git a/geonames/lang/de/messages.po b/geonames/lang/de/messages.po index 7629b1b5..fdc3ed63 100644 --- a/geonames/lang/de/messages.po +++ b/geonames/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "Geonames Settings" msgstr "Geonames Einstellungen" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Geonames Plugin aktivieren" +msgid "Enable Geonames Addon" +msgstr "Geonames Addon aktivieren" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/de/strings.php b/geonames/lang/de/strings.php index cf1838fb..26f2246e 100644 --- a/geonames/lang/de/strings.php +++ b/geonames/lang/de/strings.php @@ -7,5 +7,5 @@ function string_plural_select_de($n){ ; $a->strings["Geonames settings updated."] = "Geonames Einstellungen aktualisiert"; $a->strings["Geonames Settings"] = "Geonames Einstellungen"; -$a->strings["Enable Geonames Plugin"] = "Geonames Plugin aktivieren"; +$a->strings["Enable Geonames Addon"] = "Geonames Addon aktivieren"; $a->strings["Submit"] = "Senden"; diff --git a/geonames/lang/eo/strings.php b/geonames/lang/eo/strings.php index a6127e68..65cd16a3 100644 --- a/geonames/lang/eo/strings.php +++ b/geonames/lang/eo/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Ĝidatigis la Geonames agordojn."; $a->strings["Geonames Settings"] = "Geonames Agordoj"; -$a->strings["Enable Geonames Plugin"] = "Ŝalti la Geonames Kromprogramon"; +$a->strings["Enable Geonames Addon"] = "Ŝalti la Geonames Kromprogramon"; $a->strings["Submit"] = "Sendi"; diff --git a/geonames/lang/es/messages.po b/geonames/lang/es/messages.po index f372d792..84de85aa 100644 --- a/geonames/lang/es/messages.po +++ b/geonames/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Geonames Settings" msgstr "Ajustes de Geonombres" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Habilitar Plugin de Geonombres" +msgid "Enable Geonames Addon" +msgstr "Habilitar Addon de Geonombres" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/es/strings.php b/geonames/lang/es/strings.php index d9a85aa1..d2cb635d 100644 --- a/geonames/lang/es/strings.php +++ b/geonames/lang/es/strings.php @@ -7,5 +7,5 @@ function string_plural_select_es($n){ ; $a->strings["Geonames settings updated."] = "Ajustes de geonombres actualizados."; $a->strings["Geonames Settings"] = "Ajustes de Geonombres"; -$a->strings["Enable Geonames Plugin"] = "Habilitar Plugin de Geonombres"; +$a->strings["Enable Geonames Addon"] = "Habilitar Addon de Geonombres"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/fr/strings.php b/geonames/lang/fr/strings.php index 6428cb38..10d6631e 100644 --- a/geonames/lang/fr/strings.php +++ b/geonames/lang/fr/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Réglages Geonames sauvés."; $a->strings["Geonames Settings"] = "Réglages Geonames"; -$a->strings["Enable Geonames Plugin"] = "Activer Geonames"; +$a->strings["Enable Geonames Addon"] = "Activer Geonames"; $a->strings["Submit"] = "Envoyer"; diff --git a/geonames/lang/is/strings.php b/geonames/lang/is/strings.php index ac64f2ba..436d3116 100644 --- a/geonames/lang/is/strings.php +++ b/geonames/lang/is/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = ""; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/geonames/lang/it/messages.po b/geonames/lang/it/messages.po index 8164d7a2..94f4c269 100644 --- a/geonames/lang/it/messages.po +++ b/geonames/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "Geonames Settings" msgstr "Impostazioni Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Abilita plugin Geonames" +msgid "Enable Geonames Addon" +msgstr "Abilita addon Geonames" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/it/strings.php b/geonames/lang/it/strings.php index 8ecc98c2..c50e8345 100644 --- a/geonames/lang/it/strings.php +++ b/geonames/lang/it/strings.php @@ -7,5 +7,5 @@ function string_plural_select_it($n){ ; $a->strings["Geonames settings updated."] = "Impostazioni di Geonames aggiornate."; $a->strings["Geonames Settings"] = "Impostazioni Geonames"; -$a->strings["Enable Geonames Plugin"] = "Abilita plugin Geonames"; +$a->strings["Enable Geonames Addon"] = "Abilita addon Geonames"; $a->strings["Submit"] = "Invia"; diff --git a/geonames/lang/nb-no/strings.php b/geonames/lang/nb-no/strings.php index b3fea872..4a7b5f09 100644 --- a/geonames/lang/nb-no/strings.php +++ b/geonames/lang/nb-no/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = ""; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/geonames/lang/pl/strings.php b/geonames/lang/pl/strings.php index ff15d74f..08a3633c 100644 --- a/geonames/lang/pl/strings.php +++ b/geonames/lang/pl/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = "ustawienia Geonames"; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/geonames/lang/pt-br/strings.php b/geonames/lang/pt-br/strings.php index c0cf0b53..d302d1fe 100644 --- a/geonames/lang/pt-br/strings.php +++ b/geonames/lang/pt-br/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Configurações Geonames atualizadas."; $a->strings["Geonames Settings"] = "Configurações Geonames"; -$a->strings["Enable Geonames Plugin"] = "Plugin Geonames Habilitado"; +$a->strings["Enable Geonames Addon"] = "Addon Geonames Habilitado"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/ro/messages.po b/geonames/lang/ro/messages.po index 673f4fdf..973c9446 100644 --- a/geonames/lang/ro/messages.po +++ b/geonames/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Configurări Geonume" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Permite Modul Geonume" #: geonames.php:187 diff --git a/geonames/lang/ro/strings.php b/geonames/lang/ro/strings.php index 6b25f12f..b6258552 100644 --- a/geonames/lang/ro/strings.php +++ b/geonames/lang/ro/strings.php @@ -7,5 +7,5 @@ function string_plural_select_ro($n){ ; $a->strings["Geonames settings updated."] = "Configurări Geonume actualizate."; $a->strings["Geonames Settings"] = "Configurări Geonume"; -$a->strings["Enable Geonames Plugin"] = "Permite Modul Geonume"; +$a->strings["Enable Geonames Addon"] = "Permite Modul Geonume"; $a->strings["Submit"] = "Trimite"; diff --git a/geonames/lang/ru/messages.po b/geonames/lang/ru/messages.po index d8deda8c..a639310b 100644 --- a/geonames/lang/ru/messages.po +++ b/geonames/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Настройки Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Включить плагин Geonames" #: geonames.php:187 diff --git a/geonames/lang/ru/strings.php b/geonames/lang/ru/strings.php index 2af0233c..658dd72a 100644 --- a/geonames/lang/ru/strings.php +++ b/geonames/lang/ru/strings.php @@ -7,5 +7,5 @@ function string_plural_select_ru($n){ ; $a->strings["Geonames settings updated."] = "Настройки Geonames обновлены."; $a->strings["Geonames Settings"] = "Настройки Geonames"; -$a->strings["Enable Geonames Plugin"] = "Включить плагин Geonames"; +$a->strings["Enable Geonames Addon"] = "Включить плагин Geonames"; $a->strings["Submit"] = "Добавить"; diff --git a/geonames/lang/zh-cn/strings.php b/geonames/lang/zh-cn/strings.php index 2f72f8c0..89e3fd94 100644 --- a/geonames/lang/zh-cn/strings.php +++ b/geonames/lang/zh-cn/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Geonames设置更新了。"; $a->strings["Geonames Settings"] = "Geonames设置"; -$a->strings["Enable Geonames Plugin"] = "使Geonames插件能用"; +$a->strings["Enable Geonames Addon"] = "使Geonames插件能用"; $a->strings["Submit"] = "提交"; diff --git a/gnot/lang/C/messages.po b/gnot/lang/C/messages.po index 86f2268c..230d2364 100644 --- a/gnot/lang/C/messages.po +++ b/gnot/lang/C/messages.po @@ -32,7 +32,7 @@ msgid "" msgstr "" #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "" #: gnot.php:88 diff --git a/gnot/lang/ca/strings.php b/gnot/lang/ca/strings.php index 809a152d..e65ec936 100644 --- a/gnot/lang/ca/strings.php +++ b/gnot/lang/ca/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Configuració de Gnot actualitzada"; $a->strings["Gnot Settings"] = "Configuració de Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permet crear fils de les notificacions de comentaris de correu electrònic a Gmail i anonimat de la línia d'assumpte."; -$a->strings["Enable this plugin/addon?"] = "Activar aquest plugin/aplicació?"; +$a->strings["Enable this addon?"] = "Activar aquest addon/aplicació?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica: Notifica] Conversació comentada #%d"; diff --git a/gnot/lang/cs/messages.po b/gnot/lang/cs/messages.po index 3db9fa47..1f9f4244 100644 --- a/gnot/lang/cs/messages.po +++ b/gnot/lang/cs/messages.po @@ -34,8 +34,8 @@ msgid "" msgstr "Umožnit řetězení emailových komentářových notifikací na Gmailu a anonymizací řádky předmětu." #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Povolit tento plugin/rozšíření?" +msgid "Enable this addon?" +msgstr "Povolit tento addon/rozšíření?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/cs/strings.php b/gnot/lang/cs/strings.php index 596817d1..90648e5e 100644 --- a/gnot/lang/cs/strings.php +++ b/gnot/lang/cs/strings.php @@ -8,6 +8,6 @@ function string_plural_select_cs($n){ $a->strings["Gnot settings updated."] = "Nastavení Gnot aktualizováno."; $a->strings["Gnot Settings"] = "Nastavení Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Umožnit řetězení emailových komentářových notifikací na Gmailu a anonymizací řádky předmětu."; -$a->strings["Enable this plugin/addon?"] = "Povolit tento plugin/rozšíření?"; +$a->strings["Enable this addon?"] = "Povolit tento addon/rozšíření?"; $a->strings["Submit"] = "Odeslat"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Upozornění] Komentář ke konverzaci #%d"; diff --git a/gnot/lang/de/messages.po b/gnot/lang/de/messages.po index 3a72154d..747f1853 100644 --- a/gnot/lang/de/messages.po +++ b/gnot/lang/de/messages.po @@ -35,8 +35,8 @@ msgid "" msgstr "Erlaubt das Veröffentlichen von E-Mail Kommentar Benachrichtigungen bei Gmail mit anonymisiertem Betreff" #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Dieses Plugin/Addon aktivieren?" +msgid "Enable this addon?" +msgstr "Dieses Addon aktivieren?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/de/strings.php b/gnot/lang/de/strings.php index 03832f71..b798a21b 100644 --- a/gnot/lang/de/strings.php +++ b/gnot/lang/de/strings.php @@ -8,6 +8,6 @@ function string_plural_select_de($n){ $a->strings["Gnot settings updated."] = "Gnot Einstellungen aktualisiert."; $a->strings["Gnot Settings"] = "Gnot Einstellungen"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Erlaubt das Veröffentlichen von E-Mail Kommentar Benachrichtigungen bei Gmail mit anonymisiertem Betreff"; -$a->strings["Enable this plugin/addon?"] = "Dieses Plugin/Addon aktivieren?"; +$a->strings["Enable this addon?"] = "Dieses Addon aktivieren?"; $a->strings["Submit"] = "Senden"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica-Benachrichtigung] Kommentar zum Beitrag #%d"; diff --git a/gnot/lang/eo/strings.php b/gnot/lang/eo/strings.php index 89379e9a..cfd3c53c 100644 --- a/gnot/lang/eo/strings.php +++ b/gnot/lang/eo/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Ĝisdatigis Gnot agordojn."; $a->strings["Gnot Settings"] = "Agordoj por Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permesas la ĉenadon de retpoŝtaj atentigoj pri komentoj ĉe Gmail kan anonimigado de la temlinio."; -$a->strings["Enable this plugin/addon?"] = "Ŝalti tiun kromprogramon?"; +$a->strings["Enable this addon?"] = "Ŝalti tiun kromprogramon?"; $a->strings["Submit"] = "Sendi"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Atentigo] Komento pri konversacio #%d"; diff --git a/gnot/lang/es/messages.po b/gnot/lang/es/messages.po index b96abe64..6e4b8569 100644 --- a/gnot/lang/es/messages.po +++ b/gnot/lang/es/messages.po @@ -34,8 +34,8 @@ msgid "" msgstr "Permite limpiar las notificaciones de comentario de email en Gmail y anonimizar la línea del tema." #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "¿Habilitar este plugin/addon?" +msgid "Enable this addon?" +msgstr "¿Habilitar este addon?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/es/strings.php b/gnot/lang/es/strings.php index 1f114cdb..2f9e7a8d 100644 --- a/gnot/lang/es/strings.php +++ b/gnot/lang/es/strings.php @@ -8,6 +8,6 @@ function string_plural_select_es($n){ $a->strings["Gnot settings updated."] = "Ajustes de Gnot actualizados."; $a->strings["Gnot Settings"] = "Ajustes de Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite limpiar las notificaciones de comentario de email en Gmail y anonimizar la línea del tema."; -$a->strings["Enable this plugin/addon?"] = "¿Habilitar este plugin/addon?"; +$a->strings["Enable this addon?"] = "¿Habilitar este addon?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Comentar en conversación #%d"; diff --git a/gnot/lang/fr/strings.php b/gnot/lang/fr/strings.php index 7018f6c3..32caf46b 100644 --- a/gnot/lang/fr/strings.php +++ b/gnot/lang/fr/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Réglages Gnot sauvés."; $a->strings["Gnot Settings"] = "Réglages Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Autorise l'arborescence des notifications de commentaires sur GMail, et rend la ligne 'Sujet' anonyme."; -$a->strings["Enable this plugin/addon?"] = "Activer cette extension?"; +$a->strings["Enable this addon?"] = "Activer cette extension?"; $a->strings["Submit"] = "Envoyer"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notification] Commentaire sur la conversation #%d"; diff --git a/gnot/lang/is/strings.php b/gnot/lang/is/strings.php index c75a1c42..ae183568 100644 --- a/gnot/lang/is/strings.php +++ b/gnot/lang/is/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = ""; +$a->strings["Enable this addon?"] = ""; $a->strings["Submit"] = "Senda inn"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/it/messages.po b/gnot/lang/it/messages.po index 45649f78..e8ea9005 100644 --- a/gnot/lang/it/messages.po +++ b/gnot/lang/it/messages.po @@ -34,8 +34,8 @@ msgid "" msgstr "Permetti di raggruppare le notifiche dei commenti in thread su Gmail e anonimizza l'oggetto" #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Abilita questo plugin?" +msgid "Enable this addon?" +msgstr "Abilita questo addon?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/it/strings.php b/gnot/lang/it/strings.php index 0c8ef482..78c368ca 100644 --- a/gnot/lang/it/strings.php +++ b/gnot/lang/it/strings.php @@ -8,6 +8,6 @@ function string_plural_select_it($n){ $a->strings["Gnot settings updated."] = "Impostazioni di \"Gnot\" aggiornate."; $a->strings["Gnot Settings"] = "Impostazioni Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permetti di raggruppare le notifiche dei commenti in thread su Gmail e anonimizza l'oggetto"; -$a->strings["Enable this plugin/addon?"] = "Abilita questo plugin?"; +$a->strings["Enable this addon?"] = "Abilita questo addon?"; $a->strings["Submit"] = "Invia"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notifica] Commento alla conversazione n° %d"; diff --git a/gnot/lang/nb-no/strings.php b/gnot/lang/nb-no/strings.php index d53d8296..4d260d6b 100644 --- a/gnot/lang/nb-no/strings.php +++ b/gnot/lang/nb-no/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = ""; +$a->strings["Enable this addon?"] = ""; $a->strings["Submit"] = "Lagre"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/pl/strings.php b/gnot/lang/pl/strings.php index 64d9ef8b..fb58666e 100644 --- a/gnot/lang/pl/strings.php +++ b/gnot/lang/pl/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = "Umożliwić tego plugina/wtyczkę?"; +$a->strings["Enable this addon?"] = "Umożliwić tego addona/wtyczkę?"; $a->strings["Submit"] = "Potwierdź"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/pt-br/strings.php b/gnot/lang/pt-br/strings.php index 5a079154..92c97c4b 100644 --- a/gnot/lang/pt-br/strings.php +++ b/gnot/lang/pt-br/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "As configurações do Gnot foram atualizadas."; $a->strings["Gnot Settings"] = "Configurações do Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite o encadeamento das notificações por e-mail de comentário no GMail, tornando a a linha de assunto anônima."; -$a->strings["Enable this plugin/addon?"] = "Habilitar este plugin/complemento?"; +$a->strings["Enable this addon?"] = "Habilitar este addon/complemento?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Comentário na conversa #%d"; diff --git a/gnot/lang/ro/messages.po b/gnot/lang/ro/messages.po index 807f2977..34de34f8 100644 --- a/gnot/lang/ro/messages.po +++ b/gnot/lang/ro/messages.po @@ -34,7 +34,7 @@ msgid "" msgstr "Permite înlănțuirea notificărilor prin email a comentariilor, în Gmail și anonimizarea subiectului." #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "Activați acest modul/supliment?" #: gnot.php:88 diff --git a/gnot/lang/ro/strings.php b/gnot/lang/ro/strings.php index 764be84e..a3641f4e 100644 --- a/gnot/lang/ro/strings.php +++ b/gnot/lang/ro/strings.php @@ -8,6 +8,6 @@ function string_plural_select_ro($n){ $a->strings["Gnot settings updated."] = "Configurările Gnot au fost actualizate."; $a->strings["Gnot Settings"] = "Configurări Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite înlănțuirea notificărilor prin email a comentariilor, în Gmail și anonimizarea subiectului."; -$a->strings["Enable this plugin/addon?"] = "Activați acest modul/supliment?"; +$a->strings["Enable this addon?"] = "Activați acest modul/supliment?"; $a->strings["Submit"] = "Trimite"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notificare] Comentariu la conversația # %d"; diff --git a/gnot/lang/ru/messages.po b/gnot/lang/ru/messages.po index ff2dc460..9e63af41 100644 --- a/gnot/lang/ru/messages.po +++ b/gnot/lang/ru/messages.po @@ -34,7 +34,7 @@ msgid "" msgstr "Разрешить нитевание уведомлений о комментариях на Gmail и анонимизировать поле \"Тема\"." #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "Включить этот плагин/аддон?" #: gnot.php:88 diff --git a/gnot/lang/ru/strings.php b/gnot/lang/ru/strings.php index 45510f70..53d6583b 100644 --- a/gnot/lang/ru/strings.php +++ b/gnot/lang/ru/strings.php @@ -8,6 +8,6 @@ function string_plural_select_ru($n){ $a->strings["Gnot settings updated."] = "Настройки Gnot обновлены."; $a->strings["Gnot Settings"] = "Настройки Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Разрешить нитевание уведомлений о комментариях на Gmail и анонимизировать поле \"Тема\"."; -$a->strings["Enable this plugin/addon?"] = "Включить этот плагин/аддон?"; +$a->strings["Enable this addon?"] = "Включить этот плагин/аддон?"; $a->strings["Submit"] = "Добавить"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Комментарий в теме #%d"; diff --git a/gnot/lang/zh-cn/strings.php b/gnot/lang/zh-cn/strings.php index ddb0d85d..3f7ba8f9 100644 --- a/gnot/lang/zh-cn/strings.php +++ b/gnot/lang/zh-cn/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Gnot设置更新了。"; $a->strings["Gnot Settings"] = "Gnot设置"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "允许邮件评论通知在Gmail和匿名话题行。"; -$a->strings["Enable this plugin/addon?"] = "使这个插件/加件可用?"; +$a->strings["Enable this addon?"] = "使这个插件/加件可用?"; $a->strings["Submit"] = "提交"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify]评论在交流#%d"; diff --git a/gravatar/README.md b/gravatar/README.md index ff209b0e..0145570b 100644 --- a/gravatar/README.md +++ b/gravatar/README.md @@ -1,4 +1,4 @@ -# Gravatar Plugin +# Gravatar Addon by [Klaus Weidenbach](http://friendica.dszdw.net/profile/klaus) This addon allows you to look up an avatar image for new users and contacts at [Gravatar](http://www.gravatar.com). This will be used if there have not been found any other avatar images yet for example through OpenID. diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 16c14a79..6df040fe 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -75,7 +75,7 @@ function ijpost_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/ijpost/lang/C/messages.po b/ijpost/lang/C/messages.po index 4f62c23a..33e9c31a 100644 --- a/ijpost/lang/C/messages.po +++ b/ijpost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "InsaneJournal Post Settings" msgstr "" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "" #: ijpost.php:77 diff --git a/ijpost/lang/ca/strings.php b/ijpost/lang/ca/strings.php index b5382615..a1f796d6 100644 --- a/ijpost/lang/ca/strings.php +++ b/ijpost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Enviament a Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Ajustos d'Enviament a Insanejournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilita el Plugin d'Enviaments a Insanejournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilita el Addon d'Enviaments a Insanejournal"; $a->strings["InsaneJournal username"] = "Nom d'usuari de Insanejournal"; $a->strings["InsaneJournal password"] = "Contrasenya de Insanejournal"; $a->strings["Post to InsaneJournal by default"] = "Enviar per defecte a Insanejournal"; diff --git a/ijpost/lang/cs/messages.po b/ijpost/lang/cs/messages.po index 491112fb..dd273de4 100644 --- a/ijpost/lang/cs/messages.po +++ b/ijpost/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Nastavení příspěvků pro InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Povolit Insanejournal plugin" +msgid "Enable InsaneJournal Post Addon" +msgstr "Povolit Insanejournal addon" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/cs/strings.php b/ijpost/lang/cs/strings.php index 157e6a8e..4f4fec36 100644 --- a/ijpost/lang/cs/strings.php +++ b/ijpost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Insanejournal"] = "Odeslat na Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Nastavení příspěvků pro InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Povolit Insanejournal plugin"; +$a->strings["Enable InsaneJournal Post Addon"] = "Povolit Insanejournal addon"; $a->strings["InsaneJournal username"] = "Insanejournal uživatelské jméno"; $a->strings["InsaneJournal password"] = "Insanejournal heslo"; $a->strings["Post to InsaneJournal by default"] = "Defaultně zasílat příspěvky na InsaneJournal"; diff --git a/ijpost/lang/de/messages.po b/ijpost/lang/de/messages.po index 6d3897eb..35101521 100644 --- a/ijpost/lang/de/messages.po +++ b/ijpost/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "InsaneJournal Post Settings" msgstr "InsaneJournal Beitrags-Einstellungen" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "InsaneJournal Plugin aktivieren" +msgid "Enable InsaneJournal Post Addon" +msgstr "InsaneJournal Addon aktivieren" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/de/strings.php b/ijpost/lang/de/strings.php index e256daec..3b8dbb6d 100644 --- a/ijpost/lang/de/strings.php +++ b/ijpost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Insanejournal"] = "Auf InsaneJournal posten."; $a->strings["InsaneJournal Post Settings"] = "InsaneJournal Beitrags-Einstellungen"; -$a->strings["Enable InsaneJournal Post Plugin"] = "InsaneJournal Plugin aktivieren"; +$a->strings["Enable InsaneJournal Post Addon"] = "InsaneJournal Addon aktivieren"; $a->strings["InsaneJournal username"] = "InsaneJournal Benutzername"; $a->strings["InsaneJournal password"] = "InsaneJournal Passwort"; $a->strings["Post to InsaneJournal by default"] = "Standardmäßig auf InsaneJournal posten."; diff --git a/ijpost/lang/eo/strings.php b/ijpost/lang/eo/strings.php index 11698887..bab5fc08 100644 --- a/ijpost/lang/eo/strings.php +++ b/ijpost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Afiŝi al Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Agordoj pri Insaenejournal Afiŝoj"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Ŝalti la InsaneJournal afiŝo kromprogramon."; +$a->strings["Enable InsaneJournal Post Addon"] = "Ŝalti la InsaneJournal afiŝo kromprogramon."; $a->strings["InsaneJournal username"] = "Salutnomo ĉe InsaneJournal"; $a->strings["InsaneJournal password"] = "Pasvorto ĉe InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Defaŭlte afiŝi ĉe InsaneJournal"; diff --git a/ijpost/lang/es/messages.po b/ijpost/lang/es/messages.po index c4d5c06b..7aa4e1a8 100644 --- a/ijpost/lang/es/messages.po +++ b/ijpost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Ajustes de Entrada de InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Habilitar el Plugin de Entrada InsaneJournal" +msgid "Enable InsaneJournal Post Addon" +msgstr "Habilitar el Addon de Entrada InsaneJournal" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/es/strings.php b/ijpost/lang/es/strings.php index db51f372..76c9e5f9 100644 --- a/ijpost/lang/es/strings.php +++ b/ijpost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Insanejournal"] = "Publicar en Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Ajustes de Entrada de InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilitar el Plugin de Entrada InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilitar el Addon de Entrada InsaneJournal"; $a->strings["InsaneJournal username"] = "Nombre de usuario InsaneJournal"; $a->strings["InsaneJournal password"] = "Contraseña de InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publicar en InsaneJournal por defecto"; diff --git a/ijpost/lang/fr/strings.php b/ijpost/lang/fr/strings.php index 7db58ccf..398e3c62 100644 --- a/ijpost/lang/fr/strings.php +++ b/ijpost/lang/fr/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Publier vers InsaneJournal"; $a->strings["InsaneJournal Post Settings"] = "Réglages InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Activer le connecteur InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Activer le connecteur InsaneJournal"; $a->strings["InsaneJournal username"] = "Utilisateur InsaneJournal"; $a->strings["InsaneJournal password"] = "Mot de passe InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publier sur InsaneJournal par défaut"; diff --git a/ijpost/lang/is/strings.php b/ijpost/lang/is/strings.php index b79f347e..3dffb320 100644 --- a/ijpost/lang/is/strings.php +++ b/ijpost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/it/messages.po b/ijpost/lang/it/messages.po index aba06846..79578b34 100644 --- a/ijpost/lang/it/messages.po +++ b/ijpost/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Impostazioni post InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Abilita il plugin di invio a InsaneJournal" +msgid "Enable InsaneJournal Post Addon" +msgstr "Abilita iladdondi invio a InsaneJournal" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/it/strings.php b/ijpost/lang/it/strings.php index 73e8bed4..2f26bb93 100644 --- a/ijpost/lang/it/strings.php +++ b/ijpost/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to Insanejournal"] = "Invia a InsaneJournal"; $a->strings["InsaneJournal Post Settings"] = "Impostazioni post InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Abilita il plugin di invio a InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Abilita il addon di invio a InsaneJournal"; $a->strings["InsaneJournal username"] = "Nome utente InsaneJournal"; $a->strings["InsaneJournal password"] = "Password InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Invia sempre a InsaneJournal"; diff --git a/ijpost/lang/nb-no/strings.php b/ijpost/lang/nb-no/strings.php index 2eaa62e3..4b616bcd 100644 --- a/ijpost/lang/nb-no/strings.php +++ b/ijpost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/pl/strings.php b/ijpost/lang/pl/strings.php index 5b6ec674..e3f18059 100644 --- a/ijpost/lang/pl/strings.php +++ b/ijpost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Opublikuj na Insanejournal"; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/pt-br/messages.po b/ijpost/lang/pt-br/messages.po index 40f4f6df..b3f799bd 100644 --- a/ijpost/lang/pt-br/messages.po +++ b/ijpost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "InsaneJournal Post Settings" msgstr "Configurações de publicação no InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "Habilitar plug-in para publicar no InsaneJournal" #: ijpost.php:77 diff --git a/ijpost/lang/pt-br/strings.php b/ijpost/lang/pt-br/strings.php index b48f4dec..fbc1f284 100644 --- a/ijpost/lang/pt-br/strings.php +++ b/ijpost/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to Insanejournal"] = "Publicar no Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Configurações de publicação no InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilitar plug-in para publicar no InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilitar plug-in para publicar no InsaneJournal"; $a->strings["InsaneJournal username"] = "Nome de usuário no InsaneJournal"; $a->strings["InsaneJournal password"] = "Senha do InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publicar no InsaneJournal por padrão"; diff --git a/ijpost/lang/ro/messages.po b/ijpost/lang/ro/messages.po index 5743743a..c37bed7e 100644 --- a/ijpost/lang/ro/messages.po +++ b/ijpost/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "InsaneJournal Post Settings" msgstr "Configurări Postări Insaneournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "Activare Modul Postare InsaneJournal" #: ijpost.php:77 diff --git a/ijpost/lang/ro/strings.php b/ijpost/lang/ro/strings.php index a4233460..35d64ea6 100644 --- a/ijpost/lang/ro/strings.php +++ b/ijpost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Insanejournal"] = "Postare pe Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Configurări Postări Insaneournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Activare Modul Postare InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Activare Modul Postare InsaneJournal"; $a->strings["InsaneJournal username"] = "Utilizator InsaneJournal "; $a->strings["InsaneJournal password"] = "Parolă InsaneJournal "; $a->strings["Post to InsaneJournal by default"] = "Postați implicit pe InsaneJournal "; diff --git a/ijpost/lang/ru/strings.php b/ijpost/lang/ru/strings.php index 0109f8a6..dc869896 100644 --- a/ijpost/lang/ru/strings.php +++ b/ijpost/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = "Включить InsaneJournal плагин сообщений"; +$a->strings["Enable InsaneJournal Post Addon"] = "Включить InsaneJournal плагин сообщений"; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/zh-cn/strings.php b/ijpost/lang/zh-cn/strings.php index f2a04712..273451d7 100644 --- a/ijpost/lang/zh-cn/strings.php +++ b/ijpost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "转播到Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Insanejournal转播设置"; -$a->strings["Enable InsaneJournal Post Plugin"] = "使InsaneJournal转播插件可用"; +$a->strings["Enable InsaneJournal Post Addon"] = "使InsaneJournal转播插件可用"; $a->strings["InsaneJournal username"] = "InsaneJournal用户名"; $a->strings["InsaneJournal password"] = "InsaneJournal密码"; $a->strings["Post to InsaneJournal by default"] = "默认地转播到InsaneJournal"; diff --git a/impressum/README.md b/impressum/README.md index cf420ba1..963a085e 100644 --- a/impressum/README.md +++ b/impressum/README.md @@ -1,4 +1,4 @@ -Impressum Plugin for Friendica +Impressum Addon for Friendica ============================== * Author: Tobias Diekershoff @@ -7,7 +7,7 @@ Impressum Plugin for Friendica About ----- -This plugin adds an Impressum (contact) block to the /friendica page with +This addon adds an Impressum (contact) block to the /friendica page with informations about the page operator/owner and how to contact you in case of any questions. @@ -16,7 +16,7 @@ normal friendica postings.. Configuration ------------- -Simply fill in the fields in the impressium settings page in the plugins +Simply fill in the fields in the impressium settings page in the addons area of your admin panel. For email adresses the "@" symbol will be obfuscated in the source of the page to make in harder for harvesting tools. diff --git a/impressum/lang/de/messages.po b/impressum/lang/de/messages.po index 1a73058a..11d4a512 100644 --- a/impressum/lang/de/messages.po +++ b/impressum/lang/de/messages.po @@ -41,7 +41,7 @@ msgid "" "The impressum addon needs to be configured!
Please add at least the " "owner variable to your config file. For other variables please " "refer to the README file of the addon." -msgstr "Das Impressums-Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert." +msgstr "Das Impressums-Addon muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert." #: impressum.php:78 msgid "Settings updated." diff --git a/impressum/lang/de/strings.php b/impressum/lang/de/strings.php index 66acf097..0cf1a4ae 100644 --- a/impressum/lang/de/strings.php +++ b/impressum/lang/de/strings.php @@ -9,7 +9,7 @@ $a->strings["Impressum"] = "Impressum"; $a->strings["Site Owner"] = "Betreiber der Seite"; $a->strings["Email Address"] = "Email Adresse"; $a->strings["Postal Address"] = "Postalische Anschrift"; -$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert."; +$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Addon muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert."; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Submit"] = "Senden"; $a->strings["The page operators name."] = "Name des Server-Administrators"; diff --git a/impressum/lang/it/messages.po b/impressum/lang/it/messages.po index ae430ef4..5fafbbca 100644 --- a/impressum/lang/it/messages.po +++ b/impressum/lang/it/messages.po @@ -40,7 +40,7 @@ msgid "" "The impressum addon needs to be configured!
Please add at least the " "owner variable to your config file. For other variables please " "refer to the README file of the addon." -msgstr "Il plugin Colophon deve essere configurato!
Aggiungi almeno il Proprietario del sito." +msgstr "IladdonColophon deve essere configurato!
Aggiungi almeno il Proprietario del sito." #: impressum.php:78 msgid "Settings updated." diff --git a/impressum/lang/it/strings.php b/impressum/lang/it/strings.php index 25f3b1be..ce51610f 100644 --- a/impressum/lang/it/strings.php +++ b/impressum/lang/it/strings.php @@ -9,7 +9,7 @@ $a->strings["Impressum"] = "Colophon"; $a->strings["Site Owner"] = "Proprietario del sito"; $a->strings["Email Address"] = "Indirizzo email"; $a->strings["Postal Address"] = "Indirizzo"; -$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Il plugin Colophon deve essere configurato!
Aggiungi almeno il Proprietario del sito."; +$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Il addon Colophon deve essere configurato!
Aggiungi almeno il Proprietario del sito."; $a->strings["Settings updated."] = "Impostazioni aggiornate."; $a->strings["Submit"] = "Invia"; $a->strings["The page operators name."] = "Nome del gestore della pagina."; diff --git a/jappixmini/README b/jappixmini/README index f21649be..0343d060 100644 --- a/jappixmini/README +++ b/jappixmini/README @@ -1,10 +1,10 @@ -Jappix Mini Plugin +Jappix Mini Addon ================== This quick-and-dirty addon allows you to add a Jabber-based, Facebook-like chat to Friendica. It uses Jappix Mini. -It is necessary to use a BOSH host - so to use this plugin, each users need to +It is necessary to use a BOSH host - so to use this addon, each users need to know the address of a BOSH host that works with his account. The BOSH server of the Jappix project (https://bind.jappix.com/) is not locked to a specific XMPP provider, but keep in mind that only personal usage is approved according to diff --git a/jappixmini/jappix/js/adhoc.js b/jappixmini/jappix/js/adhoc.js index d4e3bf4c..499d709f 100644 --- a/jappixmini/jappix/js/adhoc.js +++ b/jappixmini/jappix/js/adhoc.js @@ -78,7 +78,7 @@ function serverAdHoc(server) { dataForm(server, 'command', '', '', 'adhoc'); } -// Plugin launcher +// Addon launcher function launchAdHoc() { // Click event $('#adhoc .bottom .finish').click(closeAdHoc); diff --git a/jappixmini/jappix/js/anonymous.js b/jappixmini/jappix/js/anonymous.js index 88eaa7dc..af4ecb59 100644 --- a/jappixmini/jappix/js/anonymous.js +++ b/jappixmini/jappix/js/anonymous.js @@ -110,7 +110,7 @@ function anonymousLogin(server) { } } -// Plugin launcher +// Addon launcher function launchAnonymous() { logThis('Anonymous mode detected, connecting...', 3); @@ -127,5 +127,5 @@ function launchAnonymous() { anonymousLogin(HOST_ANONYMOUS); } -// Launch this plugin! +// Launch this addon! $(document).ready(launchAnonymous); diff --git a/jappixmini/jappix/js/archives.js b/jappixmini/jappix/js/archives.js index 387a379f..e6a08029 100644 --- a/jappixmini/jappix/js/archives.js +++ b/jappixmini/jappix/js/archives.js @@ -393,7 +393,7 @@ function updateArchives() { getListArchives(xid, date); } -// Plugin launcher +// Addon launcher function launchArchives() { // Current date var current_date = explodeThis('T', getXMPPTime(), 0); diff --git a/jappixmini/jappix/js/connection.js b/jappixmini/jappix/js/connection.js index 85a718c5..afd1f6e8 100644 --- a/jappixmini/jappix/js/connection.js +++ b/jappixmini/jappix/js/connection.js @@ -489,7 +489,7 @@ function getEverything() { getStorage(NS_ROSTERNOTES); } -// Plugin launcher +// Addon launcher function launchConnection() { // Logouts when Jappix is closed $(window).bind('beforeunload', terminate); @@ -522,5 +522,5 @@ function launchConnection() { } } -// Launch this plugin! +// Launch this addon! $(document).ready(launchConnection); diff --git a/jappixmini/jappix/js/directory.js b/jappixmini/jappix/js/directory.js index ebe1a570..d1f69492 100644 --- a/jappixmini/jappix/js/directory.js +++ b/jappixmini/jappix/js/directory.js @@ -66,7 +66,7 @@ function startDirectory() { return false; } -// Plugin launcher +// Addon launcher function launchDirectory() { // Click event $('#directory .bottom .finish').click(closeDirectory); diff --git a/jappixmini/jappix/js/discovery.js b/jappixmini/jappix/js/discovery.js index 867037b2..f4bc0d42 100644 --- a/jappixmini/jappix/js/discovery.js +++ b/jappixmini/jappix/js/discovery.js @@ -148,7 +148,7 @@ function cleanDiscovery() { $('#discovery .wait, #discovery .disco-category').hide(); } -// Plugin launcher +// Addon launcher function launchDiscovery() { // Click event $('#discovery .bottom .finish').click(closeDiscovery); diff --git a/jappixmini/jappix/js/favorites.js b/jappixmini/jappix/js/favorites.js index 69a042e8..0b4f1cb0 100644 --- a/jappixmini/jappix/js/favorites.js +++ b/jappixmini/jappix/js/favorites.js @@ -473,7 +473,7 @@ function loadFavorites() { $('#favorites .fedit-head-select').html(favorites_popup); } -// Plugin launcher +// Addon launcher function launchFavorites() { var path = '#favorites .'; diff --git a/jappixmini/jappix/js/home.js b/jappixmini/jappix/js/home.js index 5322501d..fdaba56b 100644 --- a/jappixmini/jappix/js/home.js +++ b/jappixmini/jappix/js/home.js @@ -288,7 +288,7 @@ function registerForm() { return false; } -// Plugin launcher +// Addon launcher function launchHome() { // Define the vars var home = '#home '; @@ -367,5 +367,5 @@ function launchHome() { logThis('Welcome to Jappix! Happy coding in developer mode!'); } -// Launch this plugin! +// Launch this addon! $(document).ready(launchHome); diff --git a/jappixmini/jappix/js/inbox.js b/jappixmini/jappix/js/inbox.js index 9f54cb93..2fe32730 100644 --- a/jappixmini/jappix/js/inbox.js +++ b/jappixmini/jappix/js/inbox.js @@ -613,7 +613,7 @@ function handleInboxAttach(responseXML) { $('#inbox .wait').hide(); } -// Plugin launcher +// Addon launcher function launchInbox() { // Define the pats var inbox = '#inbox .'; diff --git a/jappixmini/jappix/js/integratebox.js b/jappixmini/jappix/js/integratebox.js index 214b3d72..6d33df13 100644 --- a/jappixmini/jappix/js/integratebox.js +++ b/jappixmini/jappix/js/integratebox.js @@ -316,13 +316,13 @@ function filterIntegrateBox(data) { return string; } -// Plugin launcher +// Addon launcher function launchIntegratebox() { // Click event $('#integratebox .bottom .finish.close').click(closeIntegrateBox); } -// Plugin keyup event +// Addon keyup event $(document).keyup(function(e) { // Previous item? if((exists('#integratebox .bottom .finish.previous:not(.disabled)')) && (e.keyCode == 37)) { diff --git a/jappixmini/jappix/js/interface.js b/jappixmini/jappix/js/interface.js index e4a0db52..5fe6593b 100644 --- a/jappixmini/jappix/js/interface.js +++ b/jappixmini/jappix/js/interface.js @@ -376,11 +376,11 @@ function inputFocus() { }); } -// Plugin launcher +// Addon launcher function launchInterface() { // Focus on the first visible input $(window).focus(inputFocus); } -// Launch this plugin! +// Launch this addon! $(document).ready(launchInterface); diff --git a/jappixmini/jappix/js/jquery.js b/jappixmini/jappix/js/jquery.js index a4f11458..7b0be75f 100644 --- a/jappixmini/jappix/js/jquery.js +++ b/jappixmini/jappix/js/jquery.js @@ -1403,7 +1403,7 @@ jQuery.fn.extend({ }); }, - // Based off of the plugin by Clint Helfers, with permission. + // Based off of the addon by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; diff --git a/jappixmini/jappix/js/jquery.placeholder.js b/jappixmini/jappix/js/jquery.placeholder.js index 834bda64..d9162f0f 100644 --- a/jappixmini/jappix/js/jquery.placeholder.js +++ b/jappixmini/jappix/js/jquery.placeholder.js @@ -64,7 +64,7 @@ }); - // plugin code + // addon code $.fn.placeholder = function(opts) { opts = $.extend({},$.placeholder.settings, opts); diff --git a/jappixmini/jappix/js/me.js b/jappixmini/jappix/js/me.js index 5720df34..bc303805 100644 --- a/jappixmini/jappix/js/me.js +++ b/jappixmini/jappix/js/me.js @@ -51,7 +51,7 @@ function closeMe() { return false; } -// Plugin launcher +// Addon launcher function launchMe() { // Click events $('#me .content a.go').click(function() { diff --git a/jappixmini/jappix/js/microblog.js b/jappixmini/jappix/js/microblog.js index ceff07ab..5d489081 100644 --- a/jappixmini/jappix/js/microblog.js +++ b/jappixmini/jappix/js/microblog.js @@ -1430,7 +1430,7 @@ function fromInfosMicroblog(xid, hash) { getMicroblog(xid, hash); } -// Plugin launcher +// Addon launcher function launchMicroblog() { // Keyboard event $('#channel .top input[name=microblog_body]').keyup(function(e) { diff --git a/jappixmini/jappix/js/mini.js b/jappixmini/jappix/js/mini.js index 0bfb8087..112fbb4c 100644 --- a/jappixmini/jappix/js/mini.js +++ b/jappixmini/jappix/js/mini.js @@ -1543,7 +1543,7 @@ function adaptRosterMini() { jQuery('#jappix_mini div.jm_roster div.jm_buddies').css('max-height', height); } -// Plugin launcher +// Addon launcher function launchMini(autoconnect, show_pane, domain, user, password) { // Save infos to reconnect MINI_DOMAIN = domain; diff --git a/jappixmini/jappix/js/mucadmin.js b/jappixmini/jappix/js/mucadmin.js index 3bee965b..ca2e89d1 100644 --- a/jappixmini/jappix/js/mucadmin.js +++ b/jappixmini/jappix/js/mucadmin.js @@ -361,7 +361,7 @@ function saveMucAdmin() { return closeMucAdmin(); } -// Plugin launcher +// Addon launcher function launchMucAdmin() { // Click events $('#mucadmin .bottom .finish').click(function() { diff --git a/jappixmini/jappix/js/music.js b/jappixmini/jappix/js/music.js index f367a2b6..af86a060 100644 --- a/jappixmini/jappix/js/music.js +++ b/jappixmini/jappix/js/music.js @@ -244,7 +244,7 @@ function addMusic(id, title, artist, source, duration, uri, mime, type) { return false; } -// Plugin launcher +// Addon launcher function launchMusic() { // When music search string submitted $('.music-content input').keyup(function(e) { diff --git a/jappixmini/jappix/js/notification.js b/jappixmini/jappix/js/notification.js index c0f6c12c..603d37ad 100644 --- a/jappixmini/jappix/js/notification.js +++ b/jappixmini/jappix/js/notification.js @@ -412,7 +412,7 @@ function adaptNotifications() { $('.notifications-content .tools-content-subitem').css('max-height', max_height); } -// Plugin launcher +// Addon launcher function launchNotifications() { // Adapt the notifications height adaptNotifications(); diff --git a/jappixmini/jappix/js/options.js b/jappixmini/jappix/js/options.js index 0463af4d..8f1ea190 100644 --- a/jappixmini/jappix/js/options.js +++ b/jappixmini/jappix/js/options.js @@ -534,7 +534,7 @@ function loadOptions() { $('#integratemedias').attr('checked', true); } -// Plugin launcher +// Addon launcher function launchOptions() { // Click events $('#options .tab a').click(function() { diff --git a/jappixmini/jappix/js/pep.js b/jappixmini/jappix/js/pep.js index 04f9f156..2a3ee1ac 100644 --- a/jappixmini/jappix/js/pep.js +++ b/jappixmini/jappix/js/pep.js @@ -652,7 +652,7 @@ function displayAllPEP(xid) { displayPEP(xid, 'geoloc'); } -// Plugin launcher +// Addon launcher function launchPEP() { // Apply empty values to the PEP database setDB('mood-value', 1, ''); diff --git a/jappixmini/jappix/js/presence.js b/jappixmini/jappix/js/presence.js index 0834209c..ef5c1c67 100644 --- a/jappixmini/jappix/js/presence.js +++ b/jappixmini/jappix/js/presence.js @@ -973,7 +973,7 @@ function getUserStatus() { return $('#presence-status').val(); } -// Plugin launcher +// Addon launcher function launchPresence() { // Click event for user presence show $('#my-infos .f-presence a.picker').click(function() { diff --git a/jappixmini/jappix/js/privacy.js b/jappixmini/jappix/js/privacy.js index 01675f7f..d9cd46b6 100644 --- a/jappixmini/jappix/js/privacy.js +++ b/jappixmini/jappix/js/privacy.js @@ -645,7 +645,7 @@ function enableFormPrivacy(rank) { $('#privacy .privacy-' + rank + ' input, #privacy .privacy-' + rank + ' select').removeAttr('disabled'); } -// Plugin launcher +// Addon launcher function launchPrivacy() { // Click events $('#privacy .bottom .finish').click(closePrivacy); diff --git a/jappixmini/jappix/js/roster.js b/jappixmini/jappix/js/roster.js index 99389a77..4dca501c 100644 --- a/jappixmini/jappix/js/roster.js +++ b/jappixmini/jappix/js/roster.js @@ -708,7 +708,7 @@ function getGateways() { // Define a global var for buddy list all buddies displayed var BLIST_ALL = false; -// Plugin launcher +// Addon launcher function launchRoster() { // Filtering tool var iFilter = $('#buddy-list .filter input'); diff --git a/jappixmini/jappix/js/rosterx.js b/jappixmini/jappix/js/rosterx.js index 30f0854c..5cfe1180 100644 --- a/jappixmini/jappix/js/rosterx.js +++ b/jappixmini/jappix/js/rosterx.js @@ -166,7 +166,7 @@ function saveRosterX() { closeRosterX(); } -// Plugin launcher +// Addon launcher function launchRosterX() { // Click events $('#rosterx .bottom .finish').click(function() { diff --git a/jappixmini/jappix/js/talk.js b/jappixmini/jappix/js/talk.js index 7e1320e9..529de6c7 100644 --- a/jappixmini/jappix/js/talk.js +++ b/jappixmini/jappix/js/talk.js @@ -13,7 +13,7 @@ Last revision: 06/05/11 // Creates the talkpage events function eventsTalkPage() { - // Launch all associated plugins + // Launch all associated addons launchMicroblog(); launchRoster(); launchPresence(); diff --git a/jappixmini/jappix/js/userinfos.js b/jappixmini/jappix/js/userinfos.js index 35a58fe5..885f3163 100644 --- a/jappixmini/jappix/js/userinfos.js +++ b/jappixmini/jappix/js/userinfos.js @@ -406,7 +406,7 @@ function getUserInfos(hash, xid, nick, type) { presenceFunnel(xid, hash); } -// Plugin launcher +// Addon launcher function launchUserInfos() { // Click events $('#userinfos .tab a').click(function() { diff --git a/jappixmini/jappix/js/vcard.js b/jappixmini/jappix/js/vcard.js index 6e0fa09a..f61ca990 100644 --- a/jappixmini/jappix/js/vcard.js +++ b/jappixmini/jappix/js/vcard.js @@ -566,7 +566,7 @@ function sendVCard() { return false; } -// Plugin launcher +// Addon launcher function launchVCard() { // Focus on the first input $(document).oneTime(10, function() { diff --git a/jappixmini/jappix/js/welcome.js b/jappixmini/jappix/js/welcome.js index 4faf5bd1..ff193302 100644 --- a/jappixmini/jappix/js/welcome.js +++ b/jappixmini/jappix/js/welcome.js @@ -269,7 +269,7 @@ function nextWelcome() { return false; } -// Plugin launcher +// Addon launcher function launchWelcome() { // Click events $('#welcome .tab a').click(function() { diff --git a/jappixmini/jappix/lang/ar/LC_MESSAGES/main.po b/jappixmini/jappix/lang/ar/LC_MESSAGES/main.po index c8cc999b..697e7f2f 100644 --- a/jappixmini/jappix/lang/ar/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/ar/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/bg/LC_MESSAGES/main.po b/jappixmini/jappix/lang/bg/LC_MESSAGES/main.po index 5d7e06d3..6f4a7339 100644 --- a/jappixmini/jappix/lang/bg/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/bg/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "Jappix трябва да може да вписва данни в таз msgid "The folder is writable, you can continue!" msgstr "В тази папка/директория може да се записва, можете да продължите!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jappix ви позволява да управлявате и менажирате вашата конфигурация, да инсталирате нови разширения (плъгини) или да потърсите за обновления на програмата (ъпдейти). Затова трябва да създадете администраторска потребителска сметка (акаунт), за да можете да имате достъп до мениджъра с настройките на Jappix." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/cs/LC_MESSAGES/main.po b/jappixmini/jappix/lang/cs/LC_MESSAGES/main.po index a1a62722..9063b52d 100644 --- a/jappixmini/jappix/lang/cs/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/cs/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix musí mít oprávnění zapisovat do tohoto adresáře pro vytvo msgid "The folder is writable, you can continue!" msgstr "Do adresáře je povolen zápis, můžete pokračovat!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix vám úmožňuje spravovat vaší konfiguraci, instalovat pluginy nebo vyhledávat aktualizace. Proto je nutné si vytvořit účet administrátora ke vstupu do Správy Jappix." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix vám úmožňuje spravovat vaší konfiguraci, instalovat addony nebo vyhledávat aktualizace. Proto je nutné si vytvořit účet administrátora ke vstupu do Správy Jappix." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Když je Jappix nainstalován, stačí kliknout na odkaz Správce na výchozí stránce pro vstup do Správy. " diff --git a/jappixmini/jappix/lang/de/LC_MESSAGES/main.po b/jappixmini/jappix/lang/de/LC_MESSAGES/main.po index 75dba8f4..352e9674 100644 --- a/jappixmini/jappix/lang/de/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/de/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix muss Schreibberechtigungen in diesem Ordner haben um sein Unteror msgid "The folder is writable, you can continue!" msgstr "Der Ordner ist schreibbar, du kannst weitermachen!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix bietet dir die Möglichkeit, deine Konfiguration einzustellen, neue Plugins zu installieren oder nach Updates zu suchen. Deshalb musst Du ein Admin-Account anlegen um auf die Verwaltung zugreifen zu können." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix bietet dir die Möglichkeit, deine Konfiguration einzustellen, neue Addons zu installieren oder nach Updates zu suchen. Deshalb musst Du ein Admin-Account anlegen um auf die Verwaltung zugreifen zu können." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Wenn Jappix installiert ist, klicke einfach auf den Manager-Link auf der Homepage um darauf zuzugreifen." diff --git a/jappixmini/jappix/lang/en/LC_MESSAGES/main.pot b/jappixmini/jappix/lang/en/LC_MESSAGES/main.pot index 42b5b2c0..108bb18a 100644 --- a/jappixmini/jappix/lang/en/LC_MESSAGES/main.pot +++ b/jappixmini/jappix/lang/en/LC_MESSAGES/main.pot @@ -1132,7 +1132,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/eo/LC_MESSAGES/main.po b/jappixmini/jappix/lang/eo/LC_MESSAGES/main.po index 346aa5e4..8926bdae 100644 --- a/jappixmini/jappix/lang/eo/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/eo/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "Jappix devas esti kapabla skribi en ĉi tiu teko krei ĝia sub-adresaroj msgid "The folder is writable, you can continue!" msgstr "La dosierujo estas skribebla, vi povas daŭri!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jappix ebligas vin administri vian konfiguron, instali novajn kromaĵojn aŭ serĉi ĝisdatigojn. Tio estas kial vi devas krei administrantan konton por aliri la manaĝeron." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/es/LC_MESSAGES/main.po b/jappixmini/jappix/lang/es/LC_MESSAGES/main.po index b9a57141..9716a39e 100644 --- a/jappixmini/jappix/lang/es/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/es/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix debe ser capaz de escribir en esta carpeta para crear sus sub-dir msgid "The folder is writable, you can continue!" msgstr "La carpeta es escribible, ¡puedes continuar!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix te ofrece la posibilidad de gestionar tu configuración, instalar nuevos plugins y buscar actualizaciones. Por eso tienes que crear una cuenta de administración para acceder al gerente." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix te ofrece la posibilidad de gestionar tu configuración, instalar nuevos addons y buscar actualizaciones. Por eso tienes que crear una cuenta de administración para acceder al gerente." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Cuando Jappix esté instalado, basta con hacer clic en el enlace de gerente en la página principal para acceder." diff --git a/jappixmini/jappix/lang/et/LC_MESSAGES/main.po b/jappixmini/jappix/lang/et/LC_MESSAGES/main.po index f91ace4c..b48715a9 100644 --- a/jappixmini/jappix/lang/et/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/et/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappixil peab olema siia ja alamkataloogidesse kirjutusõigus. Kui see p msgid "The folder is writable, you can continue!" msgstr "Kataloogil on kirjutusõigused, Te võite jätkata!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix pakub võimalust hallata oma konfiguratsiooni, installida uusi pluginaid või otsida uuendusi. Sellepärast peate te tegema administraatori konto, et haldus lehele ligi pääseda." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix pakub võimalust hallata oma konfiguratsiooni, installida uusi addonaid või otsida uuendusi. Sellepärast peate te tegema administraatori konto, et haldus lehele ligi pääseda." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Kui Jappix on paigaldatud siis lihtsalt vajutage Haldaja lingile avalehel, et sellele ligi pääseda." diff --git a/jappixmini/jappix/lang/fa/LC_MESSAGES/main.po b/jappixmini/jappix/lang/fa/LC_MESSAGES/main.po index b6771020..ed3782ca 100644 --- a/jappixmini/jappix/lang/fa/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/fa/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "پوشه قابل ویرایش است. می‌توانید ادامه دهید!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/fr/LC_MESSAGES/main.po b/jappixmini/jappix/lang/fr/LC_MESSAGES/main.po index 38cf556b..9ae141d3 100644 --- a/jappixmini/jappix/lang/fr/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/fr/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "Jappix doit pouvoir écrire dans ce dossier pour y créer ses sous-répe msgid "The folder is writable, you can continue!" msgstr "Le dossier peut être écrit, vous pouvez continuer !" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jappix vous offre la possibilité de gérer votre configuration, installer des nouveaux modules et rechercher des mises à jour. C'est pourquoi vous devez créer un compte administrateur pour accéder au gestionnaire." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/hu/LC_MESSAGES/main.po b/jappixmini/jappix/lang/hu/LC_MESSAGES/main.po index 89e51577..1ab5c959 100644 --- a/jappixmini/jappix/lang/hu/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/hu/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "A Jappix-nak tudnia kell írni ebbe a mappába, hogy létre tudjon hozni msgid "The folder is writable, you can continue!" msgstr "A mappa írható, már folytathatod!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jappix felajánlja a lehetőséget, hogy menedzseld a konfigurációd, telepíts új kiegészítőket, vagy keress frissítéseket. Ezért kell létrehoznod egy adminisztrátori fiókot, hogy hozzáférj ezekhez a beállításokhoz." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/id/LC_MESSAGES/main.po b/jappixmini/jappix/lang/id/LC_MESSAGES/main.po index 5c7f5ae5..189a3c94 100644 --- a/jappixmini/jappix/lang/id/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/id/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix harus mampu menulis dalam folder ini untuk membuat sub-direktori. msgid "The folder is writable, you can continue!" msgstr "Folder dapat ditulis, anda dapat melanjutkan!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix menawarkan kemungkinan untuk mengelola konfigurasi anda, menginstal plugin baru atau mencari update. Itulah mengapa anda harus membuat account administrator untuk mengakses manajer." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix menawarkan kemungkinan untuk mengelola konfigurasi anda, menginstal addon baru atau mencari update. Itulah mengapa anda harus membuat account administrator untuk mengakses manajer." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Ketika Jappix akan diinstal, cukup klik pada link manajer di halaman rumah untuk mengaksesnya." diff --git a/jappixmini/jappix/lang/it/LC_MESSAGES/main.po b/jappixmini/jappix/lang/it/LC_MESSAGES/main.po index 092cc8fb..a1726a54 100644 --- a/jappixmini/jappix/lang/it/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/it/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix deve avere le autorizzazioni adeguate per scrivere in questa cart msgid "The folder is writable, you can continue!" msgstr "La directory è scrivibile, puoi continuare!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix ti offre la possibilità controllare la configurazione di Jappix, installare nuove plugins e cercare aggiornamenti. Ecco perchè devi creare un account amministrativo per accedere all'Amministrazione." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix ti offre la possibilità controllare la configurazione di Jappix, installare nuove addons e cercare aggiornamenti. Ecco perchè devi creare un account amministrativo per accedere all'Amministrazione." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Quando Jappix sarà installato, semplicemente clicca sul link “Amministrazione” nella home page per accedervi." diff --git a/jappixmini/jappix/lang/ja/LC_MESSAGES/main.po b/jappixmini/jappix/lang/ja/LC_MESSAGES/main.po index bc1751f4..b296135f 100644 --- a/jappixmini/jappix/lang/ja/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/ja/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "サブフォルダを書き込む権限が必要です。%1sに権限を msgid "The folder is writable, you can continue!" msgstr "フォルダは書き込み可能です。続けてください。" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jappixは、設定ファイル、新しいプラグイン、アップデートを提供できます。管理者権限でのアクセスが必要です。" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/nl/LC_MESSAGES/main.po b/jappixmini/jappix/lang/nl/LC_MESSAGES/main.po index e85c315c..9ce3a856 100644 --- a/jappixmini/jappix/lang/nl/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/nl/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/oc/LC_MESSAGES/main.po b/jappixmini/jappix/lang/oc/LC_MESSAGES/main.po index 1f2d6287..f74d4361 100644 --- a/jappixmini/jappix/lang/oc/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/oc/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/pl/LC_MESSAGES/main.po b/jappixmini/jappix/lang/pl/LC_MESSAGES/main.po index 58bdb62f..f0fa0316 100644 --- a/jappixmini/jappix/lang/pl/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/pl/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix musi mieć możliwość zapisu w tym folderze aby móc stworzyć msgid "The folder is writable, you can continue!" msgstr "Można zapisywać w folderze, możesz kontynuować!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix oferuje Ci możliwość zarządzania konfiguracją, instalacji nowych pluginów lub sprawdzania aktualizacji. To właśnie dlatego musisz stworzyć konto administratora." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix oferuje Ci możliwość zarządzania konfiguracją, instalacji nowych addonów lub sprawdzania aktualizacji. To właśnie dlatego musisz stworzyć konto administratora." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Kiedy Jappix będzie już zainstalowany, kliknij w link Menedżer na stronie głównej." diff --git a/jappixmini/jappix/lang/pt-BR/LC_MESSAGES/main.po b/jappixmini/jappix/lang/pt-BR/LC_MESSAGES/main.po index deef5ba8..3541dda4 100644 --- a/jappixmini/jappix/lang/pt-BR/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/pt-BR/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix precisa permissão para escrita nessa pasta. Se não, você preci msgid "The folder is writable, you can continue!" msgstr "Esta pasta possui permissão de escrita, pode continuar!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix oferece a você a possibilidade de gerenciar suas configurações, instalar novos plugins ou procurar por atulizações. Por isso você deve criar um usuário de administração para acessar o gerenciador." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix oferece a você a possibilidade de gerenciar suas configurações, instalar novos addons ou procurar por atulizações. Por isso você deve criar um usuário de administração para acessar o gerenciador." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Quando o Jappix for instalado, clique no link do gerenciador, em sua página inicial, para acessá-lo." diff --git a/jappixmini/jappix/lang/ru/LC_MESSAGES/main.po b/jappixmini/jappix/lang/ru/LC_MESSAGES/main.po index 88b4a2d0..8ca7f650 100644 --- a/jappixmini/jappix/lang/ru/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/ru/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "Jappix должен иметь возможность записыват msgid "The folder is writable, you can continue!" msgstr "Папка доступна для записи, можно продолжать!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "Jabbix позволяет вам управлять конфигурацией, устанавливать новые плагины или проверять обновления. Для доступа к панели управления требуется создать учетную запись администратора." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/sk/LC_MESSAGES/main.po b/jappixmini/jappix/lang/sk/LC_MESSAGES/main.po index d9c24be2..846e639b 100644 --- a/jappixmini/jappix/lang/sk/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/sk/LC_MESSAGES/main.po @@ -1038,8 +1038,8 @@ msgstr "Jappix musí mať právo zapisovať v tejto zložke pre vytvorenie svoji msgid "The folder is writable, you can continue!" msgstr "Do zložky je možné zapisovať, môžete pokračovať!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." -msgstr "Jappix vám ponúka možnosť spravovať vaše konfiguráciu, inštalovať nové pluginy alebo vyhľadať aktualizácie. Preto si musíte vytvoriť administračný účet pre prístup k Správcovi." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." +msgstr "Jappix vám ponúka možnosť spravovať vaše konfiguráciu, inštalovať nové addony alebo vyhľadať aktualizácie. Preto si musíte vytvoriť administračný účet pre prístup k Správcovi." msgid "When Jappix will be installed, just click on the manager link on the home page to access it." msgstr "Po nainštalovaní Jappix, stačí kliknúť na odkaz Správca na domovskej stránke pre prístup." diff --git a/jappixmini/jappix/lang/sv/LC_MESSAGES/main.po b/jappixmini/jappix/lang/sv/LC_MESSAGES/main.po index d7910185..255b86f5 100644 --- a/jappixmini/jappix/lang/sv/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/sv/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "Mappen är skrivbar -- du kan nu fortsätta!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/uk/LC_MESSAGES/main.po b/jappixmini/jappix/lang/uk/LC_MESSAGES/main.po index e5a39e0b..79e8f2ba 100644 --- a/jappixmini/jappix/lang/uk/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/uk/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/lang/zh/LC_MESSAGES/main.po b/jappixmini/jappix/lang/zh/LC_MESSAGES/main.po index 6ae04497..33c1f821 100644 --- a/jappixmini/jappix/lang/zh/LC_MESSAGES/main.po +++ b/jappixmini/jappix/lang/zh/LC_MESSAGES/main.po @@ -1038,7 +1038,7 @@ msgstr "" msgid "The folder is writable, you can continue!" msgstr "資料夾可寫入,你可以繼續!" -msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager." +msgid "Jappix offers you the possibility to manage your configuration, install new addons or search for updates. That's why you must create an administrator account to access the manager." msgstr "" msgid "When Jappix will be installed, just click on the manager link on the home page to access it." diff --git a/jappixmini/jappix/php/install.php b/jappixmini/jappix/php/install.php index ae0ff70d..9cce2713 100644 --- a/jappixmini/jappix/php/install.php +++ b/jappixmini/jappix/php/install.php @@ -163,7 +163,7 @@ else else if($step == 3) { ?> -

+

diff --git a/jappixmini/lang/it/messages.po b/jappixmini/lang/it/messages.po index 7e4eb1f6..5633930f 100644 --- a/jappixmini/lang/it/messages.po +++ b/jappixmini/lang/it/messages.po @@ -21,11 +21,11 @@ msgstr "" #: jappixmini.php:266 msgid "Jappix Mini addon settings" -msgstr "Impostazioni plugin Jappix Mini" +msgstr "ImpostazioniaddonJappix Mini" #: jappixmini.php:268 msgid "Activate addon" -msgstr "Abilita plugin" +msgstr "Abilita addon" #: jappixmini.php:271 msgid "" diff --git a/jappixmini/lang/it/strings.php b/jappixmini/lang/it/strings.php index 51f6b794..892e1c72 100644 --- a/jappixmini/lang/it/strings.php +++ b/jappixmini/lang/it/strings.php @@ -5,8 +5,8 @@ function string_plural_select_it($n){ return ($n != 1);; }} ; -$a->strings["Jappix Mini addon settings"] = "Impostazioni plugin Jappix Mini"; -$a->strings["Activate addon"] = "Abilita plugin"; +$a->strings["Jappix Mini addon settings"] = "Impostazioni addon Jappix Mini"; +$a->strings["Activate addon"] = "Abilita addon"; $a->strings["Do not insert the Jappixmini Chat-Widget into the webinterface"] = "Non inserire Jappixmini nell'intrerfaccia web"; $a->strings["Jabber username"] = "Nome utente Jabber"; $a->strings["Jabber server"] = "Server Jabber"; diff --git a/js_upload/file-uploader/readme.md b/js_upload/file-uploader/readme.md index c107bf12..4c30eaa6 100644 --- a/js_upload/file-uploader/readme.md +++ b/js_upload/file-uploader/readme.md @@ -1,6 +1,6 @@ [donation_link]: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=3PMY37SL9L888&lc=US&item_name=JavaScript%20file%20uploader¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted -This plugin uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+, +This addon uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+, Chrome and falls back to hidden iframe based upload in other browsers, providing good user experience everywhere. @@ -17,13 +17,13 @@ providing good user experience everywhere. * tested in IE7,8; Firefox 3,3.6,4; Safari4,5; Chrome; Opera10.60; ### License ### -This plugin is open sourced under GNU GPL 2 or later. +This addon is open sourced under GNU GPL 2 or later. If this license doesn't suit you mail me at andrew (at) valums.com. -Please [donate][donation_link] if you are willing to support the further development of file upload plugin. +Please [donate][donation_link] if you are willing to support the further development of file upload addon. ### Known Issues ### -Plugin breaks back button functionality in Opera. +Addon breaks back button functionality in Opera. ### Getting started ### The fileuploader.js contains two classes that are meant to be used directly. diff --git a/krynn/lang/C/messages.po b/krynn/lang/C/messages.po index 0831b915..63255c9f 100644 --- a/krynn/lang/C/messages.po +++ b/krynn/lang/C/messages.po @@ -22,7 +22,7 @@ msgid "Krynn Settings" msgstr "" #: krynn.php:152 -msgid "Enable Krynn Plugin" +msgid "Enable Krynn Addon" msgstr "" #: krynn.php:158 diff --git a/krynn/lang/ca/strings.php b/krynn/lang/ca/strings.php index ec7bf803..d5e09e7e 100644 --- a/krynn/lang/ca/strings.php +++ b/krynn/lang/ca/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = "Ajustos de Krynn"; -$a->strings["Enable Krynn Plugin"] = "Activa Plugin de Krynn"; +$a->strings["Enable Krynn Addon"] = "Activa Addon de Krynn"; $a->strings["Submit"] = "Enviar"; diff --git a/krynn/lang/cs/messages.po b/krynn/lang/cs/messages.po index 69e803e3..abb6d515 100644 --- a/krynn/lang/cs/messages.po +++ b/krynn/lang/cs/messages.po @@ -24,8 +24,8 @@ msgid "Krynn Settings" msgstr "Krynn Nastavení" #: krynn.php:152 -msgid "Enable Krynn Plugin" -msgstr "Povolit Krynn plugin" +msgid "Enable Krynn Addon" +msgstr "Povolit Krynn addon" #: krynn.php:158 msgid "Submit" diff --git a/krynn/lang/cs/strings.php b/krynn/lang/cs/strings.php index e725ffc3..76de5f7f 100644 --- a/krynn/lang/cs/strings.php +++ b/krynn/lang/cs/strings.php @@ -6,5 +6,5 @@ function string_plural_select_cs($n){ }} ; $a->strings["Krynn Settings"] = "Krynn Nastavení"; -$a->strings["Enable Krynn Plugin"] = "Povolit Krynn plugin"; +$a->strings["Enable Krynn Addon"] = "Povolit Krynn addon"; $a->strings["Submit"] = "Odeslat"; diff --git a/krynn/lang/de/messages.po b/krynn/lang/de/messages.po index 12dceb31..7d3e6bbd 100644 --- a/krynn/lang/de/messages.po +++ b/krynn/lang/de/messages.po @@ -25,8 +25,8 @@ msgid "Krynn Settings" msgstr "Planeten Einstellungen" #: Krynn.php:152 -msgid "Enable Krynn Plugin" -msgstr "Planeten-Plugin aktivieren" +msgid "Enable Krynn Addon" +msgstr "Planeten-Addon aktivieren" #: Krynn.php:158 msgid "Submit" diff --git a/krynn/lang/de/strings.php b/krynn/lang/de/strings.php index 74b5e9f9..d8a54083 100644 --- a/krynn/lang/de/strings.php +++ b/krynn/lang/de/strings.php @@ -6,5 +6,5 @@ function string_plural_select_de($n){ }} ; $a->strings["Krynn Settings"] = "Krynn Einstellungen"; -$a->strings["Enable Krynn Plugin"] = "Krynn-Plugin aktivieren"; +$a->strings["Enable Krynn Addon"] = "Krynn-Addon aktivieren"; $a->strings["Submit"] = "Senden"; diff --git a/krynn/lang/eo/strings.php b/krynn/lang/eo/strings.php index 8b8dd24a..eae02345 100644 --- a/krynn/lang/eo/strings.php +++ b/krynn/lang/eo/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = "Agordo pri Krynn"; -$a->strings["Enable Krynn Plugin"] = "Ŝalti la Krynn kromprogamon"; +$a->strings["Enable Krynn Addon"] = "Ŝalti la Krynn kromprogamon"; $a->strings["Submit"] = "Sendi"; diff --git a/krynn/lang/es/messages.po b/krynn/lang/es/messages.po index e2015a37..a8690ef1 100644 --- a/krynn/lang/es/messages.po +++ b/krynn/lang/es/messages.po @@ -24,8 +24,8 @@ msgid "Krynn Settings" msgstr "Ajustes de Krynn" #: krynn.php:152 -msgid "Enable Krynn Plugin" -msgstr "Habilitar Plugin de Krynn" +msgid "Enable Krynn Addon" +msgstr "Habilitar Addon de Krynn" #: krynn.php:158 msgid "Submit" diff --git a/krynn/lang/es/strings.php b/krynn/lang/es/strings.php index 77df4d4e..6bb39518 100644 --- a/krynn/lang/es/strings.php +++ b/krynn/lang/es/strings.php @@ -6,5 +6,5 @@ function string_plural_select_es($n){ }} ; $a->strings["Krynn Settings"] = "Ajustes de Krynn"; -$a->strings["Enable Krynn Plugin"] = "Habilitar Plugin de Krynn"; +$a->strings["Enable Krynn Addon"] = "Habilitar Addon de Krynn"; $a->strings["Submit"] = "Enviar"; diff --git a/krynn/lang/fr/strings.php b/krynn/lang/fr/strings.php index 601f9502..bcd3430b 100644 --- a/krynn/lang/fr/strings.php +++ b/krynn/lang/fr/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = "Réglages des Krynn"; -$a->strings["Enable Krynn Plugin"] = "Activer Krynn"; +$a->strings["Enable Krynn Addon"] = "Activer Krynn"; $a->strings["Submit"] = "Envoyer"; diff --git a/krynn/lang/is/strings.php b/krynn/lang/is/strings.php index 976a601e..11fd5b57 100644 --- a/krynn/lang/is/strings.php +++ b/krynn/lang/is/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = ""; -$a->strings["Enable Krynn Plugin"] = ""; +$a->strings["Enable Krynn Addon"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/krynn/lang/it/messages.po b/krynn/lang/it/messages.po index 507fac54..4d70b47b 100644 --- a/krynn/lang/it/messages.po +++ b/krynn/lang/it/messages.po @@ -24,8 +24,8 @@ msgid "Krynn Settings" msgstr "Impostazioni Krynn" #: krynn.php:152 -msgid "Enable Krynn Plugin" -msgstr "Abilita plugin Krynn" +msgid "Enable Krynn Addon" +msgstr "AbilitaaddonKrynn" #: krynn.php:158 msgid "Submit" diff --git a/krynn/lang/it/strings.php b/krynn/lang/it/strings.php index 7c9f5f11..753fe7a7 100644 --- a/krynn/lang/it/strings.php +++ b/krynn/lang/it/strings.php @@ -6,5 +6,5 @@ function string_plural_select_it($n){ }} ; $a->strings["Krynn Settings"] = "Impostazioni Krynn"; -$a->strings["Enable Krynn Plugin"] = "Abilita plugin Krynn"; +$a->strings["Enable Krynn Addon"] = "Abilita addon Krynn"; $a->strings["Submit"] = "Invia"; diff --git a/krynn/lang/nb-no/strings.php b/krynn/lang/nb-no/strings.php index 06ad32cb..29bffb9a 100644 --- a/krynn/lang/nb-no/strings.php +++ b/krynn/lang/nb-no/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = ""; -$a->strings["Enable Krynn Plugin"] = ""; +$a->strings["Enable Krynn Addon"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/krynn/lang/pl/strings.php b/krynn/lang/pl/strings.php index 239001b1..d77ed6c1 100644 --- a/krynn/lang/pl/strings.php +++ b/krynn/lang/pl/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = ""; -$a->strings["Enable Krynn Plugin"] = ""; +$a->strings["Enable Krynn Addon"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/krynn/lang/pt-br/strings.php b/krynn/lang/pt-br/strings.php index a3b2d663..0b882a71 100644 --- a/krynn/lang/pt-br/strings.php +++ b/krynn/lang/pt-br/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = "Configuração dos Krynn"; -$a->strings["Enable Krynn Plugin"] = "Habilita configuração dos Krynn"; +$a->strings["Enable Krynn Addon"] = "Habilita configuração dos Krynn"; $a->strings["Submit"] = "Enviar"; diff --git a/krynn/lang/ro/messages.po b/krynn/lang/ro/messages.po index 2e629e1c..8f945315 100644 --- a/krynn/lang/ro/messages.po +++ b/krynn/lang/ro/messages.po @@ -24,7 +24,7 @@ msgid "Krynn Settings" msgstr "Configurări Krynn" #: krynn.php:152 -msgid "Enable Krynn Plugin" +msgid "Enable Krynn Addon" msgstr "Activare Modul Krynn" #: krynn.php:158 diff --git a/krynn/lang/ro/strings.php b/krynn/lang/ro/strings.php index 88a84ee8..f6c6f53d 100644 --- a/krynn/lang/ro/strings.php +++ b/krynn/lang/ro/strings.php @@ -6,5 +6,5 @@ function string_plural_select_ro($n){ }} ; $a->strings["Krynn Settings"] = "Configurări Krynn"; -$a->strings["Enable Krynn Plugin"] = "Activare Modul Krynn"; +$a->strings["Enable Krynn Addon"] = "Activare Modul Krynn"; $a->strings["Submit"] = "Trimite"; diff --git a/krynn/lang/ru/strings.php b/krynn/lang/ru/strings.php index 8fd1069b..88ba6719 100644 --- a/krynn/lang/ru/strings.php +++ b/krynn/lang/ru/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = ""; -$a->strings["Enable Krynn Plugin"] = ""; +$a->strings["Enable Krynn Addon"] = ""; $a->strings["Submit"] = "Подтвердить"; diff --git a/krynn/lang/zh-cn/strings.php b/krynn/lang/zh-cn/strings.php index dcbfbeb7..5564f1f4 100644 --- a/krynn/lang/zh-cn/strings.php +++ b/krynn/lang/zh-cn/strings.php @@ -1,5 +1,5 @@ strings["Krynn Settings"] = "行星设置"; -$a->strings["Enable Krynn Plugin"] = "使行星插件可用"; +$a->strings["Enable Krynn Addon"] = "使行星插件可用"; $a->strings["Submit"] = "提交"; diff --git a/langfilter/lang/it/messages.po b/langfilter/lang/it/messages.po index 6eded71f..e446717a 100644 --- a/langfilter/lang/it/messages.po +++ b/langfilter/lang/it/messages.po @@ -30,7 +30,7 @@ msgid "" "match any language spoken by you (see below) the posting will be collapsed. " "Remember detecting the language is not perfect, especially with short " "postings." -msgstr "Questo plugin prova ad identificare la lingua usata in un messaggio. Se questa non corrisponde a una delle lingue da te parlata (vedi sotto), il messaggio verrà nascosto. Ricorda che la rilevazione della lingua non è perfetta, specie con i messaggi corti." +msgstr "Questo addon prova ad identificare la lingua usata in un messaggio. Se questa non corrisponde a una delle lingue da te parlata (vedi sotto), il messaggio verrà nascosto. Ricorda che la rilevazione della lingua non è perfetta, specie con i messaggi corti." #: langfilter.php:46 msgid "Use the language filter" diff --git a/langfilter/lang/it/strings.php b/langfilter/lang/it/strings.php index ecb7b8d3..b94ab812 100644 --- a/langfilter/lang/it/strings.php +++ b/langfilter/lang/it/strings.php @@ -6,7 +6,7 @@ function string_plural_select_it($n){ }} ; $a->strings["Language Filter"] = "Filtro Lingua"; -$a->strings["This addon tries to identify the language of a postings. If it does not match any language spoken by you (see below) the posting will be collapsed. Remember detecting the language is not perfect, especially with short postings."] = "Questo plugin prova ad identificare la lingua usata in un messaggio. Se questa non corrisponde a una delle lingue da te parlata (vedi sotto), il messaggio verrà nascosto. Ricorda che la rilevazione della lingua non è perfetta, specie con i messaggi corti."; +$a->strings["This addon tries to identify the language of a postings. If it does not match any language spoken by you (see below) the posting will be collapsed. Remember detecting the language is not perfect, especially with short postings."] = "Questo addon prova ad identificare la lingua usata in un messaggio. Se questa non corrisponde a una delle lingue da te parlata (vedi sotto), il messaggio verrà nascosto. Ricorda che la rilevazione della lingua non è perfetta, specie con i messaggi corti."; $a->strings["Use the language filter"] = "Usa il filtro lingua"; $a->strings["I speak"] = "Parlo"; $a->strings["List of abbreviations (iso2 codes) for languages you speak, comma separated. For example \"de,it\"."] = "Lista di abbreviazioni (codici iso2) per le lingue che parli, separate da virgola. Per esempio \"it,de\""; diff --git a/libertree/lang/C/messages.po b/libertree/lang/C/messages.po index fa31c882..ec61f847 100644 --- a/libertree/lang/C/messages.po +++ b/libertree/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "libertree Post Settings" msgstr "" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" +msgid "Enable Libertree Post Addon" msgstr "" #: libertree.php:74 diff --git a/libertree/lang/ca/strings.php b/libertree/lang/ca/strings.php index 28c6b31a..02c7d22c 100644 --- a/libertree/lang/ca/strings.php +++ b/libertree/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = "Enviament a libertree"; $a->strings["libertree Post Settings"] = "Ajustos d'enviaments a libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Activa el plugin d'enviaments a libertree"; +$a->strings["Enable Libertree Post Addon"] = "Activa el addon d'enviaments a libertree"; $a->strings["Libertree API token"] = "Libertree API token"; $a->strings["Libertree site URL"] = "lloc URL libertree"; $a->strings["Post to Libertree by default"] = "Enviar a libertree per defecte"; diff --git a/libertree/lang/cs/messages.po b/libertree/lang/cs/messages.po index d9473ab0..b97b17ed 100644 --- a/libertree/lang/cs/messages.po +++ b/libertree/lang/cs/messages.po @@ -28,7 +28,7 @@ msgid "libertree Post Settings" msgstr "libertree nastavení příspěvků" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" +msgid "Enable Libertree Post Addon" msgstr "Povolit Libertree Post rozšíření" #: libertree.php:74 diff --git a/libertree/lang/cs/strings.php b/libertree/lang/cs/strings.php index 97618321..57ad0ff1 100644 --- a/libertree/lang/cs/strings.php +++ b/libertree/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to libertree"] = "Poslat na libertree"; $a->strings["libertree Post Settings"] = "libertree nastavení příspěvků"; -$a->strings["Enable Libertree Post Plugin"] = "Povolit Libertree Post rozšíření"; +$a->strings["Enable Libertree Post Addon"] = "Povolit Libertree Post rozšíření"; $a->strings["Libertree API token"] = "Libertree API token"; $a->strings["Libertree site URL"] = "URL adresa Libertree "; $a->strings["Post to Libertree by default"] = "Defaultně poslat na Libertree"; diff --git a/libertree/lang/de/messages.po b/libertree/lang/de/messages.po index 7c3d3f1a..970d22dd 100644 --- a/libertree/lang/de/messages.po +++ b/libertree/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "libertree Post Settings" msgstr "libertree Post Einstellungen" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" -msgstr "Libertree Post Plugin aktivieren" +msgid "Enable Libertree Post Addon" +msgstr "Libertree Post Addon aktivieren" #: libertree.php:74 msgid "Libertree API token" diff --git a/libertree/lang/de/strings.php b/libertree/lang/de/strings.php index 27d40815..c6867705 100644 --- a/libertree/lang/de/strings.php +++ b/libertree/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to libertree"] = "bei libertree veröffentlichen"; $a->strings["libertree Post Settings"] = "libertree Post Einstellungen"; -$a->strings["Enable Libertree Post Plugin"] = "Libertree Post Plugin aktivieren"; +$a->strings["Enable Libertree Post Addon"] = "Libertree Post Addon aktivieren"; $a->strings["Libertree API token"] = "Libertree API Token"; $a->strings["Libertree site URL"] = "Libertree URL"; $a->strings["Post to Libertree by default"] = "Standardmäßig bei libertree veröffentlichen"; diff --git a/libertree/lang/eo/strings.php b/libertree/lang/eo/strings.php index 11b8496c..674972d0 100644 --- a/libertree/lang/eo/strings.php +++ b/libertree/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = "Afiŝi al libertree"; $a->strings["libertree Post Settings"] = "Agordoj por Afiŝoj ĉe libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Aktivigi Kromprogramon por Afiŝoj ĉe libertree"; +$a->strings["Enable Libertree Post Addon"] = "Aktivigi Kromprogramon por Afiŝoj ĉe libertree"; $a->strings["Libertree API token"] = "Libertree API ĵetono"; $a->strings["Libertree site URL"] = "URL adreso de libertree retejo:"; $a->strings["Post to Libertree by default"] = "Defaŭlte afiŝi ĉe Libertree"; diff --git a/libertree/lang/es/messages.po b/libertree/lang/es/messages.po index 8fcc8a8d..d6005765 100644 --- a/libertree/lang/es/messages.po +++ b/libertree/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "libertree Post Settings" msgstr "Ajustes de Publicación de Libertree" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" -msgstr "Habilitar Plugin de publicación de Libertree" +msgid "Enable Libertree Post Addon" +msgstr "Habilitar Addon de publicación de Libertree" #: libertree.php:74 msgid "Libertree API token" diff --git a/libertree/lang/es/strings.php b/libertree/lang/es/strings.php index 0be7bbca..8a8dbf1f 100644 --- a/libertree/lang/es/strings.php +++ b/libertree/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to libertree"] = "Publicar en Libertree"; $a->strings["libertree Post Settings"] = "Ajustes de Publicación de Libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Habilitar Plugin de publicación de Libertree"; +$a->strings["Enable Libertree Post Addon"] = "Habilitar Addon de publicación de Libertree"; $a->strings["Libertree API token"] = "Símbolo de API de Libertree"; $a->strings["Libertree site URL"] = "URL de la página de Libertree"; $a->strings["Post to Libertree by default"] = "Publicar en Libertree por defecto"; diff --git a/libertree/lang/fr/messages.po b/libertree/lang/fr/messages.po index ce956cf1..6deb7b4e 100644 --- a/libertree/lang/fr/messages.po +++ b/libertree/lang/fr/messages.po @@ -28,8 +28,8 @@ msgid "libertree Post Settings" msgstr "Réglages des messages sur libertree" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" -msgstr "Activer le plugin de publication sur libertree" +msgid "Enable Libertree Post Addon" +msgstr "Activer leaddonde publication sur libertree" #: libertree.php:74 msgid "Libertree API token" diff --git a/libertree/lang/fr/strings.php b/libertree/lang/fr/strings.php index 8f777016..1e227914 100644 --- a/libertree/lang/fr/strings.php +++ b/libertree/lang/fr/strings.php @@ -7,7 +7,7 @@ function string_plural_select_fr($n){ ; $a->strings["Post to libertree"] = "Publier sur libertree"; $a->strings["libertree Post Settings"] = "Réglages des messages sur libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Activer le plugin de publication sur libertree"; +$a->strings["Enable Libertree Post Addon"] = "Activer le addon de publication sur libertree"; $a->strings["Libertree API token"] = "Clé de l'API libertree"; $a->strings["Libertree site URL"] = "URL du site libertree"; $a->strings["Post to Libertree by default"] = "Publier sur libertree par défaut"; diff --git a/libertree/lang/is/strings.php b/libertree/lang/is/strings.php index 7d5e7f37..6256e21c 100644 --- a/libertree/lang/is/strings.php +++ b/libertree/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = ""; $a->strings["libertree Post Settings"] = ""; -$a->strings["Enable Libertree Post Plugin"] = ""; +$a->strings["Enable Libertree Post Addon"] = ""; $a->strings["Libertree API token"] = ""; $a->strings["Libertree site URL"] = ""; $a->strings["Post to Libertree by default"] = ""; diff --git a/libertree/lang/it/messages.po b/libertree/lang/it/messages.po index 25bd37ff..35895688 100644 --- a/libertree/lang/it/messages.po +++ b/libertree/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "libertree Post Settings" msgstr "Impostazioni di invio a Libertree" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" -msgstr "Abilita il plugin di invio a Libertree" +msgid "Enable Libertree Post Addon" +msgstr "Abilita iladdondi invio a Libertree" #: libertree.php:74 msgid "Libertree API token" diff --git a/libertree/lang/it/strings.php b/libertree/lang/it/strings.php index beef73da..ca0b50fa 100644 --- a/libertree/lang/it/strings.php +++ b/libertree/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to libertree"] = "Invia a Libertree"; $a->strings["libertree Post Settings"] = "Impostazioni di invio a Libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Abilita il plugin di invio a Libertree"; +$a->strings["Enable Libertree Post Addon"] = "Abilita il addon di invio a Libertree"; $a->strings["Libertree API token"] = "Token API Libertree"; $a->strings["Libertree site URL"] = "Indirizzo sito Libertree"; $a->strings["Post to Libertree by default"] = "Invia sempre a Libertree"; diff --git a/libertree/lang/nb-no/strings.php b/libertree/lang/nb-no/strings.php index 679aefe1..1600c269 100644 --- a/libertree/lang/nb-no/strings.php +++ b/libertree/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = ""; $a->strings["libertree Post Settings"] = ""; -$a->strings["Enable Libertree Post Plugin"] = ""; +$a->strings["Enable Libertree Post Addon"] = ""; $a->strings["Libertree API token"] = ""; $a->strings["Libertree site URL"] = ""; $a->strings["Post to Libertree by default"] = ""; diff --git a/libertree/lang/pl/strings.php b/libertree/lang/pl/strings.php index 217757f2..5f212248 100644 --- a/libertree/lang/pl/strings.php +++ b/libertree/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = ""; $a->strings["libertree Post Settings"] = ""; -$a->strings["Enable Libertree Post Plugin"] = ""; +$a->strings["Enable Libertree Post Addon"] = ""; $a->strings["Libertree API token"] = ""; $a->strings["Libertree site URL"] = ""; $a->strings["Post to Libertree by default"] = ""; diff --git a/libertree/lang/pt-br/messages.po b/libertree/lang/pt-br/messages.po index 4df816bb..d6554ff6 100644 --- a/libertree/lang/pt-br/messages.po +++ b/libertree/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "libertree Post Settings" msgstr "Configurações de publicação do Libertree" #: libertree.php:69 -msgid "Enable Libertree Post Plugin" +msgid "Enable Libertree Post Addon" msgstr "Habilitar plug-in para publicar no Libertree" #: libertree.php:74 diff --git a/libertree/lang/pt-br/strings.php b/libertree/lang/pt-br/strings.php index 9c750698..d55aee61 100644 --- a/libertree/lang/pt-br/strings.php +++ b/libertree/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to libertree"] = "Publicar no Libertree"; $a->strings["libertree Post Settings"] = "Configurações de publicação do Libertree"; -$a->strings["Enable Libertree Post Plugin"] = "Habilitar plug-in para publicar no Libertree"; +$a->strings["Enable Libertree Post Addon"] = "Habilitar plug-in para publicar no Libertree"; $a->strings["Libertree API token"] = ""; $a->strings["Libertree site URL"] = ""; $a->strings["Post to Libertree by default"] = "Publicar no Libertree por padrão"; diff --git a/libertree/lang/ro/messages.po b/libertree/lang/ro/messages.po index 4690e7c1..bd99286a 100644 --- a/libertree/lang/ro/messages.po +++ b/libertree/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "libertree Post Settings" msgstr "Configurări Postări libertree " #: libertree.php:69 -msgid "Enable Libertree Post Plugin" +msgid "Enable Libertree Post Addon" msgstr "Activare Modul Postare Libertree" #: libertree.php:74 diff --git a/libertree/lang/ro/strings.php b/libertree/lang/ro/strings.php index 3136a26b..efa612ed 100644 --- a/libertree/lang/ro/strings.php +++ b/libertree/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to libertree"] = "Postați pe libertree"; $a->strings["libertree Post Settings"] = "Configurări Postări libertree "; -$a->strings["Enable Libertree Post Plugin"] = "Activare Modul Postare Libertree"; +$a->strings["Enable Libertree Post Addon"] = "Activare Modul Postare Libertree"; $a->strings["Libertree API token"] = "Token API Libertree"; $a->strings["Libertree site URL"] = "URL site Libertree"; $a->strings["Post to Libertree by default"] = "Postați implicit pe Libertree"; diff --git a/libertree/lang/ru/strings.php b/libertree/lang/ru/strings.php index c6101b70..9d1522a4 100644 --- a/libertree/lang/ru/strings.php +++ b/libertree/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = ""; $a->strings["libertree Post Settings"] = ""; -$a->strings["Enable Libertree Post Plugin"] = ""; +$a->strings["Enable Libertree Post Addon"] = ""; $a->strings["Libertree API token"] = ""; $a->strings["Libertree site URL"] = ""; $a->strings["Post to Libertree by default"] = ""; diff --git a/libertree/lang/zh-cn/strings.php b/libertree/lang/zh-cn/strings.php index 2122014c..c3d1f6a1 100644 --- a/libertree/lang/zh-cn/strings.php +++ b/libertree/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to libertree"] = "转播到libertree"; $a->strings["libertree Post Settings"] = "libertree转播设置"; -$a->strings["Enable Libertree Post Plugin"] = "使Libertree转播插件可用"; +$a->strings["Enable Libertree Post Addon"] = "使Libertree转播插件可用"; $a->strings["Libertree API token"] = "Libertree API令牌"; $a->strings["Libertree site URL"] = "Libertree网站URL"; $a->strings["Post to Libertree by default"] = "默认地转播到Libertree"; diff --git a/libertree/libertree.php b/libertree/libertree.php index 2909a8ef..0dd6e38a 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -74,7 +74,7 @@ function libertree_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/libravatar/README.md b/libravatar/README.md index 16fbd85a..07ac2a79 100644 --- a/libravatar/README.md +++ b/libravatar/README.md @@ -1,4 +1,4 @@ -# Libravatar Plugin +# Libravatar Addon by [Klaus Weidenbach](http://friendica.dszdw.net/profile/klaus) This addon allows you to look up an avatar image for new users and contacts at [Libravatar](http://www.libravatar.com). It will be used if there have not been found any other avatar images yet for example through OpenID. @@ -6,7 +6,7 @@ This addon allows you to look up an avatar image for new users and contacts at [ Libravatar is a free and open replacement for Gravatar. It is a service where people can store an avatar image for their email-addresses. These avatar images can get looked up for example in comment functions, profile pages, etc. on other sites. There exists a central installation at [www.libravatar.com](http://www.libravatar.com), but you can also host it on your own server. If no avatar was found Libravatar will look up at Gravatar as a fallback. There is no rating available, as it is on Gravatar, so all avatar lookups are g-rated. (Suitable for all audiences.) -PHP >= 5.3 is required for this plugin! +PHP >= 5.3 is required for this addon! You can not use the Libravatar and Gravatar addon at the same time. You need to choose one. If you need other ratings than g you better stay with Gravatar, otherwise it is safe to use Libravatar, because it will fall back to Gravatar if nothing was found at Libravatar. diff --git a/ljpost/lang/C/messages.po b/ljpost/lang/C/messages.po index 6c506e05..9baae18e 100644 --- a/ljpost/lang/C/messages.po +++ b/ljpost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "LiveJournal Post Settings" msgstr "" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" +msgid "Enable LiveJournal Post Addon" msgstr "" #: ljpost.php:77 diff --git a/ljpost/lang/ca/strings.php b/ljpost/lang/ca/strings.php index 04053fa2..ec370df8 100644 --- a/ljpost/lang/ca/strings.php +++ b/ljpost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = "Missatge a Livejournal"; $a->strings["LiveJournal Post Settings"] = "Configuració d'enviaments a Livejournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Habilitat el plugin d'enviaments a Livejournal"; +$a->strings["Enable LiveJournal Post Addon"] = "Habilitat el addon d'enviaments a Livejournal"; $a->strings["LiveJournal username"] = "Nom d'usuari a Livejournal"; $a->strings["LiveJournal password"] = "Contrasenya a Livejournal"; $a->strings["Post to LiveJournal by default"] = "Enviar per defecte a Livejournal"; diff --git a/ljpost/lang/cs/messages.po b/ljpost/lang/cs/messages.po index 78abd527..74a88433 100644 --- a/ljpost/lang/cs/messages.po +++ b/ljpost/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "LiveJournal Post Settings" msgstr "Nastavení LiveJournal Post" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" -msgstr "Povolit LiveJournal Post plugin" +msgid "Enable LiveJournal Post Addon" +msgstr "Povolit LiveJournal Post addon" #: ljpost.php:77 msgid "LiveJournal username" diff --git a/ljpost/lang/cs/strings.php b/ljpost/lang/cs/strings.php index f1dad443..d2c833d9 100644 --- a/ljpost/lang/cs/strings.php +++ b/ljpost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to LiveJournal"] = "Poslat na LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Nastavení LiveJournal Post"; -$a->strings["Enable LiveJournal Post Plugin"] = "Povolit LiveJournal Post plugin"; +$a->strings["Enable LiveJournal Post Addon"] = "Povolit LiveJournal Post addon"; $a->strings["LiveJournal username"] = "LiveJournal uživatelské jméno"; $a->strings["LiveJournal password"] = "LiveJournal heslo"; $a->strings["Post to LiveJournal by default"] = "Defaultně umístit na LiveJournal"; diff --git a/ljpost/lang/de/messages.po b/ljpost/lang/de/messages.po index 62cd8afc..4d915c0d 100644 --- a/ljpost/lang/de/messages.po +++ b/ljpost/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "LiveJournal Post Settings" msgstr "LiveJournal Veröffentlichungs-Einstellungen" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" -msgstr "LiveJournal Post Plugin aktivieren" +msgid "Enable LiveJournal Post Addon" +msgstr "LiveJournal Post Addon aktivieren" #: ljpost.php:77 msgid "LiveJournal username" diff --git a/ljpost/lang/de/strings.php b/ljpost/lang/de/strings.php index 862b5779..e6b9c848 100644 --- a/ljpost/lang/de/strings.php +++ b/ljpost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to LiveJournal"] = "In LiveJournal veröffentlichen."; $a->strings["LiveJournal Post Settings"] = "LiveJournal Veröffentlichungs-Einstellungen"; -$a->strings["Enable LiveJournal Post Plugin"] = "LiveJournal Post Plugin aktivieren"; +$a->strings["Enable LiveJournal Post Addon"] = "LiveJournal Post Addon aktivieren"; $a->strings["LiveJournal username"] = "LiveJournal Benutzername"; $a->strings["LiveJournal password"] = "LiveJournal Passwort"; $a->strings["Post to LiveJournal by default"] = "Standardmäßig bei LiveJournal veröffentlichen"; diff --git a/ljpost/lang/eo/strings.php b/ljpost/lang/eo/strings.php index b606e6a6..1bd09a6f 100644 --- a/ljpost/lang/eo/strings.php +++ b/ljpost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = "Afiŝi ĉe LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Agordoj pri afiŝoj ĉe LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Ŝalti la LiveJournal-afiŝo kromprogramon."; +$a->strings["Enable LiveJournal Post Addon"] = "Ŝalti la LiveJournal-afiŝo kromprogramon."; $a->strings["LiveJournal username"] = "LiveJournal Salutnomo"; $a->strings["LiveJournal password"] = "LiveJournal pasvorto"; $a->strings["Post to LiveJournal by default"] = "Defaŭlte afiŝi al LiveJournal"; diff --git a/ljpost/lang/es/messages.po b/ljpost/lang/es/messages.po index 16efa134..f94e20bb 100644 --- a/ljpost/lang/es/messages.po +++ b/ljpost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "LiveJournal Post Settings" msgstr "Ajustes de publicación de LiveJournal" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" -msgstr "Habilitar Plugin de publicción de LiveJournal" +msgid "Enable LiveJournal Post Addon" +msgstr "Habilitar Addon de publicción de LiveJournal" #: ljpost.php:77 msgid "LiveJournal username" diff --git a/ljpost/lang/es/strings.php b/ljpost/lang/es/strings.php index 89e117fb..10092765 100644 --- a/ljpost/lang/es/strings.php +++ b/ljpost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to LiveJournal"] = "Publicar en LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Ajustes de publicación de LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Habilitar Plugin de publicción de LiveJournal"; +$a->strings["Enable LiveJournal Post Addon"] = "Habilitar Addon de publicción de LiveJournal"; $a->strings["LiveJournal username"] = "Nombre de usuario de LiveJournal"; $a->strings["LiveJournal password"] = "Contraseña de LiveJournal"; $a->strings["Post to LiveJournal by default"] = "Publicar en LiveJournal por defecto"; diff --git a/ljpost/lang/fr/strings.php b/ljpost/lang/fr/strings.php index 615f929a..85407d57 100644 --- a/ljpost/lang/fr/strings.php +++ b/ljpost/lang/fr/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = "Poster vers LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Réglages LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Activer \"Poster vers LiveJournal\""; +$a->strings["Enable LiveJournal Post Addon"] = "Activer \"Poster vers LiveJournal\""; $a->strings["LiveJournal username"] = "Nom d'utilisateur LiveJournal"; $a->strings["LiveJournal password"] = "Mot de passe"; $a->strings["Post to LiveJournal by default"] = "Poster vers LiveJournal par défaut"; diff --git a/ljpost/lang/is/strings.php b/ljpost/lang/is/strings.php index 5edfc631..164dc441 100644 --- a/ljpost/lang/is/strings.php +++ b/ljpost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = ""; $a->strings["LiveJournal Post Settings"] = ""; -$a->strings["Enable LiveJournal Post Plugin"] = ""; +$a->strings["Enable LiveJournal Post Addon"] = ""; $a->strings["LiveJournal username"] = ""; $a->strings["LiveJournal password"] = ""; $a->strings["Post to LiveJournal by default"] = ""; diff --git a/ljpost/lang/it/messages.po b/ljpost/lang/it/messages.po index 23b345bb..fb6f3493 100644 --- a/ljpost/lang/it/messages.po +++ b/ljpost/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "LiveJournal Post Settings" msgstr "Impostazioni invio a LiveJournal" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" -msgstr "Abilita il plugin di invio a LiveJournal" +msgid "Enable LiveJournal Post Addon" +msgstr "Abilita il addon di invio a LiveJournal" #: ljpost.php:77 msgid "LiveJournal username" diff --git a/ljpost/lang/it/strings.php b/ljpost/lang/it/strings.php index 538b0ef8..041d4077 100644 --- a/ljpost/lang/it/strings.php +++ b/ljpost/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to LiveJournal"] = "Invia a LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Impostazioni invio a LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Abilita il plugin di invio a LiveJournal"; +$a->strings["Enable LiveJournal Post Addon"] = "Abilita il addon di invio a LiveJournal"; $a->strings["LiveJournal username"] = "Nome utente LiveJournal"; $a->strings["LiveJournal password"] = "Password LiveJournal"; $a->strings["Post to LiveJournal by default"] = "Invia sempre a LiveJournal"; diff --git a/ljpost/lang/nb-no/strings.php b/ljpost/lang/nb-no/strings.php index c4e04562..0ea53bd3 100644 --- a/ljpost/lang/nb-no/strings.php +++ b/ljpost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = ""; $a->strings["LiveJournal Post Settings"] = ""; -$a->strings["Enable LiveJournal Post Plugin"] = ""; +$a->strings["Enable LiveJournal Post Addon"] = ""; $a->strings["LiveJournal username"] = ""; $a->strings["LiveJournal password"] = ""; $a->strings["Post to LiveJournal by default"] = ""; diff --git a/ljpost/lang/pl/strings.php b/ljpost/lang/pl/strings.php index 3497dc2c..a96826ee 100644 --- a/ljpost/lang/pl/strings.php +++ b/ljpost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = "Post do LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Ustawienia postów do LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = ""; +$a->strings["Enable LiveJournal Post Addon"] = ""; $a->strings["LiveJournal username"] = "Nazwa użytkownika do LiveJournal"; $a->strings["LiveJournal password"] = "Hasło do LiveJournal"; $a->strings["Post to LiveJournal by default"] = "automatycznie publikuj na LiveJournal"; diff --git a/ljpost/lang/pt-br/messages.po b/ljpost/lang/pt-br/messages.po index 3ed7117f..832a647d 100644 --- a/ljpost/lang/pt-br/messages.po +++ b/ljpost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "LiveJournal Post Settings" msgstr "Configurações de publicação no LiveJournal" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" +msgid "Enable LiveJournal Post Addon" msgstr "Habilitar plug-in para publicar no LiveJournal" #: ljpost.php:77 diff --git a/ljpost/lang/pt-br/strings.php b/ljpost/lang/pt-br/strings.php index 0792861b..ddc091a4 100644 --- a/ljpost/lang/pt-br/strings.php +++ b/ljpost/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to LiveJournal"] = "Publicar no LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Configurações de publicação no LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Habilitar plug-in para publicar no LiveJournal"; +$a->strings["Enable LiveJournal Post Addon"] = "Habilitar plug-in para publicar no LiveJournal"; $a->strings["LiveJournal username"] = "Nome de usuário no LiveJournal"; $a->strings["LiveJournal password"] = "Senha do LiveJournal"; $a->strings["Post to LiveJournal by default"] = "Publicar no LiveJournal por padrão"; diff --git a/ljpost/lang/ro/messages.po b/ljpost/lang/ro/messages.po index 2393930a..546e49bb 100644 --- a/ljpost/lang/ro/messages.po +++ b/ljpost/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "LiveJournal Post Settings" msgstr "Configurări Postări LiveJournal" #: ljpost.php:72 -msgid "Enable LiveJournal Post Plugin" +msgid "Enable LiveJournal Post Addon" msgstr "Activare Modul Postare LiveJournal" #: ljpost.php:77 diff --git a/ljpost/lang/ro/strings.php b/ljpost/lang/ro/strings.php index 4bc21cc4..b65c7754 100644 --- a/ljpost/lang/ro/strings.php +++ b/ljpost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to LiveJournal"] = "Postați pe LiveJournal"; $a->strings["LiveJournal Post Settings"] = "Configurări Postări LiveJournal"; -$a->strings["Enable LiveJournal Post Plugin"] = "Activare Modul Postare LiveJournal"; +$a->strings["Enable LiveJournal Post Addon"] = "Activare Modul Postare LiveJournal"; $a->strings["LiveJournal username"] = "Utilizator LiveJournal"; $a->strings["LiveJournal password"] = "Parolă LiveJournal "; $a->strings["Post to LiveJournal by default"] = "Postați implicit pe LiveJournal"; diff --git a/ljpost/lang/ru/strings.php b/ljpost/lang/ru/strings.php index 8e847437..89a241cd 100644 --- a/ljpost/lang/ru/strings.php +++ b/ljpost/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = ""; $a->strings["LiveJournal Post Settings"] = ""; -$a->strings["Enable LiveJournal Post Plugin"] = "Включить LiveJournal плагин сообщений"; +$a->strings["Enable LiveJournal Post Addon"] = "Включить LiveJournal плагин сообщений"; $a->strings["LiveJournal username"] = ""; $a->strings["LiveJournal password"] = ""; $a->strings["Post to LiveJournal by default"] = ""; diff --git a/ljpost/lang/zh-cn/strings.php b/ljpost/lang/zh-cn/strings.php index f34b6365..579eac21 100644 --- a/ljpost/lang/zh-cn/strings.php +++ b/ljpost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to LiveJournal"] = "转播到LiveJournal"; $a->strings["LiveJournal Post Settings"] = "LiveJournal转播设置"; -$a->strings["Enable LiveJournal Post Plugin"] = "使Livejournal转播插件可用"; +$a->strings["Enable LiveJournal Post Addon"] = "使Livejournal转播插件可用"; $a->strings["LiveJournal username"] = "LiveJournal用户名"; $a->strings["LiveJournal password"] = "LiveJournal密码"; $a->strings["Post to LiveJournal by default"] = "默认地转播到LiveJournal"; diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 6f358530..7843d6f3 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -70,7 +70,7 @@ function ljpost_settings(&$a,&$s) { $s .= '
'; $s .= '

' . t('LiveJournal Post Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/mailstream/phpmailer/class.phpmailer.php b/mailstream/phpmailer/class.phpmailer.php index 8ff13f11..c2611e86 100644 --- a/mailstream/phpmailer/class.phpmailer.php +++ b/mailstream/phpmailer/class.phpmailer.php @@ -176,7 +176,7 @@ class PHPMailer public $UseSendmailOptions = true; /** - * Path to PHPMailer plugins. + * Path to PHPMailer addons. * Useful if the SMTP class is not in the PHP include path. * @var string * @deprecated Should not be needed now there is an autoloader. diff --git a/mathjax/lang/it/messages.po b/mathjax/lang/it/messages.po index 82673733..f44812c3 100644 --- a/mathjax/lang/it/messages.po +++ b/mathjax/lang/it/messages.po @@ -28,7 +28,7 @@ msgid "" "The MathJax addon renders mathematical formulae written using the LaTeX " "syntax surrounded by the usual $$ or an eqnarray block in the postings of " "your wall,network tab and private mail." -msgstr "Il plugin \"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati." +msgstr "Iladdon\"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati." #: mathjax.php:38 msgid "Use the MathJax renderer" diff --git a/mathjax/lang/it/strings.php b/mathjax/lang/it/strings.php index 1481d731..a1aa5b2b 100644 --- a/mathjax/lang/it/strings.php +++ b/mathjax/lang/it/strings.php @@ -6,7 +6,7 @@ function string_plural_select_it($n){ }} ; $a->strings["Settings"] = "Impostazioni"; -$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "Il plugin \"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati."; +$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "Il addon \"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati."; $a->strings["Use the MathJax renderer"] = "Usa il render MathJax"; $a->strings["Submit"] = "Invia"; $a->strings["Settings updated."] = "Impostazioni aggiornate."; diff --git a/nsfw/README b/nsfw/README index 624fb703..e4a8b9d3 100644 --- a/nsfw/README +++ b/nsfw/README @@ -6,7 +6,7 @@ Scans the message content for the string 'nsfw' (case insensitive) and if found replaces the content with a "click to open/close" link, default is closed. -If you click on the 'Not safe for work' plugin under +If you click on the 'Not safe for work' addon under /settings/addon a text field appears, where you can extend the list of search terms. The terms must be seperated by commas. diff --git a/nsfw/lang/C/messages.po b/nsfw/lang/C/messages.po index 34ad6565..0fd1035c 100644 --- a/nsfw/lang/C/messages.po +++ b/nsfw/lang/C/messages.po @@ -23,7 +23,7 @@ msgstr "" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " diff --git a/nsfw/lang/ca/strings.php b/nsfw/lang/ca/strings.php index 36607e47..349ffefd 100644 --- a/nsfw/lang/ca/strings.php +++ b/nsfw/lang/ca/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Ajustos, Not Safe For Work (Filtre de Contingut de Propòsit General)"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Aquest plugin es veu en enviaments amb les paraules/text que s'especifiquen a continuació , i amagarà qualsevol contingut que contingui les paraules clau de manera que no apareguin en moments inapropiats, com ara insinuacions sexuals que poden ser inadequades en un entorn de treball. És de bona educació i es recomana etiquetar qualsevol contingut que contingui nus amb #NSFW. Aquest filtre també es pot fer coincidir amb qualsevol paraula/text que especifiqueu, i per tant pot ser utilitzat com un filtre general de contingut."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Aquest addon es veu en enviaments amb les paraules/text que s'especifiquen a continuació , i amagarà qualsevol contingut que contingui les paraules clau de manera que no apareguin en moments inapropiats, com ara insinuacions sexuals que poden ser inadequades en un entorn de treball. És de bona educació i es recomana etiquetar qualsevol contingut que contingui nus amb #NSFW. Aquest filtre també es pot fer coincidir amb qualsevol paraula/text que especifiqueu, i per tant pot ser utilitzat com un filtre general de contingut."; $a->strings["Enable Content filter"] = "Activat el filtre de Contingut"; $a->strings["Comma separated list of keywords to hide"] = "Llista separada per comes de paraules clau per ocultar"; $a->strings["Submit"] = "Enviar"; diff --git a/nsfw/lang/cs/messages.po b/nsfw/lang/cs/messages.po index da5142ba..61d367c4 100644 --- a/nsfw/lang/cs/messages.po +++ b/nsfw/lang/cs/messages.po @@ -25,13 +25,13 @@ msgstr "Not Safe For Work (General Purpose Content Filter) nastavení" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " "with #NSFW. This filter can also match any other word/text you specify, and" " can thereby be used as a general purpose content filter." -msgstr "Tento plugin hledá v příspěvcích slova zadáná níže a skryje jakýkoliv obsah, který tyto slova obsahuje v prostředích, kde to není vhodné. Je slušné a doporučené jakékoliv příspěvky s mahotou označit s #NSFW. Tento filtr může také vyhledávat jakékoliv Vámi specifikované slovní spojení, takže může být využit jako obecný kontextový filtr." +msgstr "Tento addon hledá v příspěvcích slova zadáná níže a skryje jakýkoliv obsah, který tyto slova obsahuje v prostředích, kde to není vhodné. Je slušné a doporučené jakékoliv příspěvky s mahotou označit s #NSFW. Tento filtr může také vyhledávat jakékoliv Vámi specifikované slovní spojení, takže může být využit jako obecný kontextový filtr." #: nsfw.php:81 msgid "Enable Content filter" diff --git a/nsfw/lang/cs/strings.php b/nsfw/lang/cs/strings.php index 97314495..fd07368b 100644 --- a/nsfw/lang/cs/strings.php +++ b/nsfw/lang/cs/strings.php @@ -6,7 +6,7 @@ function string_plural_select_cs($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe For Work (General Purpose Content Filter) nastavení"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Tento plugin hledá v příspěvcích slova zadáná níže a skryje jakýkoliv obsah, který tyto slova obsahuje v prostředích, kde to není vhodné. Je slušné a doporučené jakékoliv příspěvky s mahotou označit s #NSFW. Tento filtr může také vyhledávat jakékoliv Vámi specifikované slovní spojení, takže může být využit jako obecný kontextový filtr."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Tento addon hledá v příspěvcích slova zadáná níže a skryje jakýkoliv obsah, který tyto slova obsahuje v prostředích, kde to není vhodné. Je slušné a doporučené jakékoliv příspěvky s mahotou označit s #NSFW. Tento filtr může také vyhledávat jakékoliv Vámi specifikované slovní spojení, takže může být využit jako obecný kontextový filtr."; $a->strings["Enable Content filter"] = "Povolit Kontextový filtr"; $a->strings["Comma separated list of keywords to hide"] = "Čárkou oddělený seznam klíčových slov ke skrytí"; $a->strings["Submit"] = "Odeslat"; diff --git a/nsfw/lang/de/messages.po b/nsfw/lang/de/messages.po index 1355f8ab..192c33cf 100644 --- a/nsfw/lang/de/messages.po +++ b/nsfw/lang/de/messages.po @@ -26,13 +26,13 @@ msgstr "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " "with #NSFW. This filter can also match any other word/text you specify, and" " can thereby be used as a general purpose content filter." -msgstr "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden." +msgstr "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden." #: nsfw.php:81 msgid "Enable Content filter" diff --git a/nsfw/lang/de/strings.php b/nsfw/lang/de/strings.php index 36e258fa..a313c505 100644 --- a/nsfw/lang/de/strings.php +++ b/nsfw/lang/de/strings.php @@ -6,7 +6,7 @@ function string_plural_select_de($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."; $a->strings["Enable Content filter"] = "Aktiviere den Inhaltsfilter"; $a->strings["Comma separated list of keywords to hide"] = "Durch Kommata getrennte Liste von Schlüsselwörtern die verborgen werden sollen"; $a->strings["Submit"] = "Senden"; diff --git a/nsfw/lang/eo/strings.php b/nsfw/lang/eo/strings.php index d3f39d08..13da052a 100644 --- a/nsfw/lang/eo/strings.php +++ b/nsfw/lang/eo/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe For Work (ĝenerala filtrilo por enhavoj) agordoj"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Tiu kromprogramo serĉas la malsupre agordatajn vortojn en afiŝoj kaj malvidebligis ilin se ili enhavas iun vorton. Tiel, afiŝoj ne montriĝis kiuj enhavas maladekvatan enhavon, ekzemple seksumaj aferoj, kiuj ne estas adekvata, ekzemple en la laborejo. En la reto, oni kutime markas tiajn afiŝojn #NSFW - Not Safe For Work - ne adekvata por la laborejo. La filtrilo ankaŭ serĉas ĉiujn vortojn kiujn vi agordas kaj tial funkcias kiel ĝenerala filtrilo."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Tiu kromprogramo serĉas la malsupre agordatajn vortojn en afiŝoj kaj malvidebligis ilin se ili enhavas iun vorton. Tiel, afiŝoj ne montriĝis kiuj enhavas maladekvatan enhavon, ekzemple seksumaj aferoj, kiuj ne estas adekvata, ekzemple en la laborejo. En la reto, oni kutime markas tiajn afiŝojn #NSFW - Not Safe For Work - ne adekvata por la laborejo. La filtrilo ankaŭ serĉas ĉiujn vortojn kiujn vi agordas kaj tial funkcias kiel ĝenerala filtrilo."; $a->strings["Enable Content filter"] = "Ŝalti la filtrilo por la enhavo"; $a->strings["Comma separated list of keywords to hide"] = "Perkome disigita listo da kaŝontaj ŝlosilvortoj"; $a->strings["Submit"] = "Sendi"; diff --git a/nsfw/lang/es/messages.po b/nsfw/lang/es/messages.po index 45659825..2950395f 100644 --- a/nsfw/lang/es/messages.po +++ b/nsfw/lang/es/messages.po @@ -25,13 +25,13 @@ msgstr "Configuración \"No apto para trabajar\" (Filtro genérico de contenido) #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " "with #NSFW. This filter can also match any other word/text you specify, and" " can thereby be used as a general purpose content filter." -msgstr "Este plugin se fija por el contenido del texto y colapsa todo tema o respuesta que contiene las palabras establecidas. Como tales pueden ser contenido sexual o de otra índole que no conviene desplegar en el trabajo o ambientes correspondientes. Es de buena educación y recomendado de identificar todo tipo de contenido explicito con #NSFW. Este filtro además puede ser usado con cualquier palabra a especificar y por lo tanto ser usado como un filtro generico de contenido." +msgstr "Este addon se fija por el contenido del texto y colapsa todo tema o respuesta que contiene las palabras establecidas. Como tales pueden ser contenido sexual o de otra índole que no conviene desplegar en el trabajo o ambientes correspondientes. Es de buena educación y recomendado de identificar todo tipo de contenido explicito con #NSFW. Este filtro además puede ser usado con cualquier palabra a especificar y por lo tanto ser usado como un filtro generico de contenido." #: nsfw.php:81 msgid "Enable Content filter" diff --git a/nsfw/lang/es/strings.php b/nsfw/lang/es/strings.php index 54fb2688..75d3211d 100644 --- a/nsfw/lang/es/strings.php +++ b/nsfw/lang/es/strings.php @@ -6,7 +6,7 @@ function string_plural_select_es($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Configuración \"No apto para trabajar\" (Filtro genérico de contenido)"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Este plugin se fija por el contenido del texto y colapsa todo tema o respuesta que contiene las palabras establecidas. Como tales pueden ser contenido sexual o de otra índole que no conviene desplegar en el trabajo o ambientes correspondientes. Es de buena educación y recomendado de identificar todo tipo de contenido explicito con #NSFW. Este filtro además puede ser usado con cualquier palabra a especificar y por lo tanto ser usado como un filtro generico de contenido."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Este addon se fija por el contenido del texto y colapsa todo tema o respuesta que contiene las palabras establecidas. Como tales pueden ser contenido sexual o de otra índole que no conviene desplegar en el trabajo o ambientes correspondientes. Es de buena educación y recomendado de identificar todo tipo de contenido explicito con #NSFW. Este filtro además puede ser usado con cualquier palabra a especificar y por lo tanto ser usado como un filtro generico de contenido."; $a->strings["Enable Content filter"] = "Habilitar filtro de contenido"; $a->strings["Comma separated list of keywords to hide"] = "Lista de palabras claves separadas por coma para colapsar el contenido correspondiente."; $a->strings["Submit"] = "Enviar"; diff --git a/nsfw/lang/fr/strings.php b/nsfw/lang/fr/strings.php index 1bfbfdfa..09086f48 100644 --- a/nsfw/lang/fr/strings.php +++ b/nsfw/lang/fr/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Réglages de \"NSFW\" (filtrage de contenu)"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Cette extension va parcourir les publications à la recherche des mots (ou phrases) que vous spécifierez ci-dessous, et repliera automatiquement tout contenu qui les contiendrait, afin de ne pas risquer de les afficher à un moment inopportun. Comme par exemple des messages à caractère sexuel dans un contexte professionnel. Il est globalement considéré comme correct et poli de \"tagguer\" toute publication contenant de la nudité avec #NSFW (Not Safe For Work - pas pour le boulot). Ce filtre peut également fonctionner pour tout autre texte que vous spécifierez, et pourra ainsi être utilisé comme filtre de contenu générique."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Cette extension va parcourir les publications à la recherche des mots (ou phrases) que vous spécifierez ci-dessous, et repliera automatiquement tout contenu qui les contiendrait, afin de ne pas risquer de les afficher à un moment inopportun. Comme par exemple des messages à caractère sexuel dans un contexte professionnel. Il est globalement considéré comme correct et poli de \"tagguer\" toute publication contenant de la nudité avec #NSFW (Not Safe For Work - pas pour le boulot). Ce filtre peut également fonctionner pour tout autre texte que vous spécifierez, et pourra ainsi être utilisé comme filtre de contenu générique."; $a->strings["Enable Content filter"] = "Activer le filtrage de contenu"; $a->strings["Comma separated list of keywords to hide"] = "Liste de mots-clés - séparés par des virgules - à cacher"; $a->strings["Submit"] = "Envoyer"; diff --git a/nsfw/lang/is/strings.php b/nsfw/lang/is/strings.php index f4bcb824..534f19c2 100644 --- a/nsfw/lang/is/strings.php +++ b/nsfw/lang/is/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = ""; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; $a->strings["Enable Content filter"] = ""; $a->strings["Comma separated list of keywords to hide"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/nsfw/lang/it/messages.po b/nsfw/lang/it/messages.po index 934a3cae..37b25740 100644 --- a/nsfw/lang/it/messages.po +++ b/nsfw/lang/it/messages.po @@ -25,13 +25,13 @@ msgstr "Impostazioni per NSWF (Filtro Contenuti Generico)" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " "with #NSFW. This filter can also match any other word/text you specify, and" " can thereby be used as a general purpose content filter." -msgstr "Questo plugin cerca nei messagi le parole/testo che inserisci qui sotto, e collassa i messaggi che li contengono, per non mostrare contenuto inappropriato nel momento sbagliato, come contenuto a sfondo sessuale che può essere inappropriato in un ambiente di lavoro. E' educato (e consigliato) taggare i messaggi che contengono nudità con #NSFW (Not Safe For Work: Non Sicuro Per il Lavoro). Questo filtro può cercare anche qualsiasi parola che inserisci, quindi può essere usato come filtro di contenuti generico." +msgstr "Questo addon cerca nei messagi le parole/testo che inserisci qui sotto, e collassa i messaggi che li contengono, per non mostrare contenuto inappropriato nel momento sbagliato, come contenuto a sfondo sessuale che può essere inappropriato in un ambiente di lavoro. E' educato (e consigliato) taggare i messaggi che contengono nudità con #NSFW (Not Safe For Work: Non Sicuro Per il Lavoro). Questo filtro può cercare anche qualsiasi parola che inserisci, quindi può essere usato come filtro di contenuti generico." #: nsfw.php:81 msgid "Enable Content filter" diff --git a/nsfw/lang/it/strings.php b/nsfw/lang/it/strings.php index 36f7d972..fc8ec54d 100644 --- a/nsfw/lang/it/strings.php +++ b/nsfw/lang/it/strings.php @@ -6,7 +6,7 @@ function string_plural_select_it($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Impostazioni per NSWF (Filtro Contenuti Generico)"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Questo plugin cerca nei messagi le parole/testo che inserisci qui sotto, e collassa i messaggi che li contengono, per non mostrare contenuto inappropriato nel momento sbagliato, come contenuto a sfondo sessuale che può essere inappropriato in un ambiente di lavoro. E' educato (e consigliato) taggare i messaggi che contengono nudità con #NSFW (Not Safe For Work: Non Sicuro Per il Lavoro). Questo filtro può cercare anche qualsiasi parola che inserisci, quindi può essere usato come filtro di contenuti generico."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Questo addon cerca nei messagi le parole/testo che inserisci qui sotto, e collassa i messaggi che li contengono, per non mostrare contenuto inappropriato nel momento sbagliato, come contenuto a sfondo sessuale che può essere inappropriato in un ambiente di lavoro. E' educato (e consigliato) taggare i messaggi che contengono nudità con #NSFW (Not Safe For Work: Non Sicuro Per il Lavoro). Questo filtro può cercare anche qualsiasi parola che inserisci, quindi può essere usato come filtro di contenuti generico."; $a->strings["Enable Content filter"] = "Abilita il Filtro Contenuti"; $a->strings["Comma separated list of keywords to hide"] = "Elenco separato da virgole di parole da nascondere"; $a->strings["Submit"] = "Invia"; diff --git a/nsfw/lang/nb-no/strings.php b/nsfw/lang/nb-no/strings.php index 7836003f..5274da91 100644 --- a/nsfw/lang/nb-no/strings.php +++ b/nsfw/lang/nb-no/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = ""; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; $a->strings["Enable Content filter"] = ""; $a->strings["Comma separated list of keywords to hide"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/nsfw/lang/pl/strings.php b/nsfw/lang/pl/strings.php index b99d9ec2..ea2189ca 100644 --- a/nsfw/lang/pl/strings.php +++ b/nsfw/lang/pl/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = ""; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; $a->strings["Enable Content filter"] = ""; $a->strings["Comma separated list of keywords to hide"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/nsfw/lang/pt-br/messages.po b/nsfw/lang/pt-br/messages.po index 013c8b48..10435354 100644 --- a/nsfw/lang/pt-br/messages.po +++ b/nsfw/lang/pt-br/messages.po @@ -25,7 +25,7 @@ msgstr "" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " diff --git a/nsfw/lang/pt-br/strings.php b/nsfw/lang/pt-br/strings.php index 6c1b15d9..21a81492 100644 --- a/nsfw/lang/pt-br/strings.php +++ b/nsfw/lang/pt-br/strings.php @@ -6,7 +6,7 @@ function string_plural_select_pt_br($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = ""; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; $a->strings["Enable Content filter"] = "Habilitar filtro de conteúdo"; $a->strings["Comma separated list of keywords to hide"] = ""; $a->strings["Submit"] = "Enviar"; diff --git a/nsfw/lang/ro/messages.po b/nsfw/lang/ro/messages.po index 503813c4..06d97e3f 100644 --- a/nsfw/lang/ro/messages.po +++ b/nsfw/lang/ro/messages.po @@ -25,7 +25,7 @@ msgstr "Nesigur Pentru Lucru (Filtrare de Conținut pentru Uz General )" #: nsfw.php:80 msgid "" -"This plugin looks in posts for the words/text you specify below, and " +"This addon looks in posts for the words/text you specify below, and " "collapses any content containing those keywords so it is not displayed at " "inappropriate times, such as sexual innuendo that may be improper in a work " "setting. It is polite and recommended to tag any content containing nudity " diff --git a/nsfw/lang/ro/strings.php b/nsfw/lang/ro/strings.php index 28f71d2c..f03f490f 100644 --- a/nsfw/lang/ro/strings.php +++ b/nsfw/lang/ro/strings.php @@ -6,7 +6,7 @@ function string_plural_select_ro($n){ }} ; $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Nesigur Pentru Lucru (Filtrare de Conținut pentru Uz General )"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Acest modul verifică în postări, cuvintele/textele pe care le specificați mai jos, și cenzurează orice conținut cu aceste cuvinte cheie, astfel încât să nu se afișeze în momentele necorespunzătoare, precum aluziile sexuale ce pot fi necorespunzătoare într-un mediu de lucru. Este politicos și recomandat să etichetați orice conținut cu nuditate, folosind eticheta #NSFW. Acest filtru poate de asemenea, potrivi orice alt cuvânt/text specificat, şi poate fi folosit astfel și ca filtru de conținut cu scop general."; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Acest modul verifică în postări, cuvintele/textele pe care le specificați mai jos, și cenzurează orice conținut cu aceste cuvinte cheie, astfel încât să nu se afișeze în momentele necorespunzătoare, precum aluziile sexuale ce pot fi necorespunzătoare într-un mediu de lucru. Este politicos și recomandat să etichetați orice conținut cu nuditate, folosind eticheta #NSFW. Acest filtru poate de asemenea, potrivi orice alt cuvânt/text specificat, şi poate fi folosit astfel și ca filtru de conținut cu scop general."; $a->strings["Enable Content filter"] = "Activare filtru de Conținut"; $a->strings["Comma separated list of keywords to hide"] = "Lista cu separator prin virgulă a cuvintelor cheie, ce vor declanșa ascunderea"; $a->strings["Submit"] = "Trimite"; diff --git a/nsfw/lang/ru/strings.php b/nsfw/lang/ru/strings.php index 2ccb5ad1..7e821ed8 100644 --- a/nsfw/lang/ru/strings.php +++ b/nsfw/lang/ru/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = ""; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = ""; $a->strings["Enable Content filter"] = "Включить фильтр содержимого"; $a->strings["Comma separated list of keywords to hide"] = "ключевые слова, которые скрыть (список через запятую)"; $a->strings["Submit"] = "Подтвердить"; diff --git a/nsfw/lang/zh-cn/strings.php b/nsfw/lang/zh-cn/strings.php index 0669361a..44e9cc57 100644 --- a/nsfw/lang/zh-cn/strings.php +++ b/nsfw/lang/zh-cn/strings.php @@ -1,7 +1,7 @@ strings["Not Safe For Work (General Purpose Content Filter) settings"] = "工作不安全(通用内容过滤)设置"; -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "这个插件找您下面输入的词在所有的文章里,和把包括那些词的内容隐藏,省得不妥当的时候表示,比如性的影射在办公室里。是礼貌和建议的把什么包括裸体的内容跟#NSFW标签。这个过滤也会符合设么别的您输入的词,从而能当通用内容过滤有用的。"; +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "这个插件找您下面输入的词在所有的文章里,和把包括那些词的内容隐藏,省得不妥当的时候表示,比如性的影射在办公室里。是礼貌和建议的把什么包括裸体的内容跟#NSFW标签。这个过滤也会符合设么别的您输入的词,从而能当通用内容过滤有用的。"; $a->strings["Enable Content filter"] = "使内容过滤可用"; $a->strings["Comma separated list of keywords to hide"] = "逗号分隔单词要隐藏"; $a->strings["Submit"] = "提交"; diff --git a/openstreetmap/README b/openstreetmap/README index beac3a21..93f231c6 100644 --- a/openstreetmap/README +++ b/openstreetmap/README @@ -1,4 +1,4 @@ - ____ OpenStreetMap Plugin ____ + ____ OpenStreetMap Addon ____ by Mike Macgirvin Klaus Weidenbach @@ -6,7 +6,7 @@ This addon allows you to use OpenStreetMap for displaying locations. ___ Requirements ___ -To use this plugin you need a tile Server that provides the maps. +To use this addon you need a tile Server that provides the maps. OpenStreetMap data is free for everyone to use. Their tile servers are not. Please take a look at their "Tile Usage Policy": http://wiki.openstreetmap.org/wiki/Tile_usage_policy @@ -19,9 +19,9 @@ ___ Configuration ___ If you for any reason prefer to use a configuration file instead of the admin panels, please refer to the Alternative Configuration below. -Activate the plugin from your admin panel. +Activate the addon from your admin panel. -You can now add a Tile Server and default zoom level in the plugin settings +You can now add a Tile Server and default zoom level in the addon settings page of your admin panel. The Time Server URL points to the tile server you want to use. Use the full URL, diff --git a/pageheader/README b/pageheader/README index d3fbf9ea..c5d0fa3d 100644 --- a/pageheader/README +++ b/pageheader/README @@ -2,7 +2,7 @@ Page Header For server admins only. Displays a text message for system announcements' -The message is entered in the admin account at settings, Plugin settings. +The message is entered in the admin account at settings, Addon settings. If you want to use HTML in the pageheader, create a file called pageheader.html in the document root of your friendica instance and add the html there. \ No newline at end of file diff --git a/piwik/README.md b/piwik/README.md index 0ac2ff72..37ece2f0 100644 --- a/piwik/README.md +++ b/piwik/README.md @@ -1,4 +1,4 @@ -Piwik Plugin +Piwik Addon ============ by Tobias Diekershoff and Klaus Weidenbach @@ -9,7 +9,7 @@ tool Piwik into the Friendica pages. Requirements ------------ -To use this plugin you need a [piwik](http://piwik.org/) installation. +To use this addon you need a [piwik](http://piwik.org/) installation. Where to find ------------- diff --git a/planets/lang/C/messages.po b/planets/lang/C/messages.po index 843752a1..f0773cc2 100644 --- a/planets/lang/C/messages.po +++ b/planets/lang/C/messages.po @@ -22,7 +22,7 @@ msgid "Planets Settings" msgstr "" #: planets.php:152 -msgid "Enable Planets Plugin" +msgid "Enable Planets Addon" msgstr "" #: planets.php:158 diff --git a/planets/lang/ca/strings.php b/planets/lang/ca/strings.php index 79fdd6be..625dcab9 100644 --- a/planets/lang/ca/strings.php +++ b/planets/lang/ca/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Ajustos de Planet"; -$a->strings["Enable Planets Plugin"] = "Activa Plugin de Planet"; +$a->strings["Enable Planets Addon"] = "Activa Addon de Planet"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/cs/messages.po b/planets/lang/cs/messages.po index c47ff06c..ac2b9c74 100644 --- a/planets/lang/cs/messages.po +++ b/planets/lang/cs/messages.po @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Planets Nastavení" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Povolit Planets plugin" +msgid "Enable Planets Addon" +msgstr "Povolit Planets addon" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/cs/strings.php b/planets/lang/cs/strings.php index 268f3192..c4c0524d 100644 --- a/planets/lang/cs/strings.php +++ b/planets/lang/cs/strings.php @@ -6,5 +6,5 @@ function string_plural_select_cs($n){ }} ; $a->strings["Planets Settings"] = "Planets Nastavení"; -$a->strings["Enable Planets Plugin"] = "Povolit Planets plugin"; +$a->strings["Enable Planets Addon"] = "Povolit Planets addon"; $a->strings["Submit"] = "Odeslat"; diff --git a/planets/lang/de/messages.po b/planets/lang/de/messages.po index 42788d56..89f4d07a 100644 --- a/planets/lang/de/messages.po +++ b/planets/lang/de/messages.po @@ -25,8 +25,8 @@ msgid "Planets Settings" msgstr "Planeten Einstellungen" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Planeten-Plugin aktivieren" +msgid "Enable Planets Addon" +msgstr "Planeten-Addon aktivieren" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/de/strings.php b/planets/lang/de/strings.php index ab513fac..653d025b 100644 --- a/planets/lang/de/strings.php +++ b/planets/lang/de/strings.php @@ -6,5 +6,5 @@ function string_plural_select_de($n){ }} ; $a->strings["Planets Settings"] = "Planeten Einstellungen"; -$a->strings["Enable Planets Plugin"] = "Planeten-Plugin aktivieren"; +$a->strings["Enable Planets Addon"] = "Planeten-Addon aktivieren"; $a->strings["Submit"] = "Senden"; diff --git a/planets/lang/eo/strings.php b/planets/lang/eo/strings.php index 2f9ff97c..c6b6d413 100644 --- a/planets/lang/eo/strings.php +++ b/planets/lang/eo/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Agordo pri Planets"; -$a->strings["Enable Planets Plugin"] = "Ŝalti la Planets kromprogamon"; +$a->strings["Enable Planets Addon"] = "Ŝalti la Planets kromprogamon"; $a->strings["Submit"] = "Sendi"; diff --git a/planets/lang/es/messages.po b/planets/lang/es/messages.po index 294da082..b1e33659 100644 --- a/planets/lang/es/messages.po +++ b/planets/lang/es/messages.po @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Ajustes de Planets" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Habilite el plugin Planets" +msgid "Enable Planets Addon" +msgstr "Habilite eladdonPlanets" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/es/strings.php b/planets/lang/es/strings.php index 8c7ef65d..2fd5ed90 100644 --- a/planets/lang/es/strings.php +++ b/planets/lang/es/strings.php @@ -6,5 +6,5 @@ function string_plural_select_es($n){ }} ; $a->strings["Planets Settings"] = "Ajustes de Planets"; -$a->strings["Enable Planets Plugin"] = "Habilite el plugin Planets"; +$a->strings["Enable Planets Addon"] = "Habilite el addon Planets"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/fr/strings.php b/planets/lang/fr/strings.php index 505d24c3..b4524f10 100644 --- a/planets/lang/fr/strings.php +++ b/planets/lang/fr/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Réglages des Planets"; -$a->strings["Enable Planets Plugin"] = "Activer Planets"; +$a->strings["Enable Planets Addon"] = "Activer Planets"; $a->strings["Submit"] = "Envoyer"; diff --git a/planets/lang/is/strings.php b/planets/lang/is/strings.php index d59b838f..82f8b728 100644 --- a/planets/lang/is/strings.php +++ b/planets/lang/is/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/planets/lang/it/messages.po b/planets/lang/it/messages.po index 4cb0b694..26c8e03d 100644 --- a/planets/lang/it/messages.po +++ b/planets/lang/it/messages.po @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Impostazioni \"Pianeti\"" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Abilita il plugin \"Pianeti\"" +msgid "Enable Planets Addon" +msgstr "Abilita il addon\"Pianeti\"" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/it/strings.php b/planets/lang/it/strings.php index 1cfa66e6..c568fb36 100644 --- a/planets/lang/it/strings.php +++ b/planets/lang/it/strings.php @@ -6,5 +6,5 @@ function string_plural_select_it($n){ }} ; $a->strings["Planets Settings"] = "Impostazioni \"Pianeti\""; -$a->strings["Enable Planets Plugin"] = "Abilita il plugin \"Pianeti\""; +$a->strings["Enable Planets Addon"] = "Abilita il addon \"Pianeti\""; $a->strings["Submit"] = "Invia"; diff --git a/planets/lang/nb-no/strings.php b/planets/lang/nb-no/strings.php index 628eb2ae..7d8fbe48 100644 --- a/planets/lang/nb-no/strings.php +++ b/planets/lang/nb-no/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/planets/lang/pl/strings.php b/planets/lang/pl/strings.php index 97120046..0e05c0a4 100644 --- a/planets/lang/pl/strings.php +++ b/planets/lang/pl/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/planets/lang/pt-br/strings.php b/planets/lang/pt-br/strings.php index 5cb179c5..6f3b8f10 100644 --- a/planets/lang/pt-br/strings.php +++ b/planets/lang/pt-br/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Configuração dos planetas"; -$a->strings["Enable Planets Plugin"] = "Habilita configuração dos planetas"; +$a->strings["Enable Planets Addon"] = "Habilita configuração dos planetas"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/ro/messages.po b/planets/lang/ro/messages.po index 67932a8b..b94394ae 100644 --- a/planets/lang/ro/messages.po +++ b/planets/lang/ro/messages.po @@ -24,7 +24,7 @@ msgid "Planets Settings" msgstr "Configurări Planets" #: planets.php:152 -msgid "Enable Planets Plugin" +msgid "Enable Planets Addon" msgstr "Activare Modul Planets" #: planets.php:158 diff --git a/planets/lang/ro/strings.php b/planets/lang/ro/strings.php index 93736aad..19a2e3de 100644 --- a/planets/lang/ro/strings.php +++ b/planets/lang/ro/strings.php @@ -6,5 +6,5 @@ function string_plural_select_ro($n){ }} ; $a->strings["Planets Settings"] = "Configurări Planets"; -$a->strings["Enable Planets Plugin"] = "Activare Modul Planets"; +$a->strings["Enable Planets Addon"] = "Activare Modul Planets"; $a->strings["Submit"] = "Trimite"; diff --git a/planets/lang/ru/strings.php b/planets/lang/ru/strings.php index 1902b826..b84e2bbc 100644 --- a/planets/lang/ru/strings.php +++ b/planets/lang/ru/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Подтвердить"; diff --git a/planets/lang/zh-cn/strings.php b/planets/lang/zh-cn/strings.php index ac066c77..68de35c6 100644 --- a/planets/lang/zh-cn/strings.php +++ b/planets/lang/zh-cn/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "行星设置"; -$a->strings["Enable Planets Plugin"] = "使行星插件可用"; +$a->strings["Enable Planets Addon"] = "使行星插件可用"; $a->strings["Submit"] = "提交"; diff --git a/public_server/README.md b/public_server/README.md index d323ff0f..b1fb49df 100644 --- a/public_server/README.md +++ b/public_server/README.md @@ -2,10 +2,10 @@ Public Server ============= -Public Server is a Friendica plugin which implements automatic account & post expiration so that a site may be used as a public +Public Server is a Friendica addon which implements automatic account & post expiration so that a site may be used as a public test bed with reduced data retention. -This is a modified version of the testdrive plugin, DO NOT ACTIVATE AT THE SAME TIME AS THE TESTDRIVE PLUGIN. +This is a modified version of the testdrive addon, DO NOT ACTIVATE AT THE SAME TIME AS THE TESTDRIVE ADDON. //When an account is created on the site, it is given a hard expiration date of $a->config['public_server']['expiredays'] = 30; @@ -19,7 +19,7 @@ This is a modified version of the testdrive plugin, DO NOT ACTIVATE AT THE SAME $a->config['public_server']['flagposts'] = 90; $a->config['public_server']['flagpostsexpire'] = 146; -Set these in your .htconfig.php file. By default nothing is defined in case the plugin is activated accidentally. +Set these in your .htconfig.php file. By default nothing is defined in case the addon is activated accidentally. They can be ommitted or set to 0 to disable each option. The default values are those used by friendica.eu, change these as desired. diff --git a/pumpio/lang/C/messages.po b/pumpio/lang/C/messages.po index 84ce856f..a35f0410 100644 --- a/pumpio/lang/C/messages.po +++ b/pumpio/lang/C/messages.po @@ -59,7 +59,7 @@ msgid "Import the remote timeline" msgstr "" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "" #: pumpio.php:260 diff --git a/pumpio/lang/cs/messages.po b/pumpio/lang/cs/messages.po index 157699e3..f5f9f35c 100644 --- a/pumpio/lang/cs/messages.po +++ b/pumpio/lang/cs/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importovat vzdálenou časovou osu" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Aktivovat pump.io Post Plugin" +msgid "Enable pump.io Post Addon" +msgstr "Aktivovat pump.io Post Addon" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/cs/strings.php b/pumpio/lang/cs/strings.php index 6af0c813..e5bc749d 100644 --- a/pumpio/lang/cs/strings.php +++ b/pumpio/lang/cs/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "uživatelské jméno $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "jméno serveru pump.io (bez \"http://\" nebo \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Přihlásit ke spojení na pump.io"; $a->strings["Import the remote timeline"] = "Importovat vzdálenou časovou osu"; -$a->strings["Enable pump.io Post Plugin"] = "Aktivovat pump.io Post Plugin"; +$a->strings["Enable pump.io Post Addon"] = "Aktivovat pump.io Post Addon"; $a->strings["Post to pump.io by default"] = "Defaultní umístění na pump.oi "; $a->strings["Should posts be public?"] = "Mají být příspěvky veřejné?"; $a->strings["Mirror all public posts"] = "Zrcadlit všechny veřejné příspěvky"; diff --git a/pumpio/lang/de/messages.po b/pumpio/lang/de/messages.po index 4a85f793..acfb87fa 100644 --- a/pumpio/lang/de/messages.po +++ b/pumpio/lang/de/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importiere die entfernte Zeitleiste" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Pump.io-Post-Plugin aktivieren" +msgid "Enable pump.io Post Addon" +msgstr "Pump.io-Post-Addon aktivieren" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/de/strings.php b/pumpio/lang/de/strings.php index 91c1735c..4f2c8c88 100644 --- a/pumpio/lang/de/strings.php +++ b/pumpio/lang/de/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = " Pump.io Nutzername $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = " Pump.io Servername (ohne \"http://\" oder \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Authentifiziere deine Pump.io Verbindung"; $a->strings["Import the remote timeline"] = "Importiere die entfernte Zeitleiste"; -$a->strings["Enable pump.io Post Plugin"] = "Pump.io-Post-Plugin aktivieren"; +$a->strings["Enable pump.io Post Addon"] = "Pump.io-Post-Addon aktivieren"; $a->strings["Post to pump.io by default"] = "Standardmäßig bei Pump.io veröffentlichen"; $a->strings["Should posts be public?"] = "Sollen Nachrichten öffentlich sein ?"; $a->strings["Mirror all public posts"] = "Spiegle alle öffentlichen Nachrichten"; diff --git a/pumpio/lang/es/messages.po b/pumpio/lang/es/messages.po index dd381626..86981996 100644 --- a/pumpio/lang/es/messages.po +++ b/pumpio/lang/es/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importar la línea de tiempo remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Habilitar Plugin de publicación de Pump.io" +msgid "Enable pump.io Post Addon" +msgstr "Habilitar Addon de publicación de Pump.io" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/es/strings.php b/pumpio/lang/es/strings.php index 8f0a8bfb..df9630b2 100644 --- a/pumpio/lang/es/strings.php +++ b/pumpio/lang/es/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nombre de usuario de $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "Nombre de servidor de Pump.io (sin \"http://\" o \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Autenticar su conexión de Pump.io"; $a->strings["Import the remote timeline"] = "Importar la línea de tiempo remota"; -$a->strings["Enable pump.io Post Plugin"] = "Habilitar Plugin de publicación de Pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Habilitar Addon de publicación de Pump.io"; $a->strings["Post to pump.io by default"] = "Publicar en Pump.io por defecto"; $a->strings["Should posts be public?"] = "¿Deberían de ser públicas las entradas?"; $a->strings["Mirror all public posts"] = "Reflejar todas las entradas públicas"; diff --git a/pumpio/lang/fr/messages.po b/pumpio/lang/fr/messages.po index 9258d619..28c5891f 100644 --- a/pumpio/lang/fr/messages.po +++ b/pumpio/lang/fr/messages.po @@ -62,7 +62,7 @@ msgid "Import the remote timeline" msgstr "Importer la timeline distante" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "" #: pumpio.php:260 diff --git a/pumpio/lang/fr/strings.php b/pumpio/lang/fr/strings.php index 3f933173..3e69c272 100644 --- a/pumpio/lang/fr/strings.php +++ b/pumpio/lang/fr/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nom d'utilisateur pu $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = ""; $a->strings["Authenticate your pump.io connection"] = ""; $a->strings["Import the remote timeline"] = "Importer la timeline distante"; -$a->strings["Enable pump.io Post Plugin"] = ""; +$a->strings["Enable pump.io Post Addon"] = ""; $a->strings["Post to pump.io by default"] = "Publier sur pump.io par défaut"; $a->strings["Should posts be public?"] = "Les messages devraient être publiques ?"; $a->strings["Mirror all public posts"] = ""; diff --git a/pumpio/lang/it/messages.po b/pumpio/lang/it/messages.po index 3529a080..9e98acfd 100644 --- a/pumpio/lang/it/messages.po +++ b/pumpio/lang/it/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importa la timeline remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Abilita il plugin di invio ad pump.io" +msgid "Enable pump.io Post Addon" +msgstr "Abilita iladdondi invio ad pump.io" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/it/strings.php b/pumpio/lang/it/strings.php index 3a26670a..087a188a 100644 --- a/pumpio/lang/it/strings.php +++ b/pumpio/lang/it/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "nome utente pump.io $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "nome del server pump.io (senza \"http://\" o \"https://\")"; $a->strings["Authenticate your pump.io connection"] = "Autentica la tua connessione pump.io"; $a->strings["Import the remote timeline"] = "Importa la timeline remota"; -$a->strings["Enable pump.io Post Plugin"] = "Abilita il plugin di invio ad pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Abilita il addon di invio ad pump.io"; $a->strings["Post to pump.io by default"] = "Invia sempre a pump.io"; $a->strings["Should posts be public?"] = "I messaggi devono essere pubblici?"; $a->strings["Mirror all public posts"] = "Clona tutti i messaggi pubblici"; diff --git a/pumpio/lang/pt-br/messages.po b/pumpio/lang/pt-br/messages.po index 8f02e040..bceaa2fe 100644 --- a/pumpio/lang/pt-br/messages.po +++ b/pumpio/lang/pt-br/messages.po @@ -61,7 +61,7 @@ msgid "Import the remote timeline" msgstr "Importar a linha do tempo remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "Habilitar plug-in para publicar no Pump.io" #: pumpio.php:260 diff --git a/pumpio/lang/pt-br/strings.php b/pumpio/lang/pt-br/strings.php index 56890a66..e93516b4 100644 --- a/pumpio/lang/pt-br/strings.php +++ b/pumpio/lang/pt-br/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nome de usuário no $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = ""; $a->strings["Authenticate your pump.io connection"] = ""; $a->strings["Import the remote timeline"] = "Importar a linha do tempo remota"; -$a->strings["Enable pump.io Post Plugin"] = "Habilitar plug-in para publicar no Pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Habilitar plug-in para publicar no Pump.io"; $a->strings["Post to pump.io by default"] = "Publicar no Pump.io por padrão"; $a->strings["Should posts be public?"] = ""; $a->strings["Mirror all public posts"] = ""; diff --git a/pumpio/lang/ro/messages.po b/pumpio/lang/ro/messages.po index ae3f945b..7ac8ef7f 100644 --- a/pumpio/lang/ro/messages.po +++ b/pumpio/lang/ro/messages.po @@ -60,7 +60,7 @@ msgid "Import the remote timeline" msgstr "Importare cronologie la distanță" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "Activare Modul Postare pump.io" #: pumpio.php:260 diff --git a/pumpio/lang/ro/strings.php b/pumpio/lang/ro/strings.php index bd8bf5f1..b0ee9a25 100644 --- a/pumpio/lang/ro/strings.php +++ b/pumpio/lang/ro/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Utilizator pump.io ( $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "Nume server pump.io (fără \"http://\" ori \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Autentificați-vă conectarea la pump.io"; $a->strings["Import the remote timeline"] = "Importare cronologie la distanță"; -$a->strings["Enable pump.io Post Plugin"] = "Activare Modul Postare pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Activare Modul Postare pump.io"; $a->strings["Post to pump.io by default"] = "Postați implicit pe pump.io"; $a->strings["Should posts be public?"] = "Postările ar trebui sa fie publice?"; $a->strings["Mirror all public posts"] = "Reproducere pentru toate postările publice"; diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 8aa1588a..be4db5fa 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -276,7 +276,7 @@ function pumpio_settings(&$a,&$s) { $s .= '
'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; diff --git a/randplace/lang/C/messages.po b/randplace/lang/C/messages.po index 3494eafd..3d2ed587 100644 --- a/randplace/lang/C/messages.po +++ b/randplace/lang/C/messages.po @@ -22,7 +22,7 @@ msgid "Randplace Settings" msgstr "" #: randplace.php:171 -msgid "Enable Randplace Plugin" +msgid "Enable Randplace Addon" msgstr "" #: randplace.php:177 diff --git a/randplace/lang/ca/strings.php b/randplace/lang/ca/strings.php index 4e2fe763..120fab8c 100644 --- a/randplace/lang/ca/strings.php +++ b/randplace/lang/ca/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Configuració de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar el Plugin de Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar el Addon de Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/cs/messages.po b/randplace/lang/cs/messages.po index 6cc09f7d..09032861 100644 --- a/randplace/lang/cs/messages.po +++ b/randplace/lang/cs/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Randplace Nastavení" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Povolit Randplace Plugin" +msgid "Enable Randplace Addon" +msgstr "Povolit Randplace Addon" #: randplace.php:177 msgid "Save Settings" diff --git a/randplace/lang/cs/strings.php b/randplace/lang/cs/strings.php index dae496fc..a5a72e9e 100644 --- a/randplace/lang/cs/strings.php +++ b/randplace/lang/cs/strings.php @@ -6,5 +6,5 @@ function string_plural_select_cs($n){ }} ; $a->strings["Randplace Settings"] = "Randplace Nastavení"; -$a->strings["Enable Randplace Plugin"] = "Povolit Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Povolit Randplace Addon"; $a->strings["Save Settings"] = "Uložit Nastavení"; diff --git a/randplace/lang/de/messages.po b/randplace/lang/de/messages.po index 8735e20d..c575242f 100644 --- a/randplace/lang/de/messages.po +++ b/randplace/lang/de/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Randplace-Einstellungen" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Randplace-Plugin aktivieren" +msgid "Enable Randplace Addon" +msgstr "Randplace-Addon aktivieren" #: randplace.php:177 msgid "Save Settings" diff --git a/randplace/lang/de/strings.php b/randplace/lang/de/strings.php index 29bec858..5a5b69f3 100644 --- a/randplace/lang/de/strings.php +++ b/randplace/lang/de/strings.php @@ -6,5 +6,5 @@ function string_plural_select_de($n){ }} ; $a->strings["Randplace Settings"] = "Randplace-Einstellungen"; -$a->strings["Enable Randplace Plugin"] = "Randplace-Plugin aktivieren"; +$a->strings["Enable Randplace Addon"] = "Randplace-Addon aktivieren"; $a->strings["Save Settings"] = "Einstellungen speichern"; diff --git a/randplace/lang/eo/strings.php b/randplace/lang/eo/strings.php index 45502093..38e6ebfa 100644 --- a/randplace/lang/eo/strings.php +++ b/randplace/lang/eo/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Randplace agordoj."; -$a->strings["Enable Randplace Plugin"] = "Aktivigi la Randplace kromprogramon."; +$a->strings["Enable Randplace Addon"] = "Aktivigi la Randplace kromprogramon."; $a->strings["Submit"] = "Sendi"; diff --git a/randplace/lang/es/messages.po b/randplace/lang/es/messages.po index 0b63aa17..7f0a1047 100644 --- a/randplace/lang/es/messages.po +++ b/randplace/lang/es/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Ajustes de Randplace" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Habilitar el Plugin de Randplace" +msgid "Enable Randplace Addon" +msgstr "Habilitar el Addon de Randplace" #: randplace.php:177 msgid "Submit" diff --git a/randplace/lang/es/strings.php b/randplace/lang/es/strings.php index 716845ac..b196c6b8 100644 --- a/randplace/lang/es/strings.php +++ b/randplace/lang/es/strings.php @@ -6,5 +6,5 @@ function string_plural_select_es($n){ }} ; $a->strings["Randplace Settings"] = "Ajustes de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar el Plugin de Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar el Addon de Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/fr/strings.php b/randplace/lang/fr/strings.php index f85b1cba..f9d354b4 100644 --- a/randplace/lang/fr/strings.php +++ b/randplace/lang/fr/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Réglages de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Activer l'extension Randplace"; +$a->strings["Enable Randplace Addon"] = "Activer l'extension Randplace"; $a->strings["Submit"] = "Envoyer"; diff --git a/randplace/lang/is/strings.php b/randplace/lang/is/strings.php index 924285d4..85e49238 100644 --- a/randplace/lang/is/strings.php +++ b/randplace/lang/is/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Stilla Randplace"; -$a->strings["Enable Randplace Plugin"] = "Kveikja á Randplace einingu"; +$a->strings["Enable Randplace Addon"] = "Kveikja á Randplace einingu"; $a->strings["Submit"] = "Senda inn"; diff --git a/randplace/lang/it/messages.po b/randplace/lang/it/messages.po index d2fa8903..0b54be4c 100644 --- a/randplace/lang/it/messages.po +++ b/randplace/lang/it/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Impostazioni \"Posizione casuale\"" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Abilita il plugin \"Posizione casuale\"" +msgid "Enable Randplace Addon" +msgstr "Abilita il addon \"Posizione casuale\"" #: randplace.php:177 msgid "Submit" diff --git a/randplace/lang/it/strings.php b/randplace/lang/it/strings.php index 08e17fa7..97dfe38a 100644 --- a/randplace/lang/it/strings.php +++ b/randplace/lang/it/strings.php @@ -6,5 +6,5 @@ function string_plural_select_it($n){ }} ; $a->strings["Randplace Settings"] = "Impostazioni \"Posizione casuale\""; -$a->strings["Enable Randplace Plugin"] = "Abilita il plugin \"Posizione casuale\""; +$a->strings["Enable Randplace Addon"] = "Abilita il addon \"Posizione casuale\""; $a->strings["Submit"] = "Invia"; diff --git a/randplace/lang/nb-no/strings.php b/randplace/lang/nb-no/strings.php index 16518f39..0675219c 100644 --- a/randplace/lang/nb-no/strings.php +++ b/randplace/lang/nb-no/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Tilfeldig plassering"; -$a->strings["Enable Randplace Plugin"] = "Aktiver Tilfeldig plassering-tillegget"; +$a->strings["Enable Randplace Addon"] = "Aktiver Tilfeldig plassering-tillegget"; $a->strings["Submit"] = "Lagre"; diff --git a/randplace/lang/pl/strings.php b/randplace/lang/pl/strings.php index 3f1b2f9f..4166face 100644 --- a/randplace/lang/pl/strings.php +++ b/randplace/lang/pl/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Ustawienia Randplace"; -$a->strings["Enable Randplace Plugin"] = "Włącz Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Włącz Randplace Addon"; $a->strings["Submit"] = "Potwierdź"; diff --git a/randplace/lang/pt-br/strings.php b/randplace/lang/pt-br/strings.php index 1f010b42..b41c865d 100644 --- a/randplace/lang/pt-br/strings.php +++ b/randplace/lang/pt-br/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Configurações do Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar o plugin Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar o addon Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/ro/messages.po b/randplace/lang/ro/messages.po index 1138665f..f900373f 100644 --- a/randplace/lang/ro/messages.po +++ b/randplace/lang/ro/messages.po @@ -23,7 +23,7 @@ msgid "Randplace Settings" msgstr "Configurări Randplace" #: randplace.php:171 -msgid "Enable Randplace Plugin" +msgid "Enable Randplace Addon" msgstr "Activare Modul Randplace" #: randplace.php:177 diff --git a/randplace/lang/ro/strings.php b/randplace/lang/ro/strings.php index 9ef0274f..81607079 100644 --- a/randplace/lang/ro/strings.php +++ b/randplace/lang/ro/strings.php @@ -6,5 +6,5 @@ function string_plural_select_ro($n){ }} ; $a->strings["Randplace Settings"] = "Configurări Randplace"; -$a->strings["Enable Randplace Plugin"] = "Activare Modul Randplace"; +$a->strings["Enable Randplace Addon"] = "Activare Modul Randplace"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/randplace/lang/ru/strings.php b/randplace/lang/ru/strings.php index 482c4ed0..46733dc6 100644 --- a/randplace/lang/ru/strings.php +++ b/randplace/lang/ru/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Настройки Случайного места"; -$a->strings["Enable Randplace Plugin"] = "Включить Randplace плагин"; +$a->strings["Enable Randplace Addon"] = "Включить Randplace плагин"; $a->strings["Submit"] = "Подтвердить"; diff --git a/randplace/lang/sv/strings.php b/randplace/lang/sv/strings.php index eec3a7bd..c47a51ca 100644 --- a/randplace/lang/sv/strings.php +++ b/randplace/lang/sv/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Randplace Settings"; -$a->strings["Enable Randplace Plugin"] = "Enable Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Enable Randplace Addon"; $a->strings["Submit"] = "Spara"; diff --git a/randplace/lang/zh-cn/strings.php b/randplace/lang/zh-cn/strings.php index 5b96f086..2b9b82e3 100644 --- a/randplace/lang/zh-cn/strings.php +++ b/randplace/lang/zh-cn/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "随意下设置"; -$a->strings["Enable Randplace Plugin"] = "使随意下插件能用"; +$a->strings["Enable Randplace Addon"] = "使随意下插件能用"; $a->strings["Submit"] = "提交"; diff --git a/remote_permissions/README.md b/remote_permissions/README.md index b9e38582..33e106ce 100644 --- a/remote_permissions/README.md +++ b/remote_permissions/README.md @@ -1,8 +1,8 @@ -The Remote Permissions plugin enables recipients of private posts to see who else has received the post. This can be beneficial on community servers where people may want to modify the way they speak depending on who can see their comments to the post. +The Remote Permissions addon enables recipients of private posts to see who else has received the post. This can be beneficial on community servers where people may want to modify the way they speak depending on who can see their comments to the post. -Note that since Friendica is federated, the local hub may have posts that originated elsewhere. In that case, the plugin has no way of knowing all the recipients of the post, and it must settle for finding out who else can see it on the local hub. +Note that since Friendica is federated, the local hub may have posts that originated elsewhere. In that case, the addon has no way of knowing all the recipients of the post, and it must settle for finding out who else can see it on the local hub. -The hub admin can specify one of two behaviors for this plugin: +The hub admin can specify one of two behaviors for this addon: * **Global:** every private post on the local hub will show all recipients (or at least the ones it can discover) of the post to any other users on the local hub * **Individual:** only private posts from those users on the local hub who "opt-in" will show the post recipients. None of the private posts that originated elsewhere will show even partial lists of post recipients diff --git a/sniper/sniper.php b/sniper/sniper.php index 2be7165d..ffebedb3 100644 --- a/sniper/sniper.php +++ b/sniper/sniper.php @@ -1,7 +1,7 @@ config['testdrive']['expiredays'] = 30; Set this in your .htconfig.php file to allow a 30 day test drive period. By default no expiration period is defined -in case the plugin is activated accidentally. +in case the addon is activated accidentally. -There is no opportunity to extend an expired account using this plugin. Expiration is final. Other plugins may be created -which charge for service and extend the expiration as long as a balance is maintained. This plugin is purely for creating +There is no opportunity to extend an expired account using this addon. Expiration is final. Other addons may be created +which charge for service and extend the expiration as long as a balance is maintained. This addon is purely for creating a limited use test site. An email warning will be sent out approximately five days before the expiration occurs. Once it occurs logins and many diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index db16d214..f28d8d55 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -2,7 +2,7 @@ /** * Name: testdrive - * Description: Sample Friendica plugin/addon for creating a test drive Friendica site with automatic account expiration. + * Description: Sample Friendica addon for creating a test drive Friendica site with automatic account expiration. * Version: 1.0 * Author: Mike Macgirvin */ diff --git a/tumblr/README.md b/tumblr/README.md index fb20dac2..57ca145a 100644 --- a/tumblr/README.md +++ b/tumblr/README.md @@ -4,7 +4,7 @@ Installation [Register](http://www.tumblr.com/oauth/apps) an application and use (your server name)/addon/tumblr/callback.php as callback URL -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/plugins/tumblr). +After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/tumblr). Notice ------ diff --git a/tumblr/lang/C/messages.po b/tumblr/lang/C/messages.po index b826c030..d2e4a909 100644 --- a/tumblr/lang/C/messages.po +++ b/tumblr/lang/C/messages.po @@ -42,7 +42,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "" #: tumblr.php:197 diff --git a/tumblr/lang/ca/strings.php b/tumblr/lang/ca/strings.php index b1766618..9ded80d2 100644 --- a/tumblr/lang/ca/strings.php +++ b/tumblr/lang/ca/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = ""; $a->strings["Post to Tumblr"] = "Publica-ho al Tumblr"; $a->strings["Tumblr Post Settings"] = "Configuració d'Enviaments de Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = "Habilita el plugin de enviaments de Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Habilita el addon de enviaments de Tumblr"; $a->strings["Post to Tumblr by default"] = "Enviar a Tumblr per defecte"; $a->strings["Post to page:"] = ""; $a->strings["You are not authenticated to tumblr"] = ""; diff --git a/tumblr/lang/cs/messages.po b/tumblr/lang/cs/messages.po index 83d24f70..a084ca65 100644 --- a/tumblr/lang/cs/messages.po +++ b/tumblr/lang/cs/messages.po @@ -44,7 +44,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Znovu) přihlásit k Vaší tumblr stránce" #: tumblr.php:198 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Povolit rozšíření Tumbir" #: tumblr.php:203 diff --git a/tumblr/lang/cs/strings.php b/tumblr/lang/cs/strings.php index 43673188..8a8741d2 100644 --- a/tumblr/lang/cs/strings.php +++ b/tumblr/lang/cs/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "návrat ke stránce konektor"; $a->strings["Post to Tumblr"] = "Příspěvek na Tumbir"; $a->strings["Tumblr Export"] = "Tumbir export"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Znovu) přihlásit k Vaší tumblr stránce"; -$a->strings["Enable Tumblr Post Plugin"] = "Povolit rozšíření Tumbir"; +$a->strings["Enable Tumblr Post Addon"] = "Povolit rozšíření Tumbir"; $a->strings["Post to Tumblr by default"] = "Standardně posílat příspěvky na Tumbir"; $a->strings["Post to page:"] = "Příspěvek ke stránce:"; $a->strings["You are not authenticated to tumblr"] = "Nyní nejste přihlášen k tumblr."; diff --git a/tumblr/lang/de/messages.po b/tumblr/lang/de/messages.po index d4040002..aa3c16cf 100644 --- a/tumblr/lang/de/messages.po +++ b/tumblr/lang/de/messages.po @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re-)Authentifizierung deiner tumblr Seite" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Tumblr-Post-Plugin aktivieren" +msgid "Enable Tumblr Post Addon" +msgstr "Tumblr-Post-Addon aktivieren" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/de/strings.php b/tumblr/lang/de/strings.php index 9ba39987..87fd5c50 100644 --- a/tumblr/lang/de/strings.php +++ b/tumblr/lang/de/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "zurück zur Connector Seite"; $a->strings["Post to Tumblr"] = "Auf Tumblr veröffentlichen"; $a->strings["Tumblr Post Settings"] = "Tumblr-Beitragseinstellungen"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re-)Authentifizierung deiner tumblr Seite"; -$a->strings["Enable Tumblr Post Plugin"] = "Tumblr-Post-Plugin aktivieren"; +$a->strings["Enable Tumblr Post Addon"] = "Tumblr-Post-Addon aktivieren"; $a->strings["Post to Tumblr by default"] = "Standardmäßig bei Tumblr veröffentlichen"; $a->strings["Post to page:"] = "Auf tumblr veröffentlichen"; $a->strings["You are not authenticated to tumblr"] = "Du bist gegenüber tumblr nicht authentifiziert"; diff --git a/tumblr/lang/eo/strings.php b/tumblr/lang/eo/strings.php index 375ea292..12caadbf 100644 --- a/tumblr/lang/eo/strings.php +++ b/tumblr/lang/eo/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Malpermesita."; $a->strings["Post to Tumblr"] = "Afiŝi al Tumblr"; $a->strings["Tumblr Post Settings"] = "Agordoj pri afiŝoj ĉe Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Ŝalti la kromprogramon por Tumblr afiŝoj"; +$a->strings["Enable Tumblr Post Addon"] = "Ŝalti la kromprogramon por Tumblr afiŝoj"; $a->strings["Post to Tumblr by default"] = "Defaŭlte afiŝi ĉe Tumblr"; $a->strings["Submit"] = "Sendi"; diff --git a/tumblr/lang/es/messages.po b/tumblr/lang/es/messages.po index 2f2eb431..5993bd53 100644 --- a/tumblr/lang/es/messages.po +++ b/tumblr/lang/es/messages.po @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re-)autenticar su página de tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Habilite el plugin Tumblr Post" +msgid "Enable Tumblr Post Addon" +msgstr "Habilite el addon Tumblr Post" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/es/strings.php b/tumblr/lang/es/strings.php index 3a6e5ce9..12d3d2d2 100644 --- a/tumblr/lang/es/strings.php +++ b/tumblr/lang/es/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "Vuelva a la página del conector" $a->strings["Post to Tumblr"] = "Publicar en Tumblr"; $a->strings["Tumblr Post Settings"] = "Ajustes de publicación de Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re-)autenticar su página de tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Habilite el plugin Tumblr Post"; +$a->strings["Enable Tumblr Post Addon"] = "Habilite el addon Tumblr Post"; $a->strings["Post to Tumblr by default"] = "Publique en Tumblr por defecto"; $a->strings["Post to page:"] = "Publicar en página:"; $a->strings["You are not authenticated to tumblr"] = "No está autenticado en tumblr"; diff --git a/tumblr/lang/fr/strings.php b/tumblr/lang/fr/strings.php index e23f85f7..c4d50431 100644 --- a/tumblr/lang/fr/strings.php +++ b/tumblr/lang/fr/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Permission refusée."; $a->strings["Post to Tumblr"] = "Publier sur Tumblr"; $a->strings["Tumblr Post Settings"] = "Réglages de Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Activer l'extension Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Activer l'extension Tumblr"; $a->strings["Post to Tumblr by default"] = "Publier sur Tumblr par défaut"; $a->strings["Submit"] = "Envoyer"; diff --git a/tumblr/lang/is/strings.php b/tumblr/lang/is/strings.php index cdd3d836..a477e8a6 100644 --- a/tumblr/lang/is/strings.php +++ b/tumblr/lang/is/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Heimild ekki veitt."; $a->strings["Post to Tumblr"] = "Senda fæslu til Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr færslu stillingar"; -$a->strings["Enable Tumblr Post Plugin"] = "Leyfa Tumblr færslu viðbót"; +$a->strings["Enable Tumblr Post Addon"] = "Leyfa Tumblr færslu viðbót"; $a->strings["Post to Tumblr by default"] = "Senda færslu á Tumblr sjálfvirkt"; $a->strings["Submit"] = "Senda inn"; diff --git a/tumblr/lang/it/messages.po b/tumblr/lang/it/messages.po index 11d5752a..581d2d78 100644 --- a/tumblr/lang/it/messages.po +++ b/tumblr/lang/it/messages.po @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Ri)Autenticati con la tua pagina Tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Abilita Plugin Tumblr" +msgid "Enable Tumblr Post Addon" +msgstr "Abilita Addon Tumblr" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/it/strings.php b/tumblr/lang/it/strings.php index 2c49b0f1..bda33389 100644 --- a/tumblr/lang/it/strings.php +++ b/tumblr/lang/it/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "ritorna alla pagina del connettor $a->strings["Post to Tumblr"] = "Invia a Tumblr"; $a->strings["Tumblr Post Settings"] = "Impostazioni di invio a Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Ri)Autenticati con la tua pagina Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Abilita Plugin Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Abilita Addon Tumblr"; $a->strings["Post to Tumblr by default"] = "Invia sempre a Tumblr"; $a->strings["Post to page:"] = "Invia alla pagina:"; $a->strings["You are not authenticated to tumblr"] = "Non sei autenticato su Tumblr"; diff --git a/tumblr/lang/nb-no/strings.php b/tumblr/lang/nb-no/strings.php index 73312854..024c5517 100644 --- a/tumblr/lang/nb-no/strings.php +++ b/tumblr/lang/nb-no/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Ingen tilgang."; $a->strings["Post to Tumblr"] = ""; $a->strings["Tumblr Post Settings"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = ""; +$a->strings["Enable Tumblr Post Addon"] = ""; $a->strings["Post to Tumblr by default"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/tumblr/lang/pl/strings.php b/tumblr/lang/pl/strings.php index 819c7c20..b01dddb6 100644 --- a/tumblr/lang/pl/strings.php +++ b/tumblr/lang/pl/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = ""; $a->strings["Post to Tumblr"] = "Opublikuj na Tumblrze"; $a->strings["Tumblr Post Settings"] = "Ustawienia postu Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = "Zezwól na wtyczkę postu Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Zezwól na wtyczkę postu Tumblr"; $a->strings["Post to Tumblr by default"] = "Post do Tumblr przez standard"; $a->strings["Post to page:"] = "Napisz na stronę:"; $a->strings["You are not authenticated to tumblr"] = ""; diff --git a/tumblr/lang/pt-br/messages.po b/tumblr/lang/pt-br/messages.po index 6c80433e..a0de33ad 100644 --- a/tumblr/lang/pt-br/messages.po +++ b/tumblr/lang/pt-br/messages.po @@ -44,7 +44,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re)autenticar sua página no Tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Habilitar plug-in para publicar no Tumblr" #: tumblr.php:197 diff --git a/tumblr/lang/pt-br/strings.php b/tumblr/lang/pt-br/strings.php index e800cd71..f77c85f2 100644 --- a/tumblr/lang/pt-br/strings.php +++ b/tumblr/lang/pt-br/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "voltar à página de conectores"; $a->strings["Post to Tumblr"] = "Publicar no Tumblr"; $a->strings["Tumblr Post Settings"] = "Configurações de publicação no Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re)autenticar sua página no Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Habilitar plug-in para publicar no Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Habilitar plug-in para publicar no Tumblr"; $a->strings["Post to Tumblr by default"] = "Publicar no Tumblr por padrão"; $a->strings["Post to page:"] = "Publicar na página:"; $a->strings["You are not authenticated to tumblr"] = "Você não se autenticou no Tumblr"; diff --git a/tumblr/lang/ro/messages.po b/tumblr/lang/ro/messages.po index 46748edd..4f3fba64 100644 --- a/tumblr/lang/ro/messages.po +++ b/tumblr/lang/ro/messages.po @@ -43,7 +43,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re- )Autentificare pagină tumblr " #: tumblr.php:198 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Activare Modul Postare pe Tumblr " #: tumblr.php:203 diff --git a/tumblr/lang/ro/strings.php b/tumblr/lang/ro/strings.php index 7262ca4c..60f96432 100644 --- a/tumblr/lang/ro/strings.php +++ b/tumblr/lang/ro/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "revenire la pagina de conectare"; $a->strings["Post to Tumblr"] = "Postați pe Tumblr"; $a->strings["Tumblr Export"] = "Export Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re- )Autentificare pagină tumblr "; -$a->strings["Enable Tumblr Post Plugin"] = "Activare Modul Postare pe Tumblr "; +$a->strings["Enable Tumblr Post Addon"] = "Activare Modul Postare pe Tumblr "; $a->strings["Post to Tumblr by default"] = "Postați implicit pe Tumblr"; $a->strings["Post to page:"] = "Postare pe pagina:"; $a->strings["You are not authenticated to tumblr"] = "Nu sunteți autentificat pe tumblr."; diff --git a/tumblr/lang/ru/strings.php b/tumblr/lang/ru/strings.php index 21d77245..cccb32c3 100644 --- a/tumblr/lang/ru/strings.php +++ b/tumblr/lang/ru/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Нет разрешения."; $a->strings["Post to Tumblr"] = "Написать в Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr Настройки сообщения"; -$a->strings["Enable Tumblr Post Plugin"] = "Включить Tumblr плагин сообщений"; +$a->strings["Enable Tumblr Post Addon"] = "Включить Tumblr плагин сообщений"; $a->strings["Post to Tumblr by default"] = "Сообщение Tumblr по умолчанию"; $a->strings["Submit"] = "Подтвердить"; diff --git a/tumblr/lang/zh-cn/strings.php b/tumblr/lang/zh-cn/strings.php index 0956e13e..da62cdba 100644 --- a/tumblr/lang/zh-cn/strings.php +++ b/tumblr/lang/zh-cn/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = "会连接器页"; $a->strings["Post to Tumblr"] = "发送到Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr发送设置"; $a->strings["(Re-)Authenticate your tumblr page"] = "再认证您的tumblr页"; -$a->strings["Enable Tumblr Post Plugin"] = "使Tumblr发送插件能够"; +$a->strings["Enable Tumblr Post Addon"] = "使Tumblr发送插件能够"; $a->strings["Post to Tumblr by default"] = "默认地给Tumblr发送"; $a->strings["Post to page:"] = "放在页:"; $a->strings["You are not authenticated to tumblr"] = "tumblr没证明您是真的"; diff --git a/twitter/README.md b/twitter/README.md index edfc8138..7936f894 100644 --- a/twitter/README.md +++ b/twitter/README.md @@ -1,4 +1,4 @@ -Twitter Plugin +Twitter Addon ============== Main authors Tobias Diekershoff and Michael Vogel. @@ -12,9 +12,9 @@ The addon can also mirror a users Tweets into the ~friendica wall. Installation ------------ -To use this plugin you have to register an [application](https://apps.twitter.com/) for your friendica instance on Twitter. Please leave the field "Callback URL" empty. +To use this addon you have to register an [application](https://apps.twitter.com/) for your friendica instance on Twitter. Please leave the field "Callback URL" empty. -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/plugins/twitter). +After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter). Where to find ------------- diff --git a/twitter/lang/C/messages.po b/twitter/lang/C/messages.po index fa058ba4..95c07141 100644 --- a/twitter/lang/C/messages.po +++ b/twitter/lang/C/messages.po @@ -37,7 +37,7 @@ msgstr "" #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input " "box below and submit the form. Only your public posts will " diff --git a/twitter/lang/ca/strings.php b/twitter/lang/ca/strings.php index 203c9a1f..bc53d4c8 100644 --- a/twitter/lang/ca/strings.php +++ b/twitter/lang/ca/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Publica-ho al Twitter"; $a->strings["Twitter settings updated."] = "La configuració de Twitter actualitzada."; $a->strings["Twitter Posting Settings"] = "Configuració d'Enviaments per a Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No s'ha pogut emparellar cap clau \"consumer key\" per a Twitter. Si us plau, poseu-vos en contacte amb l'administrador del lloc."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En aquesta instància Friendica el plugin Twitter va ser habilitat, però encara no ha connectat el compte al seu compte de Twitter. Per a això feu clic al botó de sota per obtenir un PIN de Twitter que ha de copiar a la casella de sota i enviar el formulari. Només els missatges públics es publicaran a Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En aquesta instància Friendica el addon Twitter va ser habilitat, però encara no ha connectat el compte al seu compte de Twitter. Per a això feu clic al botó de sota per obtenir un PIN de Twitter que ha de copiar a la casella de sota i enviar el formulari. Només els missatges públics es publicaran a Twitter."; $a->strings["Log in with Twitter"] = "Accedeixi com en Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copieu el codi PIN de Twitter aquí"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/cs/messages.po b/twitter/lang/cs/messages.po index f893d731..5e35bae6 100644 --- a/twitter/lang/cs/messages.po +++ b/twitter/lang/cs/messages.po @@ -39,12 +39,12 @@ msgstr "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte #: twitter.php:264 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Na této Friendica instanci je sice povolen Twitter plugin, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter." +msgstr "Na této Friendica instanci je sice povolen Twitter addon, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter." #: twitter.php:265 msgid "Log in with Twitter" diff --git a/twitter/lang/cs/strings.php b/twitter/lang/cs/strings.php index 8de4b130..6561b6b8 100644 --- a/twitter/lang/cs/strings.php +++ b/twitter/lang/cs/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Poslat příspěvek na Twitter"; $a->strings["Twitter settings updated."] = "Nastavení Twitteru aktualizováno."; $a->strings["Twitter Import/Export/Mirror"] = "Twitter Import/Export/Zrcadlení"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Na této Friendica instanci je sice povolen Twitter plugin, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Na této Friendica instanci je sice povolen Twitter addon, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter."; $a->strings["Log in with Twitter"] = "Přihlásit se s Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Zkopírujte sem PIN z Twitteru"; $a->strings["Save Settings"] = "Uložit Nastavení"; diff --git a/twitter/lang/de/messages.po b/twitter/lang/de/messages.po index 5ec80d64..b17031a7 100644 --- a/twitter/lang/de/messages.po +++ b/twitter/lang/de/messages.po @@ -39,12 +39,12 @@ msgstr "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an #: twitter.php:264 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Auf diesem Friendica-Server wurde das Twitter-Plugin aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." +msgstr "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." #: twitter.php:265 msgid "Log in with Twitter" diff --git a/twitter/lang/de/strings.php b/twitter/lang/de/strings.php index 997bf55f..69083a2b 100644 --- a/twitter/lang/de/strings.php +++ b/twitter/lang/de/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "An Twitter senden"; $a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert."; $a->strings["Twitter Import/Export/Mirror"] = "Twitter Import/Export/Spiegeln"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Auf diesem Friendica-Server wurde das Twitter-Plugin aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht."; $a->strings["Log in with Twitter"] = "bei Twitter anmelden"; $a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter-PIN hier her"; $a->strings["Save Settings"] = "Einstellungen speichern"; diff --git a/twitter/lang/eo/strings.php b/twitter/lang/eo/strings.php index cce714e7..0dbedd82 100644 --- a/twitter/lang/eo/strings.php +++ b/twitter/lang/eo/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Afiŝi ĉe Twitter"; $a->strings["Twitter settings updated."] = "Ĝisdatigis Twitter agordojn."; $a->strings["Twitter Posting Settings"] = "Agordoj por afiŝi ĉe Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ne trovis klientajn ŝlosilojn por Twitter. Bonvolu kontakti vian retejan administranton."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Je ĉi tiu Friendica retejo, la Twitter kromprogramo jam estas ŝaltita, sed via konto anokoraŭ ne estas konektita kun via Twitter konto. Por fari tion, klaku la supran butonon por atingi nombrokodon de Twitter, kion vi kopiu en la supran eniga ĉelo, kaj sendu la formularon. Nur viaj publikaj afiŝoj estas plusendota al Twitter. "; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Je ĉi tiu Friendica retejo, la Twitter kromprogramo jam estas ŝaltita, sed via konto anokoraŭ ne estas konektita kun via Twitter konto. Por fari tion, klaku la supran butonon por atingi nombrokodon de Twitter, kion vi kopiu en la supran eniga ĉelo, kaj sendu la formularon. Nur viaj publikaj afiŝoj estas plusendota al Twitter. "; $a->strings["Log in with Twitter"] = "Ensaluti kun Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Alglui la PIN de Twitter ĉi tie"; $a->strings["Submit"] = "Sendi"; diff --git a/twitter/lang/es/messages.po b/twitter/lang/es/messages.po index 6cb69948..739ac523 100644 --- a/twitter/lang/es/messages.po +++ b/twitter/lang/es/messages.po @@ -39,12 +39,12 @@ msgstr "No hay par de claves para encuentro de Twitter." #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "En esta petición de Friendica el plugin de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter" +msgstr "En esta petición de Friendica el addon de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter" #: twitter.php:184 msgid "Log in with Twitter" diff --git a/twitter/lang/es/strings.php b/twitter/lang/es/strings.php index c1168e4a..812e646b 100644 --- a/twitter/lang/es/strings.php +++ b/twitter/lang/es/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Entrada para Twitter"; $a->strings["Twitter settings updated."] = "Ajustes de Twitter actualizados."; $a->strings["Twitter Posting Settings"] = "Ajustes de publicación de Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No hay par de claves para encuentro de Twitter."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En esta petición de Friendica el plugin de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter"; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En esta petición de Friendica el addon de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter"; $a->strings["Log in with Twitter"] = "Iniciar sesión con Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copie el PIN de Twitter aquí"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/fr/messages.po b/twitter/lang/fr/messages.po index abddb85f..6b898264 100644 --- a/twitter/lang/fr/messages.po +++ b/twitter/lang/fr/messages.po @@ -40,7 +40,7 @@ msgstr "" #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/fr/strings.php b/twitter/lang/fr/strings.php index de9e80a0..d79c5cf9 100644 --- a/twitter/lang/fr/strings.php +++ b/twitter/lang/fr/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Publier sur Twitter"; $a->strings["Twitter settings updated."] = "Paramètres Twitter mis à jour."; $a->strings["Twitter Posting Settings"] = "Paramètres Twitter de publication"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = ""; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Se connecter avec Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copier le PIN de Twitter ici"; $a->strings["Submit"] = "Soumettre"; diff --git a/twitter/lang/is/strings.php b/twitter/lang/is/strings.php index edd7809b..66d1836d 100644 --- a/twitter/lang/is/strings.php +++ b/twitter/lang/is/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Senda færslu á Twitter"; $a->strings["Twitter settings updated."] = "Stillingar Twitter uppfærðar."; $a->strings["Twitter Posting Settings"] = "Twitter færslu stillingar"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ekkert notenda lykils par fyrir Twitter fundið. Hafðu samband við kerfisstjórann."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Innskrá með Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Afrita PIN frá Twitter hingað"; $a->strings["Submit"] = "Senda inn"; diff --git a/twitter/lang/it/messages.po b/twitter/lang/it/messages.po index ef14b5bb..75f71963 100644 --- a/twitter/lang/it/messages.po +++ b/twitter/lang/it/messages.po @@ -39,12 +39,12 @@ msgstr "Nessuna coppia di chiavi per Twitter trovata. Contatta l'amministratore #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Il plugin Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter." +msgstr "Il addon Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter." #: twitter.php:184 msgid "Log in with Twitter" diff --git a/twitter/lang/it/strings.php b/twitter/lang/it/strings.php index 446c7de2..c41dc547 100644 --- a/twitter/lang/it/strings.php +++ b/twitter/lang/it/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Invia a Twitter"; $a->strings["Twitter settings updated."] = "Impostazioni di Twitter aggiornate."; $a->strings["Twitter Posting Settings"] = "Impostazioni di invio a Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nessuna coppia di chiavi per Twitter trovata. Contatta l'amministratore del sito."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Il plugin Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Il addon Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter."; $a->strings["Log in with Twitter"] = "Accedi con Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copia il PIN da Twitter qui"; $a->strings["Submit"] = "Invia"; diff --git a/twitter/lang/nb-no/strings.php b/twitter/lang/nb-no/strings.php index 00a0f111..6330249c 100644 --- a/twitter/lang/nb-no/strings.php +++ b/twitter/lang/nb-no/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Post til Twitter"; $a->strings["Twitter settings updated."] = "Twitter-innstilinger oppdatert."; $a->strings["Twitter Posting Settings"] = "Innstillinger for posting til Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ingen \"consumer key pair\" for Twitter funnet. Vennligst kontakt stedets administrator."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Ved denne Friendica-forekomsten er Twitter-tillegget aktivert, men du har ennå ikke tilkoblet din konto til din Twitter-konto. For å gjøre det, klikk på knappen nedenfor for å få en PIN-kode fra Twitter som du må kopiere inn i feltet nedenfor og sende inn skjemaet. Bare dine offentlige innlegg vil bli lagt inn på Twitter. "; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Ved denne Friendica-forekomsten er Twitter-tillegget aktivert, men du har ennå ikke tilkoblet din konto til din Twitter-konto. For å gjøre det, klikk på knappen nedenfor for å få en PIN-kode fra Twitter som du må kopiere inn i feltet nedenfor og sende inn skjemaet. Bare dine offentlige innlegg vil bli lagt inn på Twitter. "; $a->strings["Log in with Twitter"] = "Logg inn via Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Kopier PIN-kode fra Twitter hit"; $a->strings["Submit"] = "Lagre"; diff --git a/twitter/lang/pl/strings.php b/twitter/lang/pl/strings.php index 54d3acae..3afb1506 100644 --- a/twitter/lang/pl/strings.php +++ b/twitter/lang/pl/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Post na Twitter"; $a->strings["Twitter settings updated."] = "Zaktualizowano ustawienia Twittera."; $a->strings["Twitter Posting Settings"] = "Ustawienia wpisów z Twittera"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nie znaleziono pary dla Twittera. Proszę skontaktować się z admininstratorem strony."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Zaloguj się przez Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Skopiuj tutaj PIN z Twittera"; $a->strings["Submit"] = "Potwierdź"; diff --git a/twitter/lang/pt-br/messages.po b/twitter/lang/pt-br/messages.po index df121428..56630fec 100644 --- a/twitter/lang/pt-br/messages.po +++ b/twitter/lang/pt-br/messages.po @@ -39,7 +39,7 @@ msgstr "Não foi encontrado nenhum par de \"consumer keys\" para o Twitter. Por #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/pt-br/strings.php b/twitter/lang/pt-br/strings.php index edc4b916..698b761e 100644 --- a/twitter/lang/pt-br/strings.php +++ b/twitter/lang/pt-br/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Publicar no Twitter"; $a->strings["Twitter settings updated."] = "As configurações do Twitter foram atualizadas."; $a->strings["Twitter Posting Settings"] = "Configurações de publicação no Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Não foi encontrado nenhum par de \"consumer keys\" para o Twitter. Por favor, entre em contato com a administração do site."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "O plug-in do Twitter está habilitado nesta instância do Friendica, mas você ainda não conectou sua conta aqui à sua conta no Twitter. Para fazer isso, clique no botão abaixo. Você vai receber um código de verificação do Twitter. Copie-o para o campo abaixo e envie o formulário. Apenas os seus posts públicos serão publicados no Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "O plug-in do Twitter está habilitado nesta instância do Friendica, mas você ainda não conectou sua conta aqui à sua conta no Twitter. Para fazer isso, clique no botão abaixo. Você vai receber um código de verificação do Twitter. Copie-o para o campo abaixo e envie o formulário. Apenas os seus posts públicos serão publicados no Twitter."; $a->strings["Log in with Twitter"] = "Entrar com o Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Cole o código de verificação do Twitter aqui"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/ro/messages.po b/twitter/lang/ro/messages.po index 27e0d553..46407c73 100644 --- a/twitter/lang/ro/messages.po +++ b/twitter/lang/ro/messages.po @@ -38,7 +38,7 @@ msgstr "Nici o pereche de chei de utilizator pentru Twitter nu a fost găsită. #: twitter.php:264 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/ro/strings.php b/twitter/lang/ro/strings.php index d941d001..36a36e8c 100644 --- a/twitter/lang/ro/strings.php +++ b/twitter/lang/ro/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Postați pe Twitter"; $a->strings["Twitter settings updated."] = "Configurările Twitter au fost actualizate."; $a->strings["Twitter Import/Export/Mirror"] = "Import/Export/Clonare Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nici o pereche de chei de utilizator pentru Twitter nu a fost găsită. Vă rugăm să vă contactați administratorul de site."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Pe această sesiune Friendica, modulul Twitter era activat, dar încă nu v-ați conectat contul la profilul dvs. Twitter. Pentru aceasta apăsați pe butonul de mai jos pentru a obține un PIN de pe Twitter pe care va trebui să îl copiați în caseta de introducere mai jos şi trimiteți formularul. Numai postările dumneavoastră publice vor fi postate pe Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Pe această sesiune Friendica, modulul Twitter era activat, dar încă nu v-ați conectat contul la profilul dvs. Twitter. Pentru aceasta apăsați pe butonul de mai jos pentru a obține un PIN de pe Twitter pe care va trebui să îl copiați în caseta de introducere mai jos şi trimiteți formularul. Numai postările dumneavoastră publice vor fi postate pe Twitter."; $a->strings["Log in with Twitter"] = "Autentificare prin Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copiați aici PIN-ul de la Twitter"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/twitter/lang/ru/messages.po b/twitter/lang/ru/messages.po index 9418282a..911b2e08 100644 --- a/twitter/lang/ru/messages.po +++ b/twitter/lang/ru/messages.po @@ -39,7 +39,7 @@ msgstr "Не найдено пары потребительских ключей #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/ru/strings.php b/twitter/lang/ru/strings.php index c2210cbb..39e61e4e 100644 --- a/twitter/lang/ru/strings.php +++ b/twitter/lang/ru/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Отправить в Twitter"; $a->strings["Twitter settings updated."] = "Настройки Twitter обновлены."; $a->strings["Twitter Posting Settings"] = "Настройка отправки сообщений в Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Не найдено пары потребительских ключей для Twitter. Пожалуйста, обратитесь к администратору сайта."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter."; $a->strings["Log in with Twitter"] = "Войдите через Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Скопируйте PIN с Twitter сюда"; $a->strings["Submit"] = "Подтвердить"; diff --git a/twitter/lang/sv/strings.php b/twitter/lang/sv/strings.php index 02cb3fdd..3f9d77c8 100644 --- a/twitter/lang/sv/strings.php +++ b/twitter/lang/sv/strings.php @@ -3,7 +3,7 @@ $a->strings["Post to Twitter"] = "Lägg in på Twitter"; $a->strings["Twitter Posting Settings"] = "Inställningar för inlägg på Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No consumer key pair for Twitter found. Please contact your site administrator."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."; $a->strings["Copy the PIN from Twitter here"] = "Ange PIN-koden från Twitter här"; $a->strings["Submit"] = "Spara"; $a->strings["Currently connected to: "] = "Ansluten till: "; diff --git a/twitter/lang/zh-cn/strings.php b/twitter/lang/zh-cn/strings.php index 9f8f7058..402534c1 100644 --- a/twitter/lang/zh-cn/strings.php +++ b/twitter/lang/zh-cn/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "发送到在Twitter"; $a->strings["Twitter settings updated."] = "Twitter设置更新了。"; $a->strings["Twitter Posting Settings"] = "Twitter发送设置"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "找不到Twitter的消费钥匙双。请联系您的网页行政人员。"; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "在这个Friendica网站使Twitter插件可用的可您还没有把您的账户和您Twitter账户连通。为这做点击下边的按钮得到密码从Twitter您要粘贴在下边的输入框和提交。只您的公开文章被发送到Twitter。"; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "在这个Friendica网站使Twitter插件可用的可您还没有把您的账户和您Twitter账户连通。为这做点击下边的按钮得到密码从Twitter您要粘贴在下边的输入框和提交。只您的公开文章被发送到Twitter。"; $a->strings["Log in with Twitter"] = "用Twitter登记"; $a->strings["Copy the PIN from Twitter here"] = "复制Twitter密码这儿"; $a->strings["Submit"] = "提交"; diff --git a/webrtc/README.md b/webrtc/README.md index 4f6c55ca..2b5c9ed0 100644 --- a/webrtc/README.md +++ b/webrtc/README.md @@ -1,8 +1,8 @@ -WebRTC Plugin +WebRTC Addon ============= This is a quick and dirty addon to add a [webrtc][1] website as an app. As webrtc -advances so rapidly there is s a chance this plugin will be obsolete. Webrtc is +advances so rapidly there is s a chance this addon will be obsolete. Webrtc is a new video and audio conferencing tool that is browser to browser communication, no need to download specific software for just conferencing. There are many different webrtc instances and because of the technology it is @@ -10,7 +10,7 @@ really a person 2 person communication, using the server to only signal who wants to talk to who, the actual transfer of the audio and video is directly between the participants. -If you would like to try this plugin please download one of the following +If you would like to try this addon please download one of the following either Chrome/Chromium 25 or higher or Firefox 21 or higher. Then test it by visiting a known webrtc instance (i.e. [live.mayfirst.org](https://live.mayfirst.org)) create a room, you should be asked to share your camera and microphone (firefox will let diff --git a/webrtc/lang/it/messages.po b/webrtc/lang/it/messages.po index ae800a32..31610b50 100644 --- a/webrtc/lang/it/messages.po +++ b/webrtc/lang/it/messages.po @@ -56,4 +56,4 @@ msgstr "WebRTC è un sistema di conferenza audio/video che funziona con Firefox msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." -msgstr "Contatta il tuo amministratore Friendica e ricordagli di configurare il plugin WebRTC." +msgstr "Contatta il tuo amministratore Friendica e ricordagli di configurare il addonWebRTC." diff --git a/webrtc/lang/it/strings.php b/webrtc/lang/it/strings.php index 7eb1f2f4..cb86cd3a 100644 --- a/webrtc/lang/it/strings.php +++ b/webrtc/lang/it/strings.php @@ -12,4 +12,4 @@ $a->strings["Page your users will create a WebRTC chat room on. For example you $a->strings["Settings updated."] = "Impostazioni aggiornate."; $a->strings["Video Chat"] = "Chat Video"; $a->strings["WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with."] = "WebRTC è un sistema di conferenza audio/video che funziona con Firefox (dalla versione 21) e Chrome/Chromium (dalla versione 25).\nCrea semplicemente una nuova stanza e invia il link alla persona con cui vuoi parlare."; -$a->strings["Please contact your friendica admin and send a reminder to configure the WebRTC addon."] = "Contatta il tuo amministratore Friendica e ricordagli di configurare il plugin WebRTC."; +$a->strings["Please contact your friendica admin and send a reminder to configure the WebRTC addon."] = "Contatta il tuo amministratore Friendica e ricordagli di configurare il addon WebRTC."; diff --git a/widgets/lang/C/messages.po b/widgets/lang/C/messages.po index c903d2bf..79a7a402 100644 --- a/widgets/lang/C/messages.po +++ b/widgets/lang/C/messages.po @@ -49,7 +49,7 @@ msgid "Widgets available" msgstr "" #: widgets.php:124 -msgid "Plugin Settings" +msgid "Addon Settings" msgstr "" #: widget_friendheader.php:40 diff --git a/widgets/lang/ca/strings.php b/widgets/lang/ca/strings.php index db19a10b..fb4bd472 100644 --- a/widgets/lang/ca/strings.php +++ b/widgets/lang/ca/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Connectar en Friendica"; $a->strings["Generate new key"] = "Generar nova clau"; $a->strings["Widgets key"] = "Ginys clau"; $a->strings["Widgets available"] = "Ginys disponibles"; -$a->strings["Plugin Settings"] = "Ajustos de Plugin"; +$a->strings["Addon Settings"] = "Ajustos de Addon"; $a->strings["Get added to this list!"] = "S'afegeixen a aquesta llista!"; diff --git a/widgets/lang/cs/strings.php b/widgets/lang/cs/strings.php index 68c4f81f..e6da406d 100644 --- a/widgets/lang/cs/strings.php +++ b/widgets/lang/cs/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Připojit na Friendica!"; $a->strings["Generate new key"] = "Generovat nové klíče"; $a->strings["Widgets key"] = "Widgety klíč"; $a->strings["Widgets available"] = "Widgety k dispozici"; -$a->strings["Plugin Settings"] = "Nastavení doplňku"; +$a->strings["Addon Settings"] = "Nastavení doplňku"; $a->strings["Get added to this list!"] = "Nechte se přidat do tohoto listu!"; diff --git a/widgets/lang/de/strings.php b/widgets/lang/de/strings.php index 3137f02d..86e42c68 100644 --- a/widgets/lang/de/strings.php +++ b/widgets/lang/de/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "In Friendica verbinden!"; $a->strings["Generate new key"] = "Neuen Schlüssel erstellen"; $a->strings["Widgets key"] = "Widgets Schlüssel"; $a->strings["Widgets available"] = "Verfügbare Widgets"; -$a->strings["Plugin Settings"] = "Plugin-Einstellungen"; +$a->strings["Addon Settings"] = "Addon-Einstellungen"; $a->strings["Get added to this list!"] = "Werde Mitglied dieser Liste"; diff --git a/widgets/lang/eo/strings.php b/widgets/lang/eo/strings.php index 5a599474..7585a6bb 100644 --- a/widgets/lang/eo/strings.php +++ b/widgets/lang/eo/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Konekti ĉe Friendica!"; $a->strings["Generate new key"] = "Generi novan ĉifroŝlosilon"; $a->strings["Widgets key"] = "Ŝlosilo por fenestraĵoj"; $a->strings["Widgets available"] = "Disponeblaj fenestraĵoj"; -$a->strings["Plugin Settings"] = "Kromprogramoagordoj"; +$a->strings["Addon Settings"] = "Kromprogramoagordoj"; $a->strings["Get added to this list!"] = "Iĝu membro de ĉi tiu listo!"; diff --git a/widgets/lang/es/strings.php b/widgets/lang/es/strings.php index 181ae8e0..736ae769 100644 --- a/widgets/lang/es/strings.php +++ b/widgets/lang/es/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "¡Conéctate en Friendica!"; $a->strings["Generate new key"] = "Generar clave nueva"; $a->strings["Widgets key"] = "Clave de aplicaciones"; $a->strings["Widgets available"] = "Aplicaciones disponibles"; -$a->strings["Plugin Settings"] = "Configuración de los módulos"; +$a->strings["Addon Settings"] = "Configuración de los módulos"; $a->strings["Get added to this list!"] = "¡Añadido a la lista!"; diff --git a/widgets/lang/fr/strings.php b/widgets/lang/fr/strings.php index b3b6108d..2a3000e3 100644 --- a/widgets/lang/fr/strings.php +++ b/widgets/lang/fr/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Se connecter sur Friendica!"; $a->strings["Generate new key"] = "Générer une nouvelle clé"; $a->strings["Widgets key"] = "Clé des widgets"; $a->strings["Widgets available"] = "Widgets disponibles"; -$a->strings["Plugin Settings"] = "Extensions"; +$a->strings["Addon Settings"] = "Extensions"; $a->strings["Get added to this list!"] = "Ajoutez-vous à cette liste!"; diff --git a/widgets/lang/is/strings.php b/widgets/lang/is/strings.php index 9892b5f4..7867762d 100644 --- a/widgets/lang/is/strings.php +++ b/widgets/lang/is/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Tengist á Friendica!"; $a->strings["Generate new key"] = "Búa til nýjan lykil"; $a->strings["Widgets key"] = "Lykill smáforrits "; $a->strings["Widgets available"] = "Smáforrit til"; -$a->strings["Plugin Settings"] = "Eininga stillingar"; +$a->strings["Addon Settings"] = "Eininga stillingar"; $a->strings["Get added to this list!"] = "Láta bæta þér við þennan lista!"; diff --git a/widgets/lang/it/strings.php b/widgets/lang/it/strings.php index d713d8ce..277f1f86 100644 --- a/widgets/lang/it/strings.php +++ b/widgets/lang/it/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Connettiti su Friendica!"; $a->strings["Generate new key"] = "Genera una nuova chiave"; $a->strings["Widgets key"] = "Chiave Widget"; $a->strings["Widgets available"] = "Widget disponibili"; -$a->strings["Plugin Settings"] = "Impostazioni plugin"; +$a->strings["Addon Settings"] = "Impostazioni addon"; $a->strings["Get added to this list!"] = "Aggiungiti a questa lista!"; diff --git a/widgets/lang/nb-no/strings.php b/widgets/lang/nb-no/strings.php index 7774c639..cdcf3f43 100644 --- a/widgets/lang/nb-no/strings.php +++ b/widgets/lang/nb-no/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = ""; $a->strings["Generate new key"] = "Lag ny nøkkel"; $a->strings["Widgets key"] = "Nøkkel til småprogrammer"; $a->strings["Widgets available"] = "Småprogrammer er tilgjengelige"; -$a->strings["Plugin Settings"] = "Tilleggsinnstillinger"; +$a->strings["Addon Settings"] = "Tilleggsinnstillinger"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/pl/strings.php b/widgets/lang/pl/strings.php index 967b998b..b36b2cf5 100644 --- a/widgets/lang/pl/strings.php +++ b/widgets/lang/pl/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Połączono z Friendica!"; $a->strings["Generate new key"] = "Stwórz nowy klucz"; $a->strings["Widgets key"] = ""; $a->strings["Widgets available"] = "Widgety są dostępne"; -$a->strings["Plugin Settings"] = "Ustawienia wtyczki"; +$a->strings["Addon Settings"] = "Ustawienia wtyczki"; $a->strings["Get added to this list!"] = "Zostań dodany do listy!"; diff --git a/widgets/lang/pt-br/strings.php b/widgets/lang/pt-br/strings.php index 965c39eb..934ffea3 100644 --- a/widgets/lang/pt-br/strings.php +++ b/widgets/lang/pt-br/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Conecte no Friendica!"; $a->strings["Generate new key"] = "Gerar nova chave"; $a->strings["Widgets key"] = "Chave de widgets"; $a->strings["Widgets available"] = "Widgets disponíveis"; -$a->strings["Plugin Settings"] = "Configurações do plugin"; +$a->strings["Addon Settings"] = "Configurações do addon"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/ru/strings.php b/widgets/lang/ru/strings.php index 3c455eb3..8d8cf250 100644 --- a/widgets/lang/ru/strings.php +++ b/widgets/lang/ru/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Подключены к Friendica!"; $a->strings["Generate new key"] = "Сгенерировать новый ключ"; $a->strings["Widgets key"] = "Ключ виджетов"; $a->strings["Widgets available"] = "Виджеты доступны"; -$a->strings["Plugin Settings"] = "Настройки плагина"; +$a->strings["Addon Settings"] = "Настройки плагина"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/sv/strings.php b/widgets/lang/sv/strings.php index 0d27628b..6b34aac1 100644 --- a/widgets/lang/sv/strings.php +++ b/widgets/lang/sv/strings.php @@ -1,3 +1,3 @@ strings["Plugin Settings"] = "Inställningar för insticksprogram"; +$a->strings["Addon Settings"] = "Inställningar för insticksprogram"; diff --git a/widgets/lang/zh-cn/strings.php b/widgets/lang/zh-cn/strings.php index 11f1a96e..df8fc494 100644 --- a/widgets/lang/zh-cn/strings.php +++ b/widgets/lang/zh-cn/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "连接在Friendica!"; $a->strings["Generate new key"] = "造成新钥匙"; $a->strings["Widgets key"] = "小窗口钥匙"; $a->strings["Widgets available"] = "可用的小窗口"; -$a->strings["Plugin Settings"] = "插件设置"; +$a->strings["Addon Settings"] = "插件设置"; $a->strings["Get added to this list!"] = "被在这个单子加入!"; diff --git a/windowsphonepush/lang/C/messages.po b/windowsphonepush/lang/C/messages.po index b6a10a74..8643694a 100644 --- a/windowsphonepush/lang/C/messages.po +++ b/windowsphonepush/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "WindowsPhonePush Settings" msgstr "" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" msgstr "" #: windowsphonepush.php:122 diff --git a/windowsphonepush/lang/de/messages.po b/windowsphonepush/lang/de/messages.po index 672ab3f2..58bf87cf 100644 --- a/windowsphonepush/lang/de/messages.po +++ b/windowsphonepush/lang/de/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "WindowsPhonePush Einstellungen" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Aktiviere WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" +msgstr "Aktiviere WindowsPhonePush Addon" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/de/strings.php b/windowsphonepush/lang/de/strings.php index 5dbbafc2..e03a0bd7 100644 --- a/windowsphonepush/lang/de/strings.php +++ b/windowsphonepush/lang/de/strings.php @@ -7,6 +7,6 @@ function string_plural_select_de($n){ ; $a->strings["WindowsPhonePush settings updated."] = "WindowsPhonePush Einstellungen aktualisiert."; $a->strings["WindowsPhonePush Settings"] = "WindowsPhonePush Einstellungen"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Aktiviere WindowsPhonePush Plugin"; +$a->strings["Enable WindowsPhonePush Addon"] = "Aktiviere WindowsPhonePush Addon"; $a->strings["Push text of new item"] = "Text senden"; $a->strings["Save Settings"] = "Einstellungen speichern"; diff --git a/windowsphonepush/lang/es/messages.po b/windowsphonepush/lang/es/messages.po index 7d561c21..52d8e807 100644 --- a/windowsphonepush/lang/es/messages.po +++ b/windowsphonepush/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Ajustes de WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Habilitar Plugin de WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Habilitar Addon de WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/es/strings.php b/windowsphonepush/lang/es/strings.php index 22a5c4c5..b1a1bd37 100644 --- a/windowsphonepush/lang/es/strings.php +++ b/windowsphonepush/lang/es/strings.php @@ -7,6 +7,6 @@ function string_plural_select_es($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Ajustes de WindowsPhonePush actualizados."; $a->strings["WindowsPhonePush Settings"] = "Ajustes de WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Habilitar Plugin de WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Habilitar Addon de WindowsPhonePush"; $a->strings["Push text of new item"] = "Empujar texto de nuevo objeto"; $a->strings["Save Settings"] = "Guardar Ajustes"; diff --git a/windowsphonepush/lang/fr/messages.po b/windowsphonepush/lang/fr/messages.po index 612f4d6c..b1b9a65c 100644 --- a/windowsphonepush/lang/fr/messages.po +++ b/windowsphonepush/lang/fr/messages.po @@ -28,7 +28,7 @@ msgid "WindowsPhonePush Settings" msgstr "Paramètres WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" msgstr "Activer le greffon WindowsPhonePush" #: windowsphonepush.php:122 diff --git a/windowsphonepush/lang/fr/strings.php b/windowsphonepush/lang/fr/strings.php index 8edca6fc..bff0edb3 100644 --- a/windowsphonepush/lang/fr/strings.php +++ b/windowsphonepush/lang/fr/strings.php @@ -7,6 +7,6 @@ function string_plural_select_fr($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Paramètres WindowsPhonePush mis à jour"; $a->strings["WindowsPhonePush Settings"] = "Paramètres WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Activer le greffon WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Activer le greffon WindowsPhonePush"; $a->strings["Push text of new item"] = "Pousse le texte du nouvel élément"; $a->strings["Save Settings"] = "Sauvegarde des paramètres"; diff --git a/windowsphonepush/lang/it/messages.po b/windowsphonepush/lang/it/messages.po index be085107..d51b5732 100644 --- a/windowsphonepush/lang/it/messages.po +++ b/windowsphonepush/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Impostazioni WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Abilita plugin WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Abilita addon WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/it/strings.php b/windowsphonepush/lang/it/strings.php index a472a7c1..ca76a09d 100644 --- a/windowsphonepush/lang/it/strings.php +++ b/windowsphonepush/lang/it/strings.php @@ -7,6 +7,6 @@ function string_plural_select_it($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Impostazioni WindowsPhonePush aggiornate."; $a->strings["WindowsPhonePush Settings"] = "Impostazioni WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Abilita plugin WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Abilita addon WindowsPhonePush"; $a->strings["Push text of new item"] = "Notifica il testo dei nuovi elementi"; $a->strings["Save Settings"] = "Salva Impostazioni"; diff --git a/windowsphonepush/lang/ro/messages.po b/windowsphonepush/lang/ro/messages.po index 3b55d4a4..cbef36da 100644 --- a/windowsphonepush/lang/ro/messages.po +++ b/windowsphonepush/lang/ro/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Configurare WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Activare Plugin WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Activare Addon WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/ro/strings.php b/windowsphonepush/lang/ro/strings.php index 1c29eaba..819ef6fe 100644 --- a/windowsphonepush/lang/ro/strings.php +++ b/windowsphonepush/lang/ro/strings.php @@ -7,6 +7,6 @@ function string_plural_select_ro($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Configurări WindowsPhonePush actualizate."; $a->strings["WindowsPhonePush Settings"] = "Configurare WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Activare Plugin WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Activare Addon WindowsPhonePush"; $a->strings["Push text of new item"] = "Tastează textul noului element"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/wppost/lang/C/messages.po b/wppost/lang/C/messages.po index 27baa960..92bc721d 100644 --- a/wppost/lang/C/messages.po +++ b/wppost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Wordpress Export" msgstr "" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "" #: wppost.php:92 diff --git a/wppost/lang/ca/strings.php b/wppost/lang/ca/strings.php index 2856b55c..fb8f7d65 100644 --- a/wppost/lang/ca/strings.php +++ b/wppost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Publica-ho al Wordpress"; $a->strings["WordPress Post Settings"] = "Configuració d'enviaments a WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar Configuració d'Enviaments a WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar Configuració d'Enviaments a WordPress"; $a->strings["WordPress username"] = "Nom d'usuari de WordPress"; $a->strings["WordPress password"] = "Contrasenya de WordPress"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/cs/messages.po b/wppost/lang/cs/messages.po index 992a95db..d2571365 100644 --- a/wppost/lang/cs/messages.po +++ b/wppost/lang/cs/messages.po @@ -28,7 +28,7 @@ msgid "Wordpress Export" msgstr "Wordpress Export" #: wppost.php:86 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Povolit rozšíření na WordPress" #: wppost.php:91 diff --git a/wppost/lang/cs/strings.php b/wppost/lang/cs/strings.php index 00352ce7..45783422 100644 --- a/wppost/lang/cs/strings.php +++ b/wppost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Wordpress"] = "Příspěvky do WordPress"; $a->strings["Wordpress Export"] = "Wordpress Export"; -$a->strings["Enable WordPress Post Plugin"] = "Povolit rozšíření na WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Povolit rozšíření na WordPress"; $a->strings["WordPress username"] = "WordPress uživatelské jméno"; $a->strings["WordPress password"] = "WordPress heslo"; $a->strings["WordPress API URL"] = "URL adresa API WordPress"; diff --git a/wppost/lang/de/messages.po b/wppost/lang/de/messages.po index 57dde23f..eb10db40 100644 --- a/wppost/lang/de/messages.po +++ b/wppost/lang/de/messages.po @@ -30,8 +30,8 @@ msgid "Wordpress Export" msgstr "Wordpress Export" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "WordPress Plugin aktivieren" +msgid "Enable WordPress Post Addon" +msgstr "WordPress Addon aktivieren" #: wppost.php:92 msgid "WordPress username" diff --git a/wppost/lang/de/strings.php b/wppost/lang/de/strings.php index 9cdc292a..57ae6afe 100644 --- a/wppost/lang/de/strings.php +++ b/wppost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Wordpress"] = "Bei WordPress veröffentlichen"; $a->strings["Wordpress Export"] = "Wordpress Export"; -$a->strings["Enable WordPress Post Plugin"] = "WordPress Plugin aktivieren"; +$a->strings["Enable WordPress Post Addon"] = "WordPress Addon aktivieren"; $a->strings["WordPress username"] = "WordPress-Benutzername"; $a->strings["WordPress password"] = "WordPress-Passwort"; $a->strings["WordPress API URL"] = "WordPress-API-URL"; diff --git a/wppost/lang/eo/strings.php b/wppost/lang/eo/strings.php index 7c786666..04130d73 100644 --- a/wppost/lang/eo/strings.php +++ b/wppost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Afiŝi al Wordpress"; $a->strings["WordPress Post Settings"] = "Agordoj por WordPress afiŝojn"; -$a->strings["Enable WordPress Post Plugin"] = "Ŝalti la Wordpress-afiŝo kromprogramon"; +$a->strings["Enable WordPress Post Addon"] = "Ŝalti la Wordpress-afiŝo kromprogramon"; $a->strings["WordPress username"] = "WordPress salutnomo"; $a->strings["WordPress password"] = "WordPress pasvorto"; $a->strings["WordPress API URL"] = "Wordpress API URL adreso"; diff --git a/wppost/lang/es/messages.po b/wppost/lang/es/messages.po index baac8034..0c555a7f 100644 --- a/wppost/lang/es/messages.po +++ b/wppost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Wordpress Export" msgstr "Exportar a Wordpress" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "Habilitar Plugin de publicación de WordPress" +msgid "Enable WordPress Post Addon" +msgstr "Habilitar Addon de publicación de WordPress" #: wppost.php:92 msgid "WordPress username" diff --git a/wppost/lang/es/strings.php b/wppost/lang/es/strings.php index 13753311..fab68021 100644 --- a/wppost/lang/es/strings.php +++ b/wppost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Wordpress"] = "Publicar en Wordpress"; $a->strings["Wordpress Export"] = "Exportar a Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar Plugin de publicación de WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar Addon de publicación de WordPress"; $a->strings["WordPress username"] = "Nombre de usuario de WordPress"; $a->strings["WordPress password"] = "Contraseña de WordPress"; $a->strings["WordPress API URL"] = "URL de API de WordPress"; diff --git a/wppost/lang/fr/strings.php b/wppost/lang/fr/strings.php index 9cd4456f..ed511397 100644 --- a/wppost/lang/fr/strings.php +++ b/wppost/lang/fr/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Poster sur WordPress"; $a->strings["WordPress Post Settings"] = "Réglages WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Activer l'extension WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Activer l'extension WordPress"; $a->strings["WordPress username"] = "Utilisateur WordPress"; $a->strings["WordPress password"] = "Mot de passe WordPress"; $a->strings["WordPress API URL"] = "URL de l'API WordPress"; diff --git a/wppost/lang/is/strings.php b/wppost/lang/is/strings.php index 0b7f3fe7..bca63d56 100644 --- a/wppost/lang/is/strings.php +++ b/wppost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Senda færslu á Wordpress"; $a->strings["WordPress Post Settings"] = "Wordpress Post stillingar"; -$a->strings["Enable WordPress Post Plugin"] = "Kveikja á WordPress Post viðbót"; +$a->strings["Enable WordPress Post Addon"] = "Kveikja á WordPress Post viðbót"; $a->strings["WordPress username"] = "Wordpress aðgangsorð"; $a->strings["WordPress password"] = "Wordpress aðgagnsorð"; $a->strings["WordPress API URL"] = "Slóð á Wordpress API"; diff --git a/wppost/lang/it/messages.po b/wppost/lang/it/messages.po index 2369d955..00bed78a 100644 --- a/wppost/lang/it/messages.po +++ b/wppost/lang/it/messages.po @@ -28,8 +28,8 @@ msgid "Wordpress Export" msgstr "" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "Abilita il plugin di invio a Wordpress" +msgid "Enable WordPress Post Addon" +msgstr "Abilita il addon di invio a Wordpress" #: wppost.php:92 msgid "WordPress username" diff --git a/wppost/lang/it/strings.php b/wppost/lang/it/strings.php index 3f616900..8df1bd08 100644 --- a/wppost/lang/it/strings.php +++ b/wppost/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to Wordpress"] = "Invia a Wordpress"; $a->strings["Wordpress Export"] = ""; -$a->strings["Enable WordPress Post Plugin"] = "Abilita il plugin di invio a Wordpress"; +$a->strings["Enable WordPress Post Addon"] = "Abilita il addon di invio a Wordpress"; $a->strings["WordPress username"] = "Nome utente Wordpress"; $a->strings["WordPress password"] = "Password Wordpress"; $a->strings["WordPress API URL"] = "Indirizzo API Wordpress"; diff --git a/wppost/lang/nb-no/strings.php b/wppost/lang/nb-no/strings.php index 5c840e67..3d125aa6 100644 --- a/wppost/lang/nb-no/strings.php +++ b/wppost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = ""; $a->strings["WordPress Post Settings"] = ""; -$a->strings["Enable WordPress Post Plugin"] = ""; +$a->strings["Enable WordPress Post Addon"] = ""; $a->strings["WordPress username"] = ""; $a->strings["WordPress password"] = ""; $a->strings["WordPress API URL"] = ""; diff --git a/wppost/lang/pl/strings.php b/wppost/lang/pl/strings.php index 201ead1d..ab2df6a7 100644 --- a/wppost/lang/pl/strings.php +++ b/wppost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Opublikuj na Wordpress"; $a->strings["WordPress Post Settings"] = "Ustawienia wpisów WorldPress"; -$a->strings["Enable WordPress Post Plugin"] = "Włącz plugin wpisów WorldPress"; +$a->strings["Enable WordPress Post Addon"] = "Włącz addon wpisów WorldPress"; $a->strings["WordPress username"] = "nazwa użytkownika WordPress"; $a->strings["WordPress password"] = "hasło WordPress"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/pt-br/messages.po b/wppost/lang/pt-br/messages.po index 3d2ad0ff..b011d0c2 100644 --- a/wppost/lang/pt-br/messages.po +++ b/wppost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "WordPress Post Settings" msgstr "Configurações de publicação no WordPress" #: wppost.php:78 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Habilitar plug-in para publicar no WordPress" #: wppost.php:83 diff --git a/wppost/lang/pt-br/strings.php b/wppost/lang/pt-br/strings.php index dbb6eb1f..fc59fcb3 100644 --- a/wppost/lang/pt-br/strings.php +++ b/wppost/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to Wordpress"] = "Publicar no Wordpress"; $a->strings["WordPress Post Settings"] = "Configurações de publicação no WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar plug-in para publicar no WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar plug-in para publicar no WordPress"; $a->strings["WordPress username"] = "Nome de usuário no WordPress"; $a->strings["WordPress password"] = "Senha do WordPress"; $a->strings["WordPress API URL"] = ""; diff --git a/wppost/lang/ro/messages.po b/wppost/lang/ro/messages.po index d329836d..a239bcb5 100644 --- a/wppost/lang/ro/messages.po +++ b/wppost/lang/ro/messages.po @@ -27,7 +27,7 @@ msgid "Wordpress Export" msgstr "Export pe Wordpress" #: wppost.php:86 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Activare Modul Postare pe Wordpress" #: wppost.php:91 diff --git a/wppost/lang/ro/strings.php b/wppost/lang/ro/strings.php index 86835bc3..fcd0efa4 100644 --- a/wppost/lang/ro/strings.php +++ b/wppost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Wordpress"] = "Postați pe Wordpress"; $a->strings["Wordpress Export"] = "Export pe Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Activare Modul Postare pe Wordpress"; +$a->strings["Enable WordPress Post Addon"] = "Activare Modul Postare pe Wordpress"; $a->strings["WordPress username"] = "Utilizator WordPress "; $a->strings["WordPress password"] = "Parolă WordPress "; $a->strings["WordPress API URL"] = "URL Cheie API WordPress"; diff --git a/wppost/lang/ru/strings.php b/wppost/lang/ru/strings.php index f193addc..5eefa639 100644 --- a/wppost/lang/ru/strings.php +++ b/wppost/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Сообщение для Wordpress"; $a->strings["WordPress Post Settings"] = "Настройки сообщений для Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Включить WordPress плагин сообщений"; +$a->strings["Enable WordPress Post Addon"] = "Включить WordPress плагин сообщений"; $a->strings["WordPress username"] = "WordPress Имя пользователя"; $a->strings["WordPress password"] = "WordPress паролъ"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/zh-cn/strings.php b/wppost/lang/zh-cn/strings.php index 74db6306..9ac233fd 100644 --- a/wppost/lang/zh-cn/strings.php +++ b/wppost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "发送到Wordpress"; $a->strings["WordPress Post Settings"] = "Wordpress发送设置"; -$a->strings["Enable WordPress Post Plugin"] = "使Wordpress发送插件可用"; +$a->strings["Enable WordPress Post Addon"] = "使Wordpress发送插件可用"; $a->strings["WordPress username"] = "Wordpress用户名"; $a->strings["WordPress password"] = "Wordpress密码"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/xmpp/converse/README.rst b/xmpp/converse/README.rst index f0a5b991..96b61a76 100644 --- a/xmpp/converse/README.rst +++ b/xmpp/converse/README.rst @@ -55,7 +55,7 @@ Integration into other frameworks `django-conversejs `_ is an app that makes it easer to integrate *Converse.js* into Django. `django-xmpp `_ adds XMPP chat integration with converse.js by letting Ejabberd authenticate against your Django site. * `Roundcube `_: - `roundcube-converse.js-xmpp-plugin `_ is a plugin for Roundcube Webmail. + `roundcube-converse.js-xmpp-plugin `_ is an addon for Roundcube Webmail. * `Wordpress `_: `ConverseJS `_ * `Patternslib `_: diff --git a/xmpp/converse/builds/converse.min.js b/xmpp/converse/builds/converse.min.js index 7efcf960..7ac83109 100644 --- a/xmpp/converse/builds/converse.min.js +++ b/xmpp/converse/builds/converse.min.js @@ -2,8 +2,8 @@ * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/almond for details - */ - + */ + /*! * jQuery JavaScript Library v1.11.0 * http://jquery.com/ @@ -16,8 +16,8 @@ * http://jquery.org/license * * Date: 2014-01-23T21:02Z - */ - + */ + /*! * Sizzle CSS Selector Engine v1.10.16 * http://sizzlejs.com/ @@ -27,49 +27,49 @@ * http://jquery.org/license * * Date: 2014-01-13 - */ - -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - + */ + +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + /** * @license RequireJS text 2.0.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details - */ - -// RequireJS UnderscoreJS template plugin -// http://github.com/jfparadis/requirejs-tpl -// -// An alternative to http://github.com/ZeeAgency/requirejs-tpl -// -// Using UnderscoreJS micro-templates at http://underscorejs.org/#template -// Using and RequireJS text.js at http://requirejs.org/docs/api.html#text -// @author JF Paradis -// @version 0.0.2 -// -// Released under the MIT license -// -// Usage: -// require(['backbone', 'tpl!mytemplate'], function (Backbone, mytemplate) { -// return Backbone.View.extend({ -// initialize: function(){ -// this.render(); -// }, -// render: function(){ -// this.$el.html(mytemplate({message: 'hello'})); -// }); -// }); -// -// Configuration: (optional) -// require.config({ -// tpl: { -// extension: '.tpl' // default = '.html' -// } -// }); - + */ + +// RequireJS UnderscoreJS template addon +// http://github.com/jfparadis/requirejs-tpl +// +// An alternative to http://github.com/ZeeAgency/requirejs-tpl +// +// Using UnderscoreJS micro-templates at http://underscorejs.org/#template +// Using and RequireJS text.js at http://requirejs.org/docs/api.html#text +// @author JF Paradis +// @version 0.0.2 +// +// Released under the MIT license +// +// Usage: +// require(['backbone', 'tpl!mytemplate'], function (Backbone, mytemplate) { +// return Backbone.View.extend({ +// initialize: function(){ +// this.render(); +// }, +// render: function(){ +// this.$el.html(mytemplate({message: 'hello'})); +// }); +// }); +// +// Configuration: (optional) +// require.config({ +// tpl: { +// extension: '.tpl' // default = '.html' +// } +// }); + /* jed.js v0.5.0beta @@ -91,10 +91,10 @@ Many thanks to Joshua I. Miller - unrtst@cpan.org - who wrote gettext.js back in 2008. I was able to vet a lot of my ideas against his. I also made sure Jed passed against his tests in order to offer easy upgrades -- jsgettext.berlios.de -*/ - -// Underscore 1.3.0 was used to port and is licensed - +*/ + +// Underscore 1.3.0 was used to port and is licensed + /** sprintf() for JavaScript 0.7-beta1 http://www.diveintojavascript.com/projects/javascript-sprintf @@ -123,8 +123,8 @@ in order to offer easy upgrades -- jsgettext.berlios.de ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - + */ + /*! * jQuery Browser Plugin 0.0.8 * https://github.com/gabceb/jquery-browser-plugin @@ -138,22 +138,22 @@ in order to offer easy upgrades -- jsgettext.berlios.de * Released under the MIT license * * Date: 05-07-2015 - */ - + */ + /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License -*/ - +*/ + /*! * EventEmitter v4.2.3 - git.io/ee * Oliver Caldwell * MIT license * @preserve - */ - + */ + /*! otr.js v0.2.12 - 2014-04-15 @@ -163,14 +163,14 @@ code.google.com/p/crypto-js/wiki/License This file is concatenated for the browser. Please see: https://github.com/arlolra/otr -*/ - -//! moment.js -//! version : 2.10.6 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - +*/ + +//! moment.js +//! version : 2.10.6 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 @@ -178,8 +178,8 @@ code.google.com/p/crypto-js/wiki/License * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for details. - */ - + */ + /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. @@ -187,51 +187,51 @@ code.google.com/p/crypto-js/wiki/License * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. - */ - + */ + /* This program is distributed under the terms of the MIT license. Please see the LICENSE file for details. Copyright 2006-2008, OGG, LLC -*/ - +*/ + /* Copyright 2010, François de Metz -*/ - +*/ + /* * Based on Ping Strophejs plugins (https://github.com/metajack/strophejs-plugins/tree/master/ping) -* This plugin is distributed under the terms of the MIT licence. +* This addon is distributed under the terms of the MIT licence. * Please see the LICENCE file for details. * * Copyright (c) Markus Kohlhase, 2010 * Refactored by Pavel Lang, 2011 -*/ - -// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://backbonejs.org - +*/ + +// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org + /*! * Backbone.Overview * * Copyright (c) 2014, JC Brand * Licensed under the Mozilla Public License (MPL) - */ - + */ + /*! * typeahead.js 0.10.5 * https://github.com/twitter/typeahead.js * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT - */ - -// Converse.js (A browser based XMPP chat client) -// http://conversejs.org -// -// Copyright (c) 2012-2015, Jan-Carel Brand -// Licensed under the Mozilla Public License (MPLv2) -// - + */ + +// Converse.js (A browser based XMPP chat client) +// http://conversejs.org +// +// Copyright (c) 2012-2015, Jan-Carel Brand +// Licensed under the Mozilla Public License (MPLv2) +// + var requirejs,require,define;(function(e){function h(e,t){return f.call(e,t)}function p(e,t){var n,r,i,s,o,a,f,l,h,p,d,v=t&&t.split("/"),m=u.map,g=m&&m["*"]||{};if(e&&e.charAt(0)===".")if(t){e=e.split("/"),o=e.length-1,u.nodeIdCompat&&c.test(e[o])&&(e[o]=e[o].replace(c,"")),e=v.slice(0,v.length-1).concat(e);for(h=0;h0&&(e.splice(h-1,2),h-=2)}}e=e.join("/")}else e.indexOf("./")===0&&(e=e.substring(2));if((v||g)&&m){n=e.split("/");for(h=n.length;h>0;h-=1){r=n.slice(0,h).join("/");if(v)for(p=v.length;p>0;p-=1){i=m[v.slice(0,p).join("/")];if(i){i=i[r];if(i){s=i,a=h;break}}}if(s)break;!f&&g&&g[r]&&(f=g[r],l=h)}!s&&f&&(s=f,a=l),s&&(n.splice(0,a,s),e=n.join("/"))}return e}function d(t,r){return function(){var i=l.call(arguments,0);return typeof i[0]!="string"&&i.length===1&&i.push(null),n.apply(e,i.concat([t,r]))}}function v(e){return function(t){return p(t,e)}}function m(e){return function(t){s[e]=t}}function g(n){if(h(o,n)){var r=o[n];delete o[n],a[n]=!0,t.apply(e,r)}if(!h(s,n)&&!h(a,n))throw new Error("No "+n);return s[n]}function y(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function b(e){return function(){return u&&u.config&&u.config[e]||{}}}var t,n,r,i,s={},o={},u={},a={},f=Object.prototype.hasOwnProperty,l=[].slice,c=/\.js$/;r=function(e,t){var n,r=y(e),i=r[0];return e=r[1],i&&(i=p(i,t),n=g(i)),i?n&&n.normalize?e=n.normalize(e,v(t)):e=p(e,t):(e=p(e,t),r=y(e),i=r[0],e=r[1],i&&(n=g(i))),{f:i?i+"!"+e:e,n:e,pr:i,p:n}},i={require:function(e){return d(e)},exports:function(e){var t=s[e];return typeof t!="undefined"?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:b(e)}}},t=function(t,n,u,f){var l,c,p,v,y,b=[],w=typeof u,E;f=f||t;if(w==="undefined"||w==="function"){n=!n.length&&u.length?["require","exports","module"]:n;for(y=0;y0&&t-1 in e}function x(e,t,n){if(p.isFunction(t))return p.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return p.grep(e,function(e){return e===t!==n});if(typeof t=="string"){if(S.test(t))return p.filter(t,e,n);t=p.filter(t,e)}return p.grep(e,function(e){return p.inArray(e,t)>=0!==n})}function O(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function D(e){var t=_[e]={};return p.each(e.match(M)||[],function(e,n){t[n]=!0}),t}function H(){N.addEventListener?(N.removeEventListener("DOMContentLoaded",B,!1),e.removeEventListener("load",B,!1)):(N.detachEvent("onreadystatechange",B),e.detachEvent("onload",B))}function B(){if(N.addEventListener||event.type==="load"||N.readyState==="complete")H(),p.ready()}function R(e,t,n){if(n===undefined&&e.nodeType===1){var r="data-"+t.replace(q,"-$1").toLowerCase();n=e.getAttribute(r);if(typeof n=="string"){try{n=n==="true"?!0:n==="false"?!1:n==="null"?null:+n+""===n?+n:I.test(n)?p.parseJSON(n):n}catch(i){}p.data(e,t,n)}else n=undefined}return n}function U(e){var t;for(t in e){if(t==="data"&&p.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function z(e,t,r,i){if(!p.acceptData(e))return;var s,o,u=p.expando,a=e.nodeType,f=a?p.cache:e,l=a?e[u]:e[u]&&u;if((!l||!f[l]||!i&&!f[l].data)&&r===undefined&&typeof t=="string")return;l||(a?l=e[u]=n.pop()||p.guid++:l=u),f[l]||(f[l]=a?{}:{toJSON:p.noop});if(typeof t=="object"||typeof t=="function")i?f[l]=p.extend(f[l],t):f[l].data=p.extend(f[l].data,t);return o=f[l],i||(o.data||(o.data={}),o=o.data),r!==undefined&&(o[p.camelCase(t)]=r),typeof t=="string"?(s=o[t],s==null&&(s=o[p.camelCase(t)])):s=o,s}function W(e,t,n){if(!p.acceptData(e))return;var r,i,s=e.nodeType,o=s?p.cache:e,u=s?e[p.expando]:p.expando;if(!o[u])return;if(t){r=n?o[u]:o[u].data;if(r){p.isArray(t)?t=t.concat(p.map(t,p.camelCase)):t in r?t=[t]:(t=p.camelCase(t),t in r?t=[t]:t=t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!U(r):!p.isEmptyObject(r))return}}if(!n){delete o[u].data;if(!U(o[u]))return}s?p.cleanData([e],!0):c.deleteExpando||o!=o.window?delete o[u]:o[u]=null}function tt(){return!0}function nt(){return!1}function rt(){try{return N.activeElement}catch(e){}}function it(e){var t=st.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Et(e,t){var n,r,i=0,s=typeof e.getElementsByTagName!==j?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==j?e.querySelectorAll(t||"*"):undefined;if(!s)for(s=[],n=e.childNodes||e;(r=n[i])!=null;i++)!t||p.nodeName(r,t)?s.push(r):p.merge(s,Et(r,t));return t===undefined||t&&p.nodeName(e,t)?p.merge([e],s):s}function St(e){K.test(e.type)&&(e.defaultChecked=e.checked)}function xt(e,t){return p.nodeName(e,"table")&&p.nodeName(t.nodeType!==11?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Tt(e){return e.type=(p.find.attr(e,"type")!==null)+"/"+e.type,e}function Nt(e){var t=mt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Ct(e,t){var n,r=0;for(;(n=e[r])!=null;r++)p._data(n,"globalEval",!t||p._data(t[r],"globalEval"))}function kt(e,t){if(t.nodeType!==1||!p.hasData(e))return;var n,r,i,s=p._data(e),o=p._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r")).appendTo(t.documentElement),t=(At[0].contentWindow||At[0].contentDocument).document,t.write(),t.close(),n=Mt(e,t),At.detach();Ot[e]=n}return n}function Ft(e,t){return{get:function(){var n=e();if(n==null)return;if(n){delete this.get;return}return(this.get=t).apply(this,arguments)}}}function $t(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Vt.length;while(i--){t=Vt[i]+n;if(t in e)return t}return r}function Jt(e,t){var n,r,i,s=[],o=0,u=e.length;for(;o=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||p.type(e)!=="object"||e.nodeType||p.isWindow(e))return!1;try{if(e.constructor&&!f.call(e,"constructor")&&!f.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(c.ownLast)for(t in e)return f.call(e,t);for(t in e);return t===undefined||f.call(e,t)},type:function(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?u[a.call(e)]||"object":typeof e},globalEval:function(t){t&&p.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(v,"ms-").replace(m,g)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,s=e.length,o=y(e);if(n)if(o)for(;ir.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function st(e){return e[y]=!0,e}function ot(e){var t=c.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t){var n=e.split("|"),i=e.length;while(i--)r.attrHandle[n[i]]=t}function at(e,t){var n=t&&e,r=n&&e.nodeType===1&&t.nodeType===1&&(~t.sourceIndex||k)-(~e.sourceIndex||k);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function ct(e){return st(function(t){return t=+t,st(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ht(e){return e&&typeof e.getElementsByTagName!==C&&e}function pt(){}function dt(e,t){var n,i,s,o,u,a,f,l=x[e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=r.preFilter;while(u){if(!n||(i=U.exec(u)))i&&(u=u.slice(i[0].length)||u),a.push(s=[]);n=!1;if(i=z.exec(u))n=i.shift(),s.push({value:n,type:i[0].replace(R," ")}),u=u.slice(n.length);for(o in r.filter)(i=$[o].exec(u))&&(!f[o]||(i=f[o](i)))&&(n=i.shift(),s.push({value:n,type:o,matches:i}),u=u.slice(n.length));if(!n)break}return t?u.length:u?rt.error(e):x(e,a).slice(0)}function vt(e){var t=0,n=e.length,r="";for(;t1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function yt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=yt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):_.apply(o,g)})}function wt(e){var t,n,i,s=e.length,o=r.relative[e[0].type],a=o||r.relative[" "],f=o?1:0,l=mt(function(e){return e===t},a,!0),c=mt(function(e){return P.call(t,e)>-1},a,!0),h=[function(e,n,r){return!o&&(r||n!==u)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];for(;f1&>(h),f>1&&vt(e.slice(0,f-1).concat({value:e[f-2].type===" "?"*":""})).replace(R,"$1"),n,f0,i=e.length>0,s=function(s,o,a,f,l){var h,p,d,v=0,m="0",g=s&&[],y=[],b=u,E=s||i&&r.find.TAG("*",l),S=w+=b==null?1:Math.random()||.1,x=E.length;l&&(u=o!==c&&o);for(;m!==x&&(h=E[m])!=null;m++){if(i&&h){p=0;while(d=e[p++])if(d(h,o,a)){f.push(h);break}l&&(w=S)}n&&((h=!d&&h)&&v--,s&&g.push(h))}v+=m;if(n&&m!==v){p=0;while(d=t[p++])d(g,y,o,a);if(s){if(v>0)while(m--)!g[m]&&!y[m]&&(y[m]=O.call(f));y=yt(y)}_.apply(f,y),l&&!s&&y.length>0&&v+t.length>1&&rt.uniqueSort(f)}return l&&(w=S,u=b),g};return n?st(s):s}function St(e,t,n){var r=0,i=t.length;for(;r2&&(f=a[0]).type==="ID"&&n.getById&&t.nodeType===9&&p&&r.relative[a[1].type]){t=(r.find.ID(f.matches[0].replace(et,tt),t)||[])[0];if(!t)return i;e=e.slice(a.shift().value.length)}u=$.needsContext.test(e)?0:a.length;while(u--){f=a[u];if(r.relative[l=f.type])break;if(c=r.find[l])if(s=c(f.matches[0].replace(et,tt),Y.test(a[0].type)&&ht(t.parentNode)||t)){a.splice(u,1),e=s.length&&vt(a);if(!e)return _.apply(i,s),i;break}}}return o(e,h)(s,t,!p,i,Y.test(e)&&ht(t.parentNode)||t),i}var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y="sizzle"+ -(new Date),b=e.document,w=0,E=0,S=it(),x=it(),T=it(),N=function(e,t){return e===t&&(f=!0),0},C=typeof undefined,k=1<<31,L={}.hasOwnProperty,A=[],O=A.pop,M=A.push,_=A.push,D=A.slice,P=A.indexOf||function(e){var t=0,n=this.length;for(;t+~]|"+B+")"+B+"*"),W=new RegExp("="+B+"*([^\\]'\"]*?)"+B+"*\\]","g"),X=new RegExp(q),V=new RegExp("^"+F+"$"),$={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\.("+j+")"),TAG:new RegExp("^("+j.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+B+"*(even|odd|(([+-]|)(\\d*)n|)"+B+"*(?:([+-]|)"+B+"*(\\d+)|))"+B+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+B+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+B+"*((?:-\\d)?\\d*)"+B+"*\\)|)(?=[^-]|$)","i")},J=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,G=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Y=/[+~]/,Z=/'|\\/g,et=new RegExp("\\\\([\\da-f]{1,6}"+B+"?|("+B+")|.)","ig"),tt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,r&1023|56320)};try{_.apply(A=D.call(b.childNodes),b.childNodes),A[b.childNodes.length].nodeType}catch(nt){_={apply:A.length?function(e,t){M.apply(e,D.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}n=rt.support={},s=rt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},l=rt.setDocument=function(e){var t,i=e?e.ownerDocument||e:b,o=i.defaultView;if(i===c||i.nodeType!==9||!i.documentElement)return c;c=i,h=i.documentElement,p=!s(i),o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",function(){l()},!1):o.attachEvent&&o.attachEvent("onunload",function(){l()})),n.attributes=ot(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ot(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(i.getElementsByClassName)&&ot(function(e){return e.innerHTML="
",e.firstChild.className="i",e.getElementsByClassName("i").length===2}),n.getById=ot(function(e){return h.appendChild(e).id=y,!i.getElementsByName||!i.getElementsByName(y).length}),n.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==C&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(delete r.find.ID,r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==C&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=n.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==C)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],i=0,s=t.getElementsByTagName(e);if(e==="*"){while(n=s[i++])n.nodeType===1&&r.push(n);return r}return s},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(typeof t.getElementsByClassName!==C&&p)return t.getElementsByClassName(e)},v=[],d=[];if(n.qsa=Q.test(i.querySelectorAll))ot(function(e){e.innerHTML="",e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+B+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||d.push("\\["+B+"*(?:value|"+H+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ot(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&d.push("name"+B+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")});return(n.matchesSelector=Q.test(m=h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ot(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),v.push("!=",q)}),d=d.length&&new RegExp(d.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),g=t||Q.test(h.contains)?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!r&&r.nodeType===1&&!!(n.contains?n.contains(r):e.compareDocumentPosition&&e.compareDocumentPosition(r)&16)}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},N=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,r&1||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===i||e.ownerDocument===b&&g(b,e)?-1:t===i||t.ownerDocument===b&&g(b,t)?1:a?P.call(a,e)-P.call(a,t):0:r&4?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,s=e.parentNode,o=t.parentNode,u=[e],l=[t];if(!s||!o)return e===i?-1:t===i?1:s?-1:o?1:a?P.call(a,e)-P.call(a,t):0;if(s===o)return at(e,t);n=e;while(n=n.parentNode)u.unshift(n);n=t;while(n=n.parentNode)l.unshift(n);while(u[r]===l[r])r++;return r?at(u[r],l[r]):u[r]===b?-1:l[r]===b?1:0},i},rt.matches=function(e,t){return rt(e,null,null,t)},rt.matchesSelector=function(e,t){(e.ownerDocument||e)!==c&&l(e),t=t.replace(W,"='$1']");if(n.matchesSelector&&p&&(!v||!v.test(t))&&(!d||!d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&e.document.nodeType!==11)return r}catch(i){}return rt(t,c,null,[e]).length>0},rt.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),g(e,t)},rt.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var i=r.attrHandle[t.toLowerCase()],s=i&&L.call(r.attrHandle,t.toLowerCase())?i(e,t,!p):undefined;return s!==undefined?s:n.attributes||!p?e.getAttribute(t):(s=e.getAttributeNode(t))&&s.specified?s.value:null},rt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},rt.uniqueSort=function(e){var t,r=[],i=0,s=0;f=!n.detectDuplicates,a=!n.sortStable&&e.slice(0),e.sort(N);if(f){while(t=e[s++])t===e[s]&&(i=r.push(s));while(i--)e.splice(r[i],1)}return a=null,e},i=rt.getText=function(e){var t,n="",r=0,s=e.nodeType;if(!s)while(t=e[r++])n+=i(t);else if(s===1||s===9||s===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(s===3||s===4)return e.nodeValue;return n},r=rt.selectors={cacheLength:50,createPseudo:st,match:$,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1].slice(0,3)==="nth"?(e[3]||rt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd")),e[5]=+(e[7]+e[8]||e[3]==="odd")):e[3]&&rt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return $.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&X.test(n)&&(t=dt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(et,tt).toLowerCase();return e==="*"?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=S[e+" "];return t||(t=new RegExp("(^|"+B+")"+e+"("+B+"|$)"))&&S(e,function(e){return t.test(typeof e.className=="string"&&e.className||typeof e.getAttribute!==C&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=rt.attr(r,e);return i==null?t==="!=":t?(i+="",t==="="?i===n:t==="!="?i!==n:t==="^="?n&&i.indexOf(n)===0:t==="*="?n&&i.indexOf(n)>-1:t==="$="?n&&i.slice(-n.length)===n:t==="~="?(" "+i+" ").indexOf(n)>-1:t==="|="?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var s=e.slice(0,3)!=="nth",o=e.slice(-4)!=="last",u=t==="of-type";return r===1&&i===0?function(e){return!!e.parentNode}:function(t,n,a){var f,l,c,h,p,d,v=s!==o?"nextSibling":"previousSibling",m=t.parentNode,g=u&&t.nodeName.toLowerCase(),b=!a&&!u;if(m){if(s){while(v){c=t;while(c=c[v])if(u?c.nodeName.toLowerCase()===g:c.nodeType===1)return!1;d=v=e==="only"&&!d&&"nextSibling"}return!0}d=[o?m.firstChild:m.lastChild];if(o&&b){l=m[y]||(m[y]={}),f=l[e]||[],p=f[0]===w&&f[1],h=f[0]===w&&f[2],c=p&&m.childNodes[p];while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if(c.nodeType===1&&++h&&c===t){l[e]=[w,p,h];break}}else if(b&&(f=(t[y]||(t[y]={}))[e])&&f[0]===w)h=f[1];else while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if((u?c.nodeName.toLowerCase()===g:c.nodeType===1)&&++h){b&&((c[y]||(c[y]={}))[e]=[w,h]);if(c===t)break}return h-=i,h===r||h%r===0&&h/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||rt.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,s=i(e,t),o=s.length;while(o--)r=P.call(e,s[o]),e[r]=!(n[r]=s[o])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=o(e.replace(R,"$1"));return r[y]?st(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:st(function(e){return function(t){return rt(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||"")||rt.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||n.indexOf(e+"-")===0;while((t=t.parentNode)&&t.nodeType===1);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},text:function(e){var t;return e.nodeName.toLowerCase()==="input"&&e.type==="text"&&((t=e.getAttribute("type"))==null||t.toLowerCase()==="text")},first:ct(function(){return[0]}),last:ct(function(e,t){return[t-1]}),eq:ct(function(e,t,n){return[n<0?n+t:n]}),even:ct(function(e,t){var n=0;for(;n=0;)e.push(r);return e}),gt:ct(function(e,t,n){var r=n<0?n+t:n;for(;++r(?:<\/\1>|)$/,S=/^.[^:#\[\.,]*$/;p.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),t.length===1&&r.nodeType===1?p.find.matchesSelector(r,e)?[r]:[]:p.find.matches(e,p.grep(t,function(e){return e.nodeType===1}))},p.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(typeof e!="string")return this.pushStack(p(e).filter(function(){for(t=0;t1?p.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(x(this,e||[],!1))},not:function(e){return this.pushStack(x(this,e||[],!0))},is:function(e){return!!x(this,typeof e=="string"&&w.test(e)?p(e):e||[],!1).length}});var T,N=e.document,C=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=p.fn.init=function(e,t){var n,r;if(!e)return this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?n=[null,e,null]:n=C.exec(e);if(n&&(n[1]||!t)){if(n[1]){t=t instanceof p?t[0]:t,p.merge(this,p.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:N,!0));if(E.test(n[1])&&p.isPlainObject(t))for(n in t)p.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}r=N.getElementById(n[2]);if(r&&r.parentNode){if(r.id!==n[2])return T.find(e);this.length=1,this[0]=r}return this.context=N,this.selector=e,this}return!t||t.jquery?(t||T).find(e):this.constructor(t).find(e)}return e.nodeType?(this.context=this[0]=e,this.length=1,this):p.isFunction(e)?typeof T.ready!="undefined"?T.ready(e):e(p):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),p.makeArray(e,this))};k.prototype=p.fn,T=p(N);var L=/^(?:parents|prev(?:Until|All))/,A={children:!0,contents:!0,next:!0,prev:!0};p.extend({dir:function(e,t,n){var r=[],i=e[t];while(i&&i.nodeType!==9&&(n===undefined||i.nodeType!==1||!p(i).is(n)))i.nodeType===1&&r.push(i),i=i[t];return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}}),p.fn.extend({has:function(e){var t,n=p(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:n.nodeType===1&&p.find.matchesSelector(n,e))){s.push(n);break}return this.pushStack(s.length>1?p.unique(s):s)},index:function(e){return e?typeof e=="string"?p.inArray(this[0],p(e)):p.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(p.unique(p.merge(this.get(),p(e,t))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),p.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return p.dir(e,"parentNode")},parentsUntil:function(e,t,n){return p.dir(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return p.dir(e,"nextSibling")},prevAll:function(e){return p.dir(e,"previousSibling")},nextUntil:function(e,t,n){return p.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return p.dir(e,"previousSibling",n)},siblings:function(e){return p.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return p.sibling(e.firstChild)},contents:function(e){return p.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:p.merge([],e.childNodes)}},function(e,t){p.fn[e]=function(n,r){var i=p.map(this,t,n);return e.slice(-5)!=="Until"&&(r=n),r&&typeof r=="string"&&(i=p.filter(r,i)),this.length>1&&(A[e]||(i=p.unique(i)),L.test(e)&&(i=i.reverse())),this.pushStack(i)}});var M=/\S+/g,_={};p.Callbacks=function(e){e=typeof e=="string"?_[e]||D(e):p.extend({},e);var t,n,r,i,s,o,u=[],a=!e.once&&[],f=function(c){n=e.memory&&c,r=!0,s=o||0,o=0,i=u.length,t=!0;for(;u&&s-1)u.splice(r,1),t&&(r<=i&&i--,r<=s&&s--)}),this},has:function(e){return e?p.inArray(e,u)>-1:!!u&&!!u.length},empty:function(){return u=[],i=0,this},disable:function(){return u=a=n=undefined,this},disabled:function(){return!u},lock:function(){return a=undefined,n||l.disable(),this},locked:function(){return!a},fireWith:function(e,n){return u&&(!r||a)&&(n=n||[],n=[e,n.slice?n.slice():n],t?a.push(n):f(n)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},p.extend({Deferred:function(e){var t=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return p.Deferred(function(n){p.each(t,function(t,s){var o=p.isFunction(e[t])&&e[t];i[s[1]](function(){var e=o&&o.apply(this,arguments);e&&p.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s[0]+"With"](this===r?n.promise():this,o?[e]:arguments)})}),e=null}).promise()},promise:function(e){return e!=null?p.extend(e,r):r}},i={};return r.pipe=r.then,p.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=function(){return i[s[0]+"With"](this===i?r:this,arguments),this},i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=r.call(arguments),i=n.length,s=i!==1||e&&p.isFunction(e.promise)?i:0,o=s===1?e:p.Deferred(),u=function(e,t,n){return function(i){t[e]=this,n[e]=arguments.length>1?r.call(arguments):i,n===a?o.notifyWith(t,n):--s||o.resolveWith(t,n)}},a,f,l;if(i>1){a=new Array(i),f=new Array(i),l=new Array(i);for(;t0)return;P.resolveWith(N,[p]),p.fn.trigger&&p(N).trigger("ready").off("ready")}}),p.ready.promise=function(t){if(!P){P=p.Deferred();if(N.readyState==="complete")setTimeout(p.ready);else if(N.addEventListener)N.addEventListener("DOMContentLoaded",B,!1),e.addEventListener("load",B,!1);else{N.attachEvent("onreadystatechange",B),e.attachEvent("onload",B);var n=!1;try{n=e.frameElement==null&&N.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!p.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}H(),p.ready()}}()}}return P.promise(t)};var j=typeof undefined,F;for(F in p(c))break;c.ownLast=F!=="0",c.inlineBlockNeedsLayout=!1,p(function(){var e,t,n=N.getElementsByTagName("body")[0];if(!n)return;e=N.createElement("div"),e.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",t=N.createElement("div"),n.appendChild(e).appendChild(t);if(typeof t.style.zoom!==j){t.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1";if(c.inlineBlockNeedsLayout=t.offsetWidth===3)n.style.zoom=1}n.removeChild(e),e=t=null}),function(){var e=N.createElement("div");if(c.deleteExpando==null){c.deleteExpando=!0;try{delete e.test}catch(t){c.deleteExpando=!1}}e=null}(),p.acceptData=function(e){var t=p.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return n!==1&&n!==9?!1:!t||t!==!0&&e.getAttribute("classid")===t};var I=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,q=/([A-Z])/g;p.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?p.cache[e[p.expando]]:e[p.expando],!!e&&!U(e)},data:function(e,t,n){return z(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return z(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)}}),p.fn.extend({data:function(e,t){var n,r,i,s=this[0],o=s&&s.attributes;if(e===undefined){if(this.length){i=p.data(s);if(s.nodeType===1&&!p._data(s,"parsedAttrs")){n=o.length;while(n--)r=o[n].name,r.indexOf("data-")===0&&(r=p.camelCase(r.slice(5)),R(s,r,i[r]));p._data(s,"parsedAttrs",!0)}}return i}return typeof e=="object"?this.each(function(){p.data(this,e)}):arguments.length>1?this.each(function(){p.data(this,e,t)}):s?R(s,e,p.data(s,e)):undefined},removeData:function(e){return this.each(function(){p.removeData(this,e)})}}),p.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=p._data(e,t),n&&(!r||p.isArray(n)?r=p._data(e,t,p.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=p.queue(e,t),r=n.length,i=n.shift(),s=p._queueHooks(e,t),o=function(){p.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return p._data(e,n)||p._data(e,n,{empty:p.Callbacks("once memory").add(function(){p._removeData(e,t+"queue"),p._removeData(e,n)})})}}),p.fn.extend({queue:function(e,t){var n=2;return typeof e!="string"&&(t=e,e="fx",n--),arguments.length
a",c.leadingWhitespace=t.firstChild.nodeType===3,c.tbody=!t.getElementsByTagName("tbody").length,c.htmlSerialize=!!t.getElementsByTagName("link").length,c.html5Clone=N.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",n.type="checkbox",n.checked=!0,e.appendChild(n),c.appendChecked=n.checked,t.innerHTML="",c.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,e.appendChild(t),t.innerHTML="",c.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,c.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){c.noCloneEvent=!1}),t.cloneNode(!0).click());if(c.deleteExpando==null){c.deleteExpando=!0;try{delete t.test}catch(r){c.deleteExpando=!1}}e=t=n=null})(),function(){var t,n,r=N.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(c[t+"Bubbles"]=n in e)||(r.setAttribute(n,"t"),c[t+"Bubbles"]=r.attributes[n].expando===!1);r=null}();var Q=/^(?:input|select|textarea)$/i,G=/^key/,Y=/^(?:mouse|contextmenu)|click/,Z=/^(?:focusinfocus|focusoutblur)$/,et=/^([^.]*)(?:\.(.+)|)$/;p.event={global:{},add:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p._data(e);if(!g)return;n.handler&&(a=n,n=a.handler,i=a.selector),n.guid||(n.guid=p.guid++),(o=g.events)||(o=g.events={}),(l=g.handle)||(l=g.handle=function(e){return typeof p===j||!!e&&p.event.triggered===e.type?undefined:p.event.dispatch.apply(l.elem,arguments)},l.elem=e),t=(t||"").match(M)||[""],u=t.length;while(u--){s=et.exec(t[u])||[],d=m=s[1],v=(s[2]||"").split(".").sort();if(!d)continue;f=p.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=p.event.special[d]||{},c=p.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&p.expr.match.needsContext.test(i),namespace:v.join(".")},a);if(!(h=o[d])){h=o[d]=[],h.delegateCount=0;if(!f.setup||f.setup.call(e,r,v,l)===!1)e.addEventListener?e.addEventListener(d,l,!1):e.attachEvent&&e.attachEvent("on"+d,l)}f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,c):h.push(c),p.event.global[d]=!0}e=null},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p.hasData(e)&&p._data(e);if(!g||!(l=g.events))return;t=(t||"").match(M)||[""],f=t.length;while(f--){u=et.exec(t[f])||[],d=m=u[1],v=(u[2]||"").split(".").sort();if(!d){for(d in l)p.event.remove(e,d+t[f],n,r,!0);continue}c=p.event.special[d]||{},d=(r?c.delegateType:c.bindType)||d,h=l[d]||[],u=u[2]&&new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=s=h.length;while(s--)o=h[s],(i||m===o.origType)&&(!n||n.guid===o.guid)&&(!u||u.test(o.namespace))&&(!r||r===o.selector||r==="**"&&o.selector)&&(h.splice(s,1),o.selector&&h.delegateCount--,c.remove&&c.remove.call(e,o));a&&!h.length&&((!c.teardown||c.teardown.call(e,v,g.handle)===!1)&&p.removeEvent(e,d,g.handle),delete l[d])}p.isEmptyObject(l)&&(delete g.handle,p._removeData(e,"events"))},trigger:function(t,n,r,i){var s,o,u,a,l,c,h,d=[r||N],v=f.call(t,"type")?t.type:t,m=f.call(t,"namespace")?t.namespace.split("."):[];u=c=r=r||N;if(r.nodeType===3||r.nodeType===8)return;if(Z.test(v+p.event.triggered))return;v.indexOf(".")>=0&&(m=v.split("."),v=m.shift(),m.sort()),o=v.indexOf(":")<0&&"on"+v,t=t[p.expando]?t:new p.Event(v,typeof t=="object"&&t),t.isTrigger=i?2:3,t.namespace=m.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=n==null?[t]:p.makeArray(n,[t]),l=p.event.special[v]||{};if(!i&&l.trigger&&l.trigger.apply(r,n)===!1)return;if(!i&&!l.noBubble&&!p.isWindow(r)){a=l.delegateType||v,Z.test(a+v)||(u=u.parentNode);for(;u;u=u.parentNode)d.push(u),c=u;c===(r.ownerDocument||N)&&d.push(c.defaultView||c.parentWindow||e)}h=0;while((u=d[h++])&&!t.isPropagationStopped())t.type=h>1?a:l.bindType||v,s=(p._data(u,"events")||{})[t.type]&&p._data(u,"handle"),s&&s.apply(u,n),s=o&&u[o],s&&s.apply&&p.acceptData(u)&&(t.result=s.apply(u,n),t.result===!1&&t.preventDefault());t.type=v;if(!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&p.acceptData(r)&&o&&r[v]&&!p.isWindow(r)){c=r[o],c&&(r[o]=null),p.event.triggered=v;try{r[v]()}catch(g){}p.event.triggered=undefined,c&&(r[o]=c)}return t.result},dispatch:function(e){e=p.event.fix(e);var t,n,i,s,o,u=[],a=r.call(arguments),f=(p._data(this,"events")||{})[e.type]||[],l=p.event.special[e.type]||{};a[0]=e,e.delegateTarget=this;if(l.preDispatch&&l.preDispatch.call(this,e)===!1)return;u=p.event.handlers.call(this,e,f),t=0;while((s=u[t++])&&!e.isPropagationStopped()){e.currentTarget=s.elem,o=0;while((i=s.handlers[o++])&&!e.isImmediatePropagationStopped())if(!e.namespace_re||e.namespace_re.test(i.namespace))e.handleObj=i,e.data=i.data,n=((p.event.special[i.origType]||{}).handle||i.handler).apply(s.elem,a),n!==undefined&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation())}return l.postDispatch&&l.postDispatch.call(this,e),e.result},handlers:function(e,t){var n,r,i,s,o=[],u=t.delegateCount,a=e.target;if(u&&a.nodeType&&(!e.button||e.type!=="click"))for(;a!=this;a=a.parentNode||this)if(a.nodeType===1&&(a.disabled!==!0||e.type!=="click")){i=[];for(s=0;s=0:p.find(n,this,null,[a]).length),i[n]&&i.push(r);i.length&&o.push({elem:a,handlers:i})}return u]","i"),at=/^\s+/,ft=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,lt=/<([\w:]+)/,ct=/\s*$/g,yt={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:c.htmlSerialize?[0,"",""]:[1,"X
","
"]},bt=it(N),wt=bt.appendChild(N.createElement("div"));yt.optgroup=yt.option,yt.tbody=yt.tfoot=yt.colgroup=yt.caption=yt.thead,yt.th=yt.td,p.extend({clone:function(e,t,n){var r,i,s,o,u,a=p.contains(e.ownerDocument,e);c.html5Clone||p.isXMLDoc(e)||!ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(wt.innerHTML=e.outerHTML,wt.removeChild(s=wt.firstChild));if((!c.noCloneEvent||!c.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!p.isXMLDoc(e)){r=Et(s),u=Et(e);for(o=0;(i=u[o])!=null;++o)r[o]&&Lt(i,r[o])}if(t)if(n){u=u||Et(e),r=r||Et(s);for(o=0;(i=u[o])!=null;o++)kt(i,r[o])}else kt(e,s);return r=Et(s,"script"),r.length>0&&Ct(r,!a&&Et(e,"script")),r=u=i=null,s},buildFragment:function(e,t,n,r){var i,s,o,u,a,f,l,h=e.length,d=it(t),v=[],m=0;for(;m")+l[2],i=l[0];while(i--)u=u.lastChild;!c.leadingWhitespace&&at.test(s)&&v.push(t.createTextNode(at.exec(s)[0]));if(!c.tbody){s=a==="table"&&!ct.test(s)?u.firstChild:l[1]===""&&!ct.test(s)?u:0,i=s&&s.childNodes.length;while(i--)p.nodeName(f=s.childNodes[i],"tbody")&&!f.childNodes.length&&s.removeChild(f)}p.merge(v,u.childNodes),u.textContent="";while(u.firstChild)u.removeChild(u.firstChild);u=d.lastChild}}u&&d.removeChild(u),c.appendChecked||p.grep(Et(v,"input"),St),m=0;while(s=v[m++]){if(r&&p.inArray(s,r)!==-1)continue;o=p.contains(s.ownerDocument,s),u=Et(d.appendChild(s),"script"),o&&Ct(u);if(n){i=0;while(s=u[i++])vt.test(s.type||"")&&n.push(s)}}return u=null,d},cleanData:function(e,t){var r,i,s,o,u=0,a=p.expando,f=p.cache,l=c.deleteExpando,h=p.event.special;for(;(r=e[u])!=null;u++)if(t||p.acceptData(r)){s=r[a],o=s&&f[s];if(o){if(o.events)for(i in o.events)h[i]?p.event.remove(r,i):p.removeEvent(r,i,o.handle);f[s]&&(delete f[s],l?delete r[a]:typeof r.removeAttribute!==j?r.removeAttribute(a):r[a]=null,n.push(s))}}}}),p.fn.extend({text:function(e){return J(this,function(e){return e===undefined?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||N).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?p.filter(e,this):this,i=0;for(;(n=r[i])!=null;i++)!t&&n.nodeType===1&&p.cleanData(Et(n)),n.parentNode&&(t&&p.contains(n.ownerDocument,n)&&Ct(Et(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&p.cleanData(Et(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&p.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return p.clone(this,e,t)})},html:function(e){return J(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined)return t.nodeType===1?t.innerHTML.replace(ot,""):undefined;if(typeof e=="string"&&!pt.test(e)&&(c.htmlSerialize||!ut.test(e))&&(c.leadingWhitespace||!at.test(e))&&!yt[(lt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ft,"<$1>");try{for(;n1&&typeof v=="string"&&!c.checkClone&&dt.test(v))return this.each(function(n){var r=h.eq(n);m&&(e[0]=v.call(this,n,r.html())),r.domManip(e,t)});if(l){a=p.buildFragment(e,this[0].ownerDocument,!1,this),n=a.firstChild,a.childNodes.length===1&&(a=n);if(n){o=p.map(Et(a,"script"),Tt),s=o.length;for(;f
a",e=n.getElementsByTagName("a")[0],e.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(e.style.opacity),c.cssFloat=!!e.style.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=n.style.backgroundClip==="content-box",e=n=null,c.shrinkWrapBlocks=function(){var e,n,i,s;if(t==null){e=N.getElementsByTagName("body")[0];if(!e)return;s="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",n=N.createElement("div"),i=N.createElement("div"),e.appendChild(n).appendChild(i),t=!1,typeof i.style.zoom!==j&&(i.style.cssText=r+";width:1px;padding:1px;zoom:1",i.innerHTML="
",i.firstChild.style.width="5px",t=i.offsetWidth!==3),e.removeChild(n),e=n=i=null}return t}})();var Dt=/^margin/,Pt=new RegExp("^("+X+")(?!px)[a-z%]+$","i"),Ht,Bt,jt=/^(top|right|bottom|left)$/;e.getComputedStyle?(Ht=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n.getPropertyValue(t)||n[t]:undefined,n&&(o===""&&!p.contains(e.ownerDocument,e)&&(o=p.style(e,t)),Pt.test(o)&&Dt.test(t)&&(r=u.width,i=u.minWidth,s=u.maxWidth,u.minWidth=u.maxWidth=u.width=o,o=n.width,u.width=r,u.minWidth=i,u.maxWidth=s)),o===undefined?o:o+""}):N.documentElement.currentStyle&&(Ht=function(e){return e.currentStyle},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n[t]:undefined,o==null&&u&&u[t]&&(o=u[t]),Pt.test(o)&&!jt.test(t)&&(r=u.left,i=e.runtimeStyle,s=i&&i.left,s&&(i.left=e.currentStyle.left),u.left=t==="fontSize"?"1em":o,o=u.pixelLeft+"px",u.left=r,s&&(i.left=s)),o===undefined?o:o+""||"auto"}),function(){function l(){var t,n,u=N.getElementsByTagName("body")[0];if(!u)return;t=N.createElement("div"),n=N.createElement("div"),t.style.cssText=a,u.appendChild(t).appendChild(n),n.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",p.swap(u,u.style.zoom!=null?{zoom:1}:{},function(){r=n.offsetWidth===4}),i=!0,s=!1,o=!0,e.getComputedStyle&&(s=(e.getComputedStyle(n,null)||{}).top!=="1%",i=(e.getComputedStyle(n,null)||{width:"4px"}).width==="4px"),u.removeChild(t),n=u=null}var t,n,r,i,s,o,u=N.createElement("div"),a="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",f="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";u.innerHTML="
a",t=u.getElementsByTagName("a")[0],t.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(t.style.opacity),c.cssFloat=!!t.style.cssFloat,u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=u.style.backgroundClip==="content-box",t=u=null,p.extend(c,{reliableHiddenOffsets:function(){if(n!=null)return n;var e,t,r,i=N.createElement("div"),s=N.getElementsByTagName("body")[0];if(!s)return;return i.setAttribute("className","t"),i.innerHTML="
a",e=N.createElement("div"),e.style.cssText=a,s.appendChild(e).appendChild(i),i.innerHTML="
t
",t=i.getElementsByTagName("td"),t[0].style.cssText="padding:0;margin:0;border:0;display:none",r=t[0].offsetHeight===0,t[0].style.display="",t[1].style.display="none",n=r&&t[0].offsetHeight===0,s.removeChild(e),i=s=null,n},boxSizing:function(){return r==null&&l(),r},boxSizingReliable:function(){return i==null&&l(),i},pixelPosition:function(){return s==null&&l(),s},reliableMarginRight:function(){var t,n,r,i;if(o==null&&e.getComputedStyle){t=N.getElementsByTagName("body")[0];if(!t)return;n=N.createElement("div"),r=N.createElement("div"),n.style.cssText=a,t.appendChild(n).appendChild(r),i=r.appendChild(N.createElement("div")),i.style.cssText=r.style.cssText=f,i.style.marginRight=i.style.width="0",r.style.width="1px",o=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight),t.removeChild(n)}return o}})}(),p.swap=function(e,t,n,r){var i,s,o={};for(s in t)o[s]=e.style[s],e.style[s]=t[s];i=n.apply(e,r||[]);for(s in t)e.style[s]=o[s];return i};var It=/alpha\([^)]*\)/i,qt=/opacity\s*=\s*([^)]*)/,Rt=/^(none|table(?!-c[ea]).+)/,Ut=new RegExp("^("+X+")(.*)$","i"),zt=new RegExp("^([+-])=("+X+")","i"),Wt={position:"absolute",visibility:"hidden",display:"block"},Xt={letterSpacing:0,fontWeight:400},Vt=["Webkit","O","Moz","ms"];p.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Bt(e,"opacity");return n===""?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":c.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var i,s,o,u=p.camelCase(t),a=e.style;t=p.cssProps[u]||(p.cssProps[u]=$t(a,u)),o=p.cssHooks[t]||p.cssHooks[u];if(n===undefined)return o&&"get"in o&&(i=o.get(e,!1,r))!==undefined?i:a[t];s=typeof n,s==="string"&&(i=zt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(p.css(e,t)),s="number");if(n==null||n!==n)return;s==="number"&&!p.cssNumber[u]&&(n+="px"),!c.clearCloneStyle&&n===""&&t.indexOf("background")===0&&(a[t]="inherit");if(!o||!("set"in o)||(n=o.set(e,n,r))!==undefined)try{a[t]="",a[t]=n}catch(f){}},css:function(e,t,n,r){var i,s,o,u=p.camelCase(t);return t=p.cssProps[u]||(p.cssProps[u]=$t(e.style,u)),o=p.cssHooks[t]||p.cssHooks[u],o&&"get"in o&&(s=o.get(e,!0,n)),s===undefined&&(s=Bt(e,t,r)),s==="normal"&&t in Xt&&(s=Xt[t]),n===""||n?(i=parseFloat(s),n===!0||p.isNumeric(i)?i||0:s):s}}),p.each(["height","width"],function(e,t){p.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&Rt.test(p.css(e,"display"))?p.swap(e,Wt,function(){return Gt(e,t,r)}):Gt(e,t,r)},set:function(e,n,r){var i=r&&Ht(e);return Kt(e,n,r?Qt(e,t,r,c.boxSizing()&&p.css(e,"boxSizing",!1,i)==="border-box",i):0)}}}),c.opacity||(p.cssHooks.opacity={get:function(e,t){return qt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=p.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if((t>=1||t==="")&&p.trim(s.replace(It,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(t===""||r&&!r.filter)return}n.filter=It.test(s)?s.replace(It,i):s+" "+i}}),p.cssHooks.marginRight=Ft(c.reliableMarginRight,function(e,t){if(t)return p.swap(e,{display:"inline-block"},Bt,[e,"marginRight"])}),p.each({margin:"",padding:"",border:"Width"},function(e,t){p.cssHooks[e+t]={expand:function(n){var r=0,i={},s=typeof n=="string"?n.split(" "):[n];for(;r<4;r++)i[e+V[r]+t]=s[r]||s[r-2]||s[0];return i}},Dt.test(e)||(p.cssHooks[e+t].set=Kt)}),p.fn.extend({css:function(e,t){return J(this,function(e,t,n){var r,i,s={},o=0;if(p.isArray(t)){r=Ht(e),i=t.length;for(;o1)},show:function(){return Jt(this,!0)},hide:function(){return Jt(this)},toggle:function(e){return typeof e=="boolean"?e?this.show():this.hide():this.each(function(){$(this)?p(this).show():p(this).hide()})}}),p.Tween=Yt,Yt.prototype={constructor:Yt,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(p.cssNumber[n]?"":"px")},cur:function(){var e=Yt.propHooks[this.prop];return e&&e.get?e.get(this):Yt.propHooks._default.get(this)},run:function(e){var t,n=Yt.propHooks[this.prop];return this.options.duration?this.pos=t=p.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yt.propHooks._default.set(this),this}},Yt.prototype.init.prototype=Yt.prototype,Yt.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=p.css(e.elem,e.prop,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){p.fx.step[e.prop]?p.fx.step[e.prop](e):e.elem.style&&(e.elem.style[p.cssProps[e.prop]]!=null||p.cssHooks[e.prop])?p.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yt.propHooks.scrollTop=Yt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},p.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},p.fx=Yt.prototype.init,p.fx.step={};var Zt,en,tn=/^(?:toggle|show|hide)$/,nn=new RegExp("^(?:([+-])=|)("+X+")([a-z%]*)$","i"),rn=/queueHooks$/,sn=[ln],on={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=nn.exec(t),s=i&&i[3]||(p.cssNumber[e]?"":"px"),o=(p.cssNumber[e]||s!=="px"&&+r)&&nn.exec(p.css(n.elem,e)),u=1,a=20;if(o&&o[3]!==s){s=s||o[3],i=i||[],o=+r||1;do u=u||".5",o/=u,p.style(n.elem,e,o+s);while(u!==(u=n.cur()/r)&&u!==1&&--a)}return i&&(o=n.start=+o||+r||0,n.unit=s,n.end=i[1]?o+(i[1]+1)*i[2]:+i[2]),n}]};p.Animation=p.extend(hn,{tweener:function(e,t){p.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r
a",e=i.getElementsByTagName("a")[0],n=N.createElement("select"),r=n.appendChild(N.createElement("option")),t=i.getElementsByTagName("input")[0],e.style.cssText="top:1px",c.getSetAttribute=i.className!=="t",c.style=/top/.test(e.getAttribute("style")),c.hrefNormalized=e.getAttribute("href")==="/a",c.checkOn=!!t.value,c.optSelected=r.selected,c.enctype=!!N.createElement("form").enctype,n.disabled=!0,c.optDisabled=!r.disabled,t=N.createElement("input"),t.setAttribute("value",""),c.input=t.getAttribute("value")==="",t.value="t",t.setAttribute("type","radio"),c.radioValue=t.value==="t",e=t=n=r=i=null}();var pn=/\r/g;p.fn.extend({val:function(e){var t,n,r,i=this[0];if(!arguments.length){if(i)return t=p.valHooks[i.type]||p.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,typeof n=="string"?n.replace(pn,""):n==null?"":n);return}return r=p.isFunction(e),this.each(function(n){var i;if(this.nodeType!==1)return;r?i=e.call(this,n,p(this).val()):i=e,i==null?i="":typeof i=="number"?i+="":p.isArray(i)&&(i=p.map(i,function(e){return e==null?"":e+""})),t=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!t||!("set"in t)||t.set(this,i,"value")===undefined)this.value=i})}}),p.extend({valHooks:{option:{get:function(e){var t=p.find.attr(e,"value");return t!=null?t:p.text(e)}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0)try{r.selected=n=!0}catch(u){r.scrollHeight}else r.selected=!1}return n||(e.selectedIndex=-1),i}}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]={set:function(e,t){if(p.isArray(t))return e.checked=p.inArray(p(e).val(),t)>=0}},c.checkOn||(p.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})});var dn,vn,mn=p.expr.attrHandle,gn=/^(?:checked|selected)$/i,yn=c.getSetAttribute,bn=c.input;p.fn.extend({attr:function(e,t){return J(this,p.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){p.removeAttr(this,e)})}}),p.extend({attr:function(e,t,n){var r,i,s=e.nodeType;if(!e||s===3||s===8||s===2)return;if(typeof e.getAttribute===j)return p.prop(e,t,n);if(s!==1||!p.isXMLDoc(e))t=t.toLowerCase(),r=p.attrHooks[t]||(p.expr.match.bool.test(t)?vn:dn);if(n===undefined)return r&&"get"in r&&(i=r.get(e,t))!==null?i:(i=p.find.attr(e,t),i==null?undefined:i);if(n!==null)return r&&"set"in r&&(i=r.set(e,n,t))!==undefined?i:(e.setAttribute(t,n+""),n);p.removeAttr(e,t)},removeAttr:function(e,t){var n,r,i=0,s=t&&t.match(M);if(s&&e.nodeType===1)while(n=s[i++])r=p.propFix[n]||n,p.expr.match.bool.test(n)?bn&&yn||!gn.test(n)?e[r]=!1:e[p.camelCase("default-"+n)]=e[r]=!1:p.attr(e,n,""),e.removeAttribute(yn?n:r)},attrHooks:{type:{set:function(e,t){if(!c.radioValue&&t==="radio"&&p.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),vn={set:function(e,t,n){return t===!1?p.removeAttr(e,n):bn&&yn||!gn.test(n)?e.setAttribute(!yn&&p.propFix[n]||n,n):e[p.camelCase("default-"+n)]=e[n]=!0,n}},p.each(p.expr.match.bool.source.match(/\w+/g),function(e,t){var n=mn[t]||p.find.attr;mn[t]=bn&&yn||!gn.test(t)?function(e,t,r){var i,s;return r||(s=mn[t],mn[t]=i,i=n(e,t,r)!=null?t.toLowerCase():null,mn[t]=s),i}:function(e,t,n){if(!n)return e[p.camelCase("default-"+t)]?t.toLowerCase():null}});if(!bn||!yn)p.attrHooks.value={set:function(e,t,n){if(!p.nodeName(e,"input"))return dn&&dn.set(e,t,n);e.defaultValue=t}};yn||(dn={set:function(e,t,n){var r=e.getAttributeNode(n);r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="";if(n==="value"||t===e.getAttribute(n))return t}},mn.id=mn.name=mn.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&r.value!==""?r.value:null},p.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:dn.set},p.attrHooks.contenteditable={set:function(e,t,n){dn.set(e,t===""?!1:t,n)}},p.each(["width","height"],function(e,t){p.attrHooks[t]={set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}}})),c.style||(p.attrHooks.style={get:function(e){return e.style.cssText||undefined},set:function(e,t){return e.style.cssText=t+""}});var wn=/^(?:input|select|textarea|button|object)$/i,En=/^(?:a|area)$/i;p.fn.extend({prop:function(e,t){return J(this,p.prop,e,t,arguments.length>1)},removeProp:function(e){return e=p.propFix[e]||e,this.each(function(){try{this[e]=undefined,delete this[e]}catch(t){}})}}),p.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,s,o=e.nodeType;if(!e||o===3||o===8||o===2)return;return s=o!==1||!p.isXMLDoc(e),s&&(t=p.propFix[t]||t,i=p.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&(r=i.get(e,t))!==null?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=p.find.attr(e,"tabindex");return t?parseInt(t,10):wn.test(e.nodeName)||En.test(e.nodeName)&&e.href?0:-1}}}}),c.hrefNormalized||p.each(["href","src"],function(e,t){p.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),c.optSelected||(p.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),p.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){p.propFix[this.toLowerCase()]=this}),c.enctype||(p.propFix.enctype="encoding");var Sn=/[\t\r\n\f]/g;p.fn.extend({addClass:function(e){var t,n,r,i,s,o,u=0,a=this.length,f=typeof e=="string"&&e;if(p.isFunction(e))return this.each(function(t){p(this).addClass(e.call(this,t,this.className))});if(f){t=(e||"").match(M)||[];for(;u=0)r=r.replace(" "+i+" "," ");o=e?p.trim(r):"",n.className!==o&&(n.className=o)}}}return this},toggleClass:function(e,t){var n=typeof e;return typeof t=="boolean"&&n==="string"?t?this.addClass(e):this.removeClass(e):p.isFunction(e)?this.each(function(n){p(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var t,r=0,i=p(this),s=e.match(M)||[];while(t=s[r++])i.hasClass(t)?i.removeClass(t):i.addClass(t)}else if(n===j||n==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||e===!1?"":p._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){p.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),p.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)}});var xn=p.now(),Tn=/\?/,Nn=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;p.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=p.trim(t+"");return i&&!p.trim(i.replace(Nn,function(e,t,i,s){return n&&t&&(r=0),r===0?e:(n=i||t,r+=!s-!i,"")}))?Function("return "+i)():p.error("Invalid JSON: "+t)},p.parseXML=function(t){var n,r;if(!t||typeof t!="string")return null;try{e.DOMParser?(r=new DOMParser,n=r.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(i){n=undefined}return(!n||!n.documentElement||n.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+t),n};var Cn,kn,Ln=/#.*$/,An=/([?&])_=[^&]*/,On=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,Mn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,_n=/^(?:GET|HEAD)$/,Dn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hn={},Bn={},jn="*/".concat("*");try{kn=location.href}catch(Fn){kn=N.createElement("a"),kn.href="",kn=kn.href}Cn=Pn.exec(kn.toLowerCase())||[],p.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kn,type:"GET",isLocal:Mn.test(Cn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":jn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Rn(Rn(e,p.ajaxSettings),t):Rn(p.ajaxSettings,e)},ajaxPrefilter:In(Hn),ajaxTransport:In(Bn),ajax:function(e,t){function x(e,t,n,r){var f,g,y,w,S,x=t;if(b===2)return;b=2,o&&clearTimeout(o),a=undefined,s=r||"",E.readyState=e>0?4:0,f=e>=200&&e<300||e===304,n&&(w=Un(l,E,n)),w=zn(l,w,E,f);if(f)l.ifModified&&(S=E.getResponseHeader("Last-Modified"),S&&(p.lastModified[i]=S),S=E.getResponseHeader("etag"),S&&(p.etag[i]=S)),e===204||l.type==="HEAD"?x="nocontent":e===304?x="notmodified":(x=w.state,g=w.data,y=w.error,f=!y);else{y=x;if(e||!x)x="error",e<0&&(e=0)}E.status=e,E.statusText=(t||x)+"",f?d.resolveWith(c,[g,x,E]):d.rejectWith(c,[E,x,y]),E.statusCode(m),m=undefined,u&&h.trigger(f?"ajaxSuccess":"ajaxError",[E,l,f?g:y]),v.fireWith(c,[E,x]),u&&(h.trigger("ajaxComplete",[E,l]),--p.active||p.event.trigger("ajaxStop"))}typeof e=="object"&&(t=e,e=undefined),t=t||{};var n,r,i,s,o,u,a,f,l=p.ajaxSetup({},t),c=l.context||l,h=l.context&&(c.nodeType||c.jquery)?p(c):p.event,d=p.Deferred(),v=p.Callbacks("once memory"),m=l.statusCode||{},g={},y={},b=0,w="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(b===2){if(!f){f={};while(t=On.exec(s))f[t[1].toLowerCase()]=t[2]}t=f[e.toLowerCase()]}return t==null?null:t},getAllResponseHeaders:function(){return b===2?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,g[e]=t),this},overrideMimeType:function(e){return b||(l.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)m[t]=[m[t],e[t]];else E.always(e[E.status]);return this},abort:function(e){var t=e||w;return a&&a.abort(t),x(0,t),this}};d.promise(E).complete=v.add,E.success=E.done,E.error=E.fail,l.url=((e||l.url||kn)+"").replace(Ln,"").replace(Dn,Cn[1]+"//"),l.type=t.method||t.type||l.method||l.type,l.dataTypes=p.trim(l.dataType||"*").toLowerCase().match(M)||[""],l.crossDomain==null&&(n=Pn.exec(l.url.toLowerCase()),l.crossDomain=!(!n||n[1]===Cn[1]&&n[2]===Cn[2]&&(n[3]||(n[1]==="http:"?"80":"443"))===(Cn[3]||(Cn[1]==="http:"?"80":"443")))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),qn(Hn,l,t,E);if(b===2)return E;u=l.global,u&&p.active++===0&&p.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!_n.test(l.type),i=l.url,l.hasContent||(l.data&&(i=l.url+=(Tn.test(i)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=An.test(i)?i.replace(An,"$1_="+xn++):i+(Tn.test(i)?"&":"?")+"_="+xn++)),l.ifModified&&(p.lastModified[i]&&E.setRequestHeader("If-Modified-Since",p.lastModified[i]),p.etag[i]&&E.setRequestHeader("If-None-Match",p.etag[i])),(l.data&&l.hasContent&&l.contentType!==!1||t.contentType)&&E.setRequestHeader("Content-Type",l.contentType),E.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+jn+"; q=0.01":""):l.accepts["*"]);for(r in l.headers)E.setRequestHeader(r,l.headers[r]);if(!l.beforeSend||l.beforeSend.call(c,E,l)!==!1&&b!==2){w="abort";for(r in{success:1,error:1,complete:1})E[r](l[r]);a=qn(Bn,l,t,E);if(!a)x(-1,"No Transport");else{E.readyState=1,u&&h.trigger("ajaxSend",[E,l]),l.async&&l.timeout>0&&(o=setTimeout(function(){E.abort("timeout")},l.timeout));try{b=1,a.send(g,x)}catch(S){if(!(b<2))throw S;x(-1,S)}}return E}return E.abort()},getJSON:function(e,t,n){return p.get(e,t,n,"json")},getScript:function(e,t){return p.get(e,undefined,t,"script")}}),p.each(["get","post"],function(e,t){p[t]=function(e,n,r,i){return p.isFunction(n)&&(i=i||r,r=n,n=undefined),p.ajax({url:e,type:t,dataType:i,data:n,success:r})}}),p.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){p.fn[t]=function(e){return this.on(t,e)}}),p._evalUrl=function(e){return p.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},p.fn.extend({wrapAll:function(e){if(p.isFunction(e))return this.each(function(t){p(this).wrapAll(e.call(this,t))});if(this[0]){var t=p(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return p.isFunction(e)?this.each(function(t){p(this).wrapInner(e.call(this,t))}):this.each(function(){var t=p(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=p.isFunction(e);return this.each(function(n){p(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()}}),p.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!c.reliableHiddenOffsets()&&(e.style&&e.style.display||p.css(e,"display"))==="none"},p.expr.filters.visible=function(e){return!p.expr.filters.hidden(e)};var Wn=/%20/g,Xn=/\[\]$/,Vn=/\r?\n/g,$n=/^(?:submit|button|image|reset|file)$/i,Jn=/^(?:input|select|textarea|keygen)/i;p.param=function(e,t){var n,r=[],i=function(e,t){t=p.isFunction(t)?t():t==null?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};t===undefined&&(t=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(e)||e.jquery&&!p.isPlainObject(e))p.each(e,function(){i(this.name,this.value)});else for(n in e)Kn(n,e[n],t,i);return r.join("&").replace(Wn,"+")},p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=p.prop(this,"elements");return e?p.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!p(this).is(":disabled")&&Jn.test(this.nodeName)&&!$n.test(e)&&(this.checked||!K.test(e))}).map(function(e,t){var n=p(this).val();return n==null?null:p.isArray(n)?p.map(n,function(e){return{name:t.name,value:e.replace(Vn,"\r\n")}}):{name:t.name,value:n.replace(Vn,"\r\n")}}).get()}}),p.ajaxSettings.xhr=e.ActiveXObject!==undefined?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zn()||er()}:Zn;var Qn=0,Gn={},Yn=p.ajaxSettings.xhr();e.ActiveXObject&&p(e).on("unload",function(){for(var e in Gn)Gn[e](undefined,!0)}),c.cors=!!Yn&&"withCredentials"in Yn,Yn=c.ajax=!!Yn,Yn&&p.ajaxTransport(function(e){if(!e.crossDomain||c.cors){var t;return{send:function(n,r){var i,s=e.xhr(),o=++Qn;s.open(e.type,e.url,e.async,e.username,e.password);if(e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),!e.crossDomain&&!n["X-Requested-With"]&&(n["X-Requested-With"]="XMLHttpRequest");for(i in n)n[i]!==undefined&&s.setRequestHeader(i,n[i]+"");s.send(e.hasContent&&e.data||null),t=function(n,i){var u,a,f;if(t&&(i||s.readyState===4)){delete Gn[o],t=undefined,s.onreadystatechange=p.noop;if(i)s.readyState!==4&&s.abort();else{f={},u=s.status,typeof s.responseText=="string"&&(f.text=s.responseText);try{a=s.statusText}catch(l){a=""}!u&&e.isLocal&&!e.crossDomain?u=f.text?200:404:u===1223&&(u=204)}}f&&r(u,a,f,s.getAllResponseHeaders())},e.async?s.readyState===4?setTimeout(t):s.onreadystatechange=Gn[o]=t:t()},abort:function(){t&&t(undefined,!0)}}}}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return p.globalEval(e),e}}}),p.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),p.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=N.head||p("head")[0]||N.documentElement;return{send:function(r,i){t=N.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){if(n||!t.readyState||/loaded|complete/.test(t.readyState))t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,"success")},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(undefined,!0)}}}});var tr=[],nr=/(=)\?(?=&|$)|\?\?/;p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=tr.pop()||p.expando+"_"+xn++;return this[e]=!0,e}}),p.ajaxPrefilter("json jsonp",function(t,n,r){var i,s,o,u=t.jsonp!==!1&&(nr.test(t.url)?"url":typeof t.data=="string"&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&nr.test(t.data)&&"data");if(u||t.dataTypes[0]==="jsonp")return i=t.jsonpCallback=p.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,u?t[u]=t[u].replace(nr,"$1"+i):t.jsonp!==!1&&(t.url+=(Tn.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return o||p.error(i+" was not called"),o[0]},t.dataTypes[0]="json",s=e[i],e[i]=function(){o=arguments},r.always(function(){e[i]=s,t[i]&&(t.jsonpCallback=n.jsonpCallback,tr.push(i)),o&&p.isFunction(s)&&s(o[0]),o=s=undefined}),"script"}),p.parseHTML=function(e,t,n){if(!e||typeof e!="string")return null;typeof t=="boolean"&&(n=t,t=!1),t=t||N;var r=E.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=p.buildFragment([e],t,i),i&&i.length&&p(i).remove(),p.merge([],r.childNodes))};var rr=p.fn.load;p.fn.load=function(e,t,n){if(typeof e!="string"&&rr)return rr.apply(this,arguments);var r,i,s,o=this,u=e.indexOf(" ");return u>=0&&(r=e.slice(u,e.length),e=e.slice(0,u)),p.isFunction(t)?(n=t,t=undefined):t&&typeof t=="object"&&(s="POST"),o.length>0&&p.ajax({url:e,type:s,dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?p("
").append(p.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){o.each(n,i||[e.responseText,t,e])}),this},p.expr.filters.animated=function(e){return p.grep(p.timers,function(t){return e===t.elem}).length};var ir=e.document.documentElement;p.offset={setOffset:function(e,t,n){var r,i,s,o,u,a,f,l=p.css(e,"position"),c=p(e),h={};l==="static"&&(e.style.position="relative"),u=c.offset(),s=p.css(e,"top"),a=p.css(e,"left"),f=(l==="absolute"||l==="fixed")&&p.inArray("auto",[s,a])>-1,f?(r=c.position(),o=r.top,i=r.left):(o=parseFloat(s)||0,i=parseFloat(a)||0),p.isFunction(t)&&(t=t.call(e,n,u)),t.top!=null&&(h.top=t.top-u.top+o),t.left!=null&&(h.left=t.left-u.left+i),"using"in t?t.using.call(e,h):c.css(h)}},p.fn.extend({offset:function(e){if(arguments.length)return e===undefined?this:this.each(function(t){p.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],s=i&&i.ownerDocument;if(!s)return;return t=s.documentElement,p.contains(t,i)?(typeof i.getBoundingClientRect!==j&&(r=i.getBoundingClientRect()),n=sr(s),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(!this[0])return;var e,t,n={top:0,left:0},r=this[0];return p.css(r,"position")==="fixed"?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),p.nodeName(e[0],"html")||(n=e.offset()),n.top+=p.css(e[0],"borderTopWidth",!0),n.left+=p.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-p.css(r,"marginTop",!0),left:t.left-n.left-p.css(r,"marginLeft",!0)}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||ir;while(e&&!p.nodeName(e,"html")&&p.css(e,"position")==="static")e=e.offsetParent;return e||ir})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);p.fn[e]=function(r){return J(this,function(e,r,i){var s=sr(e);if(i===undefined)return s?t in s?s[t]:s.document.documentElement[r]:e[r];s?s.scrollTo(n?p(s).scrollLeft():i,n?i:p(s).scrollTop()):e[r]=i},e,r,arguments.length,null)}}),p.each(["top","left"],function(e,t){p.cssHooks[t]=Ft(c.pixelPosition,function(e,n){if(n)return n=Bt(e,t),Pt.test(n)?p(e).position()[t]+"px":n})}),p.each({Height:"height",Width:"width"},function(e,t){p.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){p.fn[r]=function(r,i){var s=arguments.length&&(n||typeof r!="boolean"),o=n||(r===!0||i===!0?"margin":"border");return J(this,function(t,n,r){var i;return p.isWindow(t)?t.document.documentElement["client"+e]:t.nodeType===9?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?p.css(t,n,o):p.style(t,n,r,o)},t,s?r:undefined,s,null)}})}),p.fn.size=function(){return this.length},p.fn.andSelf=p.fn.addBack,typeof define=="function"&&define.amd&&define("jquery",[],function(){return p});var or=e.jQuery,ur=e.$;return p.noConflict=function(t){return e.$===p&&(e.$=ur),t&&e.jQuery===p&&(e.jQuery=or),p},typeof t===j&&(e.jQuery=e.$=p),p}),define("jquery-private",["jquery"],function(e){return e.noConflict(!0)}),function(){function x(e){function t(t,n,r,i,s,o){for(;s>=0&&s0?0:u-1;return arguments.length<3&&(i=n[o?o[a]:a],a+=e),t(n,r,i,o,a,u)}}function C(e){return function(t,n,r){n=m(n,r);var i=E(t),s=e>0?0:i-1;for(;s>=0&&s0?u=s>=0?s:Math.max(s+a,u):a=s>=0?Math.min(s+1,a):s+a+1;else if(n&&s&&a)return s=n(r,i),r[s]===i?s:-1;if(i!==i)return s=t(o.call(r,u,a),d.isNaN),s>=0?s+u:-1;for(s=e>0?u:a-1;s>=0&&s=0&&t<=w};d.each=d.forEach=function(e,t,n){t=v(t,n);var r,i;if(S(e))for(r=0,i=e.length;r=0},d.invoke=function(e,t){var n=o.call(arguments,2),r=d.isFunction(t);return d.map(e,function(e){var i=r?t:e[t];return i==null?i:i.apply(e,n)})},d.pluck=function(e,t){return d.map(e,d.property(t))},d.where=function(e,t){return d.filter(e,d.matcher(t))},d.findWhere=function(e,t){return d.find(e,d.matcher(t))},d.max=function(e,t,n){var r=-Infinity,i=-Infinity,s,o;if(t==null&&e!=null){e=S(e)?e:d.values(e);for(var u=0,a=e.length;ur&&(r=s)}else t=m(t,n),d.each(e,function(e,n,s){o=t(e,n,s);if(o>i||o===-Infinity&&r===-Infinity)r=e,i=o});return r},d.min=function(e,t,n){var r=Infinity,i=Infinity,s,o;if(t==null&&e!=null){e=S(e)?e:d.values(e);for(var u=0,a=e.length;ur||n===void 0)return 1;if(nt?(o&&(clearTimeout(o),o=null),u=f,s=e.apply(r,i),o||(r=i=null)):!o&&n.trailing!==!1&&(o=setTimeout(a,l)),s}},d.debounce=function(e,t,n){var r,i,s,o,u,a=function(){var f=d.now()-o;f=0?r=setTimeout(a,t-f):(r=null,n||(u=e.apply(s,i),r||(s=i=null)))};return function(){s=this,i=arguments,o=d.now();var f=n&&!r;return r||(r=setTimeout(a,t)),f&&(u=e.apply(s,i),s=i=null),u}},d.wrap=function(e,t){return d.partial(t,e)},d.negate=function(e){return function(){return!e.apply(this,arguments)}},d.compose=function(){var e=arguments,t=e.length-1;return function(){var n=t,r=e[t].apply(this,arguments);while(n--)r=e[n].call(this,r);return r}},d.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},d.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},d.once=d.partial(d.before,2);var A=!{toString:null}.propertyIsEnumerable("toString"),O=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];d.keys=function(e){if(!d.isObject(e))return[];if(l)return l(e);var t=[];for(var n in e)d.has(e,n)&&t.push(n);return A&&M(e,t),t},d.allKeys=function(e){if(!d.isObject(e))return[];var t=[];for(var n in e)t.push(n);return A&&M(e,t),t},d.values=function(e){var t=d.keys(e),n=t.length,r=Array(n);for(var i=0;i":">",'"':""","'":"'","`":"`"},P=d.invert(D),H=function(e){var t=function(t){return e[t]},n="(?:"+d.keys(e).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(e){return e=e==null?"":""+e,r.test(e)?e.replace(i,t):e}};d.escape=H(D),d.unescape=H(P),d.result=function(e,t,n){var r=e==null?void 0:e[t];return r===void 0&&(r=n),d.isFunction(r)?r.call(e):r};var B=0;d.uniqueId=function(e){var t=++B+"";return e?e+t:t},d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,F={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\u2028|\u2029/g,q=function(e){return"\\"+F[e]};d.template=function(e,t,n){!t&&n&&(t=n),t=d.defaults({},t,d.templateSettings);var r=RegExp([(t.escape||j).source,(t.interpolate||j).source,(t.evaluate||j).source].join("|")+"|$","g"),i=0,s="__p+='";e.replace(r,function(t,n,r,o,u){return s+=e.slice(i,u).replace(I,q),i=u+t.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":o&&(s+="';\n"+o+"\n__p+='"),t}),s+="';\n",t.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{var o=new Function(t.variable||"obj","_",s)}catch(u){throw u.source=s,u}var a=function(e){return o.call(this,e,d)},f=t.variable||"obj";return a.source="function("+f+"){\n"+s+"}",a},d.chain=function(e){var t=d(e);return t._chain=!0,t};var R=function(e,t){return e._chain?d(t).chain():t};d.mixin=function(e){d.each(d.functions(e),function(t){var n=d[t]=e[t];d.prototype[t]=function(){var e=[this._wrapped];return s.apply(e,arguments),R(this,n.apply(d,e))}})},d.mixin(d),d.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=n[e];d.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e==="shift"||e==="splice")&&n.length===0&&delete n[0],R(this,n)}}),d.each(["concat","join","slice"],function(e){var t=n[e];d.prototype[e]=function(){return R(this,t.apply(this._wrapped,arguments))}}),d.prototype.value=function(){return this._wrapped},d.prototype.valueOf=d.prototype.toJSON=d.prototype.value,d.prototype.toString=function(){return""+this._wrapped},typeof define=="function"&&define.amd&&define("underscore",[],function(){return d})}.call(this),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){var n=this.toString();if(t===undefined||t>n.length)t=n.length;t-=e.length;var r=n.indexOf(e,t);return r!==-1&&r===t}),String.prototype.splitOnce=function(e){var t=this.split(e);return[t.shift(),t.join(e)]},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),define("polyfill",function(){}),define("text",["module"],function(e){"use strict";var t,n,r,i,s,o=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],u=/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,a=/]*>\s*([\s\S]+)\s*<\/body>/im,f=typeof location!="undefined"&&location.href,l=f&&location.protocol&&location.protocol.replace(/\:/,""),c=f&&location.hostname,h=f&&(location.port||undefined),p={},d=e.config&&e.config()||{};t={version:"2.0.14",strip:function(e){if(e){e=e.replace(u,"");var t=e.match(a);t&&(e=t[1])}else e="";return e},jsEscape:function(e){return e.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:d.createXhr||function(){var e,t,n;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")for(t=0;t<3;t+=1){n=o[t];try{e=new ActiveXObject(n)}catch(r){}if(e){o=[n];break}}return e},parseName:function(e){var t,n,r,i=!1,s=e.lastIndexOf("."),o=e.indexOf("./")===0||e.indexOf("../")===0;return s!==-1&&(!o||s>1)?(t=e.substring(0,s),n=e.substring(s+1)):t=e,r=n||t,s=r.indexOf("!"),s!==-1&&(i=r.substring(s+1)==="strip",r=r.substring(0,s),n?n=r:t=r),{moduleName:t,ext:n,strip:i}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(e,n,r,i){var s,o,u,a=t.xdRegExp.exec(e);return a?(s=a[2],o=a[3],o=o.split(":"),u=o[1],o=o[0],(!s||s===n)&&(!o||o.toLowerCase()===r.toLowerCase())&&(!u&&!o||u===i)):!0},finishLoad:function(e,n,r,i){r=n?t.strip(r):r,d.isBuild&&(p[e]=r),i(r)},load:function(e,n,r,i){if(i&&i.isBuild&&!i.inlineText){r();return}d.isBuild=i&&i.isBuild;var s=t.parseName(e),o=s.moduleName+(s.ext?"."+s.ext:""),u=n.toUrl(o),a=d.useXhr||t.useXhr;if(u.indexOf("empty:")===0){r();return}!f||a(u,l,c,h)?t.get(u,function(n){t.finishLoad(e,s.strip,n,r)},function(e){r.error&&r.error(e)}):n([o],function(e){t.finishLoad(s.moduleName+"."+s.ext,s.strip,e,r)})},write:function(e,n,r,i){if(p.hasOwnProperty(n)){var s=t.jsEscape(p[n]);r.asModule(e+"!"+n,"define(function () { return '"+s+"';});\n")}},writeFile:function(e,n,r,i,s){var o=t.parseName(n),u=o.ext?"."+o.ext:"",a=o.moduleName+u,f=r.toUrl(o.moduleName+u)+".js";t.load(a,r,function(n){var r=function(e){return i(f,e)};r.asModule=function(e,t){return i.asModule(e,f,t)},t.write(e,a,r,s)},s)}};if(d.env==="node"||!d.env&&typeof process!="undefined"&&process.versions&&!!process.versions.node&&!process.versions["node-webkit"]&&!process.versions["atom-shell"])n=require.nodeRequire("fs"),t.get=function(e,t,r){try{var i=n.readFileSync(e,"utf8");i[0]===""&&(i=i.substring(1)),t(i)}catch(s){r&&r(s)}};else if(d.env==="xhr"||!d.env&&t.createXhr())t.get=function(e,n,r,i){var s=t.createXhr(),o;s.open("GET",e,!0);if(i)for(o in i)i.hasOwnProperty(o)&&s.setRequestHeader(o.toLowerCase(),i[o]);d.onXhr&&d.onXhr(s,e),s.onreadystatechange=function(t){var i,o;s.readyState===4&&(i=s.status||0,i>399&&i<600?(o=new Error(e+" HTTP status: "+i),o.xhr=s,r&&r(o)):n(s.responseText),d.onXhrComplete&&d.onXhrComplete(s,e))},s.send(null)};else if(d.env==="rhino"||!d.env&&typeof Packages!="undefined"&&typeof java!="undefined")t.get=function(e,t){var n,r,i="utf-8",s=new java.io.File(e),o=java.lang.System.getProperty("line.separator"),u=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(s),i)),a="";try{n=new java.lang.StringBuffer,r=u.readLine(),r&&r.length()&&r.charAt(0)===65279&&(r=r.substring(1)),r!==null&&n.append(r);while((r=u.readLine())!==null)n.append(o),n.append(r);a=String(n.toString())}finally{u.close()}t(a)};else if(d.env==="xpconnect"||!d.env&&typeof Components!="undefined"&&Components.classes&&Components.interfaces)r=Components.classes,i=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),s="@mozilla.org/windows-registry-key;1"in r,t.get=function(e,t){var n,o,u,a={};s&&(e=e.replace(/\//g,"\\")),u=new FileUtils.File(e);try{n=r["@mozilla.org/network/file-input-stream;1"].createInstance(i.nsIFileInputStream),n.init(u,1,0,!1),o=r["@mozilla.org/intl/converter-input-stream;1"].createInstance(i.nsIConverterInputStream),o.init(n,"utf-8",n.available(),i.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),o.readString(n.available(),a),o.close(),n.close(),t(a.value)}catch(f){throw new Error((u&&u.path||"")+": "+f)}};return t}),define("tpl",["text","underscore"],function(e,t){"use strict";var n={},r="define('{pluginName}!{moduleName}', function () { return {source}; });\n";return{version:"0.0.2",load:function(r,i,s,o){o.tpl&&o.tpl.templateSettings&&(t.templateSettings=o.tpl.templateSettings);if(n[r])s(n[r]);else{var u=o.tpl&&o.tpl.extension||".html",a=o.tpl&&o.tpl.path||"";e.load(a+r+u,i,function(e){n[r]=t.template(e),s(n[r])},o)}},write:function(e,t,i){var s=n[t],o=s&&s.source;o&&i.asModule(e+"!"+t,r.replace("{pluginName}",e).replace("{moduleName}",t).replace("{source}",o))}}}),define("tpl!action",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
\n '+((__t=time)==null?"":__t)+" **"+((__t=username)==null?"":__t)+' \n '+((__t=message)==null?"":__t)+"\n
\n";return __p}}),define("tpl!add_contact_dropdown",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n';return __p}}),define("tpl!add_contact_form",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
  • \n
    \n \n \n
    \n
  • \n";return __p}}),define("tpl!change_status_message",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
    \n
    \n \n \n \n \n
    \n
    \n';return __p}}),define("tpl!chat_status",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n';return __p}}),define("tpl!chatarea",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
    \n
    \n
    \n ',show_toolbar&&(__p+='\n
      \n '),__p+='\n \n";return __p}}),define("tpl!form_username",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+="",label&&(__p+="\n\n"),__p+='\n
      \n '+((__t=domain)==null?"":__t)+"\n
      \n";return __p}}),define("tpl!group_header",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+=''+((__t=label_group)==null?"":__t)+"\n";return __p}}),define("tpl!info",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
      '+((__t=message)==null?"":__t)+"
      \n";return __p}}),define("tpl!login_panel",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n ',auto_login&&(__p+='\n
      '; return; @@ -67,7 +68,7 @@ function pageheader_addon_settings_post(&$a,&$b) { if($_POST['pageheader-submit']) { Config::set('pageheader','text',trim(strip_tags($_POST['pageheader-words']))); - info( t('pageheader Settings saved.') . EOL); + info(L10n::t('pageheader Settings saved.') . EOL); } } diff --git a/piwik/piwik.php b/piwik/piwik.php index 326b931f..ff141056 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -31,6 +31,7 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; function piwik_install() { Addon::registerHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); @@ -78,21 +79,21 @@ function piwik_analytics($a,&$b) { */ if ($optout) { $b .= ""; } } function piwik_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/piwik/" ); $o = replace_macros( $t, [ - '$submit' => t('Save Settings'), - '$piwikbaseurl' => ['baseurl', t('Piwik Base URL'), Config::get('piwik','baseurl' ), t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')], - '$siteid' => ['siteid', t('Site ID'), Config::get('piwik','siteid' ), ''], - '$optout' => ['optout', t('Show opt-out cookie link?'), Config::get('piwik','optout' ), ''], - '$async' => ['async', t('Asynchronous tracking'), Config::get('piwik','async' ), ''], + '$submit' => L10n::t('Save Settings'), + '$piwikbaseurl' => ['baseurl', L10n::t('Piwik Base URL'), Config::get('piwik','baseurl' ), L10n::t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')], + '$siteid' => ['siteid', L10n::t('Site ID'), Config::get('piwik','siteid' ), ''], + '$optout' => ['optout', L10n::t('Show opt-out cookie link?'), Config::get('piwik','optout' ), ''], + '$async' => ['async', L10n::t('Asynchronous tracking'), Config::get('piwik','async' ), ''], ]); } function piwik_addon_admin_post (&$a) { @@ -104,5 +105,5 @@ function piwik_addon_admin_post (&$a) { Config::set('piwik', 'siteid', $id); Config::set('piwik', 'optout', $optout); Config::set('piwik', 'async', $async); - info( t('Settings updated.'). EOL); + info(L10n::t('Settings updated.'). EOL); } diff --git a/planets/planets.php b/planets/planets.php index 04fb72ca..cb4e7631 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -7,6 +7,7 @@ * Author: Tony Baldwin */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function planets_install() { @@ -148,22 +149,22 @@ function planets_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

      ' . t('Planets') . '

      '; + $s .= '

      ' . L10n::t('Planets') . '

      '; $s .= '
      '; $s .= ''; + $s .= '
      '; } diff --git a/pledgie/pledgie.php b/pledgie/pledgie.php index 2b75268b..8b736d8b 100644 --- a/pledgie/pledgie.php +++ b/pledgie/pledgie.php @@ -5,10 +5,11 @@ * Version: 1.1 * Author: tony baldwin * Hauke Altmann - * + * */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; function pledgie_install() { Addon::registerHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); @@ -41,18 +42,18 @@ function pledgie_addon_settings(&$a,&$s) { $describe = ''; $s .= '
      '; - $s .= '

      ' . t('"pledgie" Settings') . '

      '; + $s .= '

      ' . L10n::t('"pledgie" Settings') . '

      '; $s .= '
      '; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
      '; $s .= '
      '; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
      '; - $s .= '
      '; + $s .= '
      '; return; } @@ -65,7 +66,7 @@ function pledgie_addon_settings_post(&$a,&$b) { if($_POST['pledgie-submit']) { Config::set('pledgie-describe','text',trim(strip_tags($_POST['pledgie-describe']))); Config::set('pledgie-campaign','text',trim(strip_tags($_POST['pledgie-campaign']))); - info( t('pledgie Settings saved.') . EOL); + info(L10n::t('pledgie Settings saved.') . EOL); } } diff --git a/public_server/public_server.php b/public_server/public_server.php index 2c096568..1b30b40b 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -7,14 +7,14 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Model\User; - function public_server_install() { Addon::registerHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::registerHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - Addon::registerHook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + Addon::registerHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::registerHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } @@ -23,7 +23,7 @@ function public_server_uninstall() { Addon::unregisterHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::unregisterHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - Addon::unregisterHook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + Addon::unregisterHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::unregisterHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } @@ -61,7 +61,7 @@ function public_server_cron($a,$b) { 'language' => $rr['language'], 'to_name' => $rr['username'], 'to_email' => $rr['email'], - 'source_name' => t('Administrator'), + 'source_name' => L10n::t('Administrator'), 'source_link' => $a->get_baseurl(), 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', ]); @@ -125,9 +125,9 @@ function public_server_enotify(&$a, &$b) { if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), Config::get('system','sitename')); - $b['subject'] = t('Your Friendica account is about to expire.'); - $b['body'] = sprintf( t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + $b['epreamble'] = $b['preamble'] = sprintf(L10n::t('Your account on %s will expire in a few days.'), Config::get('system','sitename')); + $b['subject'] = L10n::t('Your Friendica account is about to expire.'); + $b['body'] = sprintf(L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); } } @@ -155,15 +155,15 @@ function public_server_addon_admin_post ( &$a ) { Config::set( 'public_server','flagusers',$flagusers); Config::set( 'public_server','flagposts',$flagposts ); Config::set( 'public_server','flagpostsexpire',$flagpostsexpire ); - info( t('Settings saved').EOL ); + info(L10n::t('Settings saved').EOL ); } function public_server_addon_admin ( &$a, &$o) { $token = get_form_security_token("publicserver"); $t = get_markup_template( "admin.tpl", "addon/public_server"); $o = replace_macros($t, [ - '$submit' => t('Save Settings'), + '$submit' => L10n::t('Save Settings'), '$form_security_token' => $token, - '$infotext' => t('Set any of these options to 0 to deactivate it.'), + '$infotext' => L10n::t('Set any of these options to 0 to deactivate it.'), '$expiredays' => [ "expiredays","Expire Days", intval(Config::get('public_server', 'expiredays')), "When an account is created on the site, it is given a hard "], '$expireposts' => [ "expireposts", "Expire Posts", intval(Config::get('public_server','expireposts')), "Set the default days for posts to expire here"], '$nologin' => [ "nologin", "No Login", intval(Config::get('public_server','nologin')), "Remove users who have never logged in after nologin days "], @@ -172,4 +172,3 @@ function public_server_addon_admin ( &$a, &$o) { '$flagpostsexpire' => [ "flagpostsexpire", "Flag posts expire", intval(Config::get('public_server','flagpostsexpire'))], ]); } - diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index d4c45989..6ab37583 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -7,6 +7,7 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Model\Contact; @@ -50,7 +51,7 @@ function pumpio_module() {} function pumpio_content(&$a) { if(! local_user()) { - notice( t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); return ''; } @@ -146,7 +147,7 @@ function pumpio_connect(&$a) { if (($consumer_key == "") || ($consumer_secret == "")) { logger("pumpio_connect: ".sprintf("Unable to register the client at the pump.io server '%s'.", $hostname)); - $o .= sprintf(t("Unable to register the client at the pump.io server '%s'."), $hostname); + $o .= sprintf(L10n::t("Unable to register the client at the pump.io server '%s'."), $hostname); return($o); } @@ -186,8 +187,8 @@ function pumpio_connect(&$a) { if($success) { logger("pumpio_connect: authenticated"); - $o .= t("You are now authenticated to pumpio."); - $o .= '
      '.t("return to the connector page").''; + $o .= L10n::t("You are now authenticated to pumpio."); + $o .= '
      '.L10n::t("return to the connector page").''; } else { logger("pumpio_connect: could not connect"); $o = 'Could not connect to pumpio. Refresh the page or try again later.'; @@ -205,7 +206,7 @@ function pumpio_jot_nets(&$a,&$b) { $pumpio_defpost = PConfig::get(local_user(),'pumpio','post_by_default'); $selected = ((intval($pumpio_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
      ' - . t('Post to pumpio') . '
      '; + . L10n::t('Post to pumpio') . ''; } } @@ -243,20 +244,20 @@ function pumpio_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

      '. t('Pump.io Import/Export/Mirror').'

      '; + $s .= '

      '. L10n::t('Pump.io Import/Export/Mirror').'

      '; $s .= '
      '; $s .= ''; } @@ -554,7 +555,7 @@ function pumpio_send(&$a,&$b) { $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $params]); Queue::add($a->contact, NETWORK_PUMPIO, $s); - notice(t('Pump.io post failed. Queued for retry.').EOL); + notice(L10n::t('Pump.io post failed. Queued for retry.').EOL); } } } @@ -630,7 +631,7 @@ function pumpio_action(&$a, $uid, $uri, $action, $content = "") { $s = serialize(['url' => $url, 'item' => $orig_post["id"], 'post' => $params]); Queue::add($a->contact, NETWORK_PUMPIO, $s); - notice(t('Pump.io like failed. Queued for retry.').EOL); + notice(L10n::t('Pump.io like failed. Queued for retry.').EOL); } } @@ -719,7 +720,7 @@ function pumpio_fetchtimeline(&$a, $uid) { // get the application name for the pump.io app // 1st try personal config, then system config and fallback to the // hostname of the node if neither one is set. - $application_name = PConfig::get( $uid, 'pumpio', 'application_name'); + $application_name = PConfig::get($uid, 'pumpio', 'application_name'); if ($application_name == "") $application_name = Config::get('pumpio', 'application_name'); if ($application_name == "") @@ -963,11 +964,11 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru $author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]'; $objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]'; - $post_type = t('status'); + $post_type = L10n::t('status'); $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]'; $likedata['object-type'] = ACTIVITY_OBJ_NOTE; - $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); + $likedata['body'] = sprintf(L10n::t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); $likedata['object'] = '' . ACTIVITY_OBJ_NOTE . '1' . '' . $orig_post['uri'] . '' . xmlify('') . '' . $orig_post['title'] . '' . $orig_post['body'] . ''; diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 447f8abf..c499fb86 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -1,25 +1,24 @@ - * + * * Provides a set of text "snippets" which can be inserted into a comment window by clicking on them. - * First enable the addon in the system admin panel. - * Then each person can tailor their choice of words in Settings->Addon Settings in the Qcomment + * First enable the addon in the system admin panel. + * Then each person can tailor their choice of words in Settings->Addon Settings in the Qcomment * pane. Initially no qcomments are provided, but on viewing the settings page, a default set of - * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents - * a different qcomment. + * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents + * a different qcomment. * Many themes will hide the qcomments above or immediately adjacent to the comment input box until * you wish to use them. On some themes they may be visible. - * Wave the mouse around near the comment input box and the qcomments will show up. Click on any of + * Wave the mouse around near the comment input box and the qcomments will show up. Click on any of * them to open the comment window fully and insert the qcomment. Then "Submit" will submit it. * */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function qcomment_install() { @@ -28,17 +27,12 @@ function qcomment_install() { } - function qcomment_uninstall() { Addon::unregisterHook('addon_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); Addon::unregisterHook('addon_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } - - - - function qcomment_addon_settings(&$a, &$s) { if (! local_user()) { @@ -49,17 +43,17 @@ function qcomment_addon_settings(&$a, &$s) $a->page['htmlhead'] .= '' . "\r\n"; - $words = PConfig::get(local_user(), 'qcomment', 'words', t(':-)') . "\n" . t(':-(') . "\n" . t('lol')); + $words = PConfig::get(local_user(), 'qcomment', 'words', L10n::t(':-)') . "\n" . L10n::t(':-(') . "\n" . L10n::t('lol')); $s .= '
      '; - $s .= '

      ' . t('Quick Comment Settings') . '

      '; + $s .= '

      ' . L10n::t('Quick Comment Settings') . '

      '; $s .= '
      '; - $s .= '
      ' . t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '
      '; - $s .= ''; + $s .= '
      ' . L10n::t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '
      '; + $s .= ''; $s .= ''; $s .= '
      '; - $s .= '
      '; + $s .= '
      '; $s .= '
      '; return; @@ -72,7 +66,6 @@ function qcomment_addon_settings_post(&$a,&$b) { if($_POST['qcomment-submit']) { PConfig::set(local_user(),'qcomment','words',xmlify($_POST['qcomment-words'])); - info( t('Quick Comment settings saved.') . EOL); + info(L10n::t('Quick Comment settings saved.') . EOL); } } - diff --git a/randplace/randplace.php b/randplace/randplace.php index 96e549a6..abf59e2d 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -19,6 +19,7 @@ * */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function randplace_install() { @@ -167,14 +168,14 @@ function randplace_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
      '; - $s .= '

      ' . t('Randplace Settings') . '

      '; + $s .= '

      ' . L10n::t('Randplace Settings') . '

      '; $s .= '
      '; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
      '; /* provide a submit button */ - $s .= '
      '; + $s .= '
      '; } diff --git a/remote_permissions/remote_permissions.php b/remote_permissions/remote_permissions.php index 408316e6..94bdf5c1 100644 --- a/remote_permissions/remote_permissions.php +++ b/remote_permissions/remote_permissions.php @@ -8,6 +8,7 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function remote_permissions_install() { @@ -44,10 +45,10 @@ function remote_permissions_settings(&$a,&$o) { // $t = file_get_contents("addon/remote_permissions/settings.tpl" ); $t = get_markup_template("settings.tpl", "addon/remote_permissions/" ); $o .= replace_macros($t, [ - '$remote_perms_title' => t('Remote Permissions Settings'), - '$remote_perms_label' => t('Allow recipients of your private posts to see the other recipients of the posts'), + '$remote_perms_title' => L10n::t('Remote Permissions Settings'), + '$remote_perms_label' => L10n::t('Allow recipients of your private posts to see the other recipients of the posts'), '$checked' => (($remote_perms == 1) ? 'checked="checked"' : ''), - '$submit' => t('Save Settings') + '$submit' => L10n::t('Save Settings') ]); } @@ -57,7 +58,7 @@ function remote_permissions_settings_post($a,$post) { return; PConfig::set(local_user(),'remote_perms','show',intval($_POST['remote-perms'])); - info( t('Remote Permissions settings updated.') . EOL); + info(L10n::t('Remote Permissions settings updated.') . EOL); } function remote_permissions_content($a, $item_copy) { @@ -123,7 +124,7 @@ function remote_permissions_content($a, $item_copy) { $deny_users = expand_acl($item['deny_cid']); $deny_groups = expand_acl($item['deny_gid']); - $o = t('Visible to:') . '
      '; + $o = L10n::t('Visible to:') . '
      '; $allow = []; $deny = []; @@ -177,7 +178,7 @@ function remote_permissions_content($a, $item_copy) { if(! $r) return; - $o = t('Visible to') . ' (' . t('may only be a partial list') . '):
      '; + $o = L10n::t('Visible to') . ' (' . L10n::t('may only be a partial list') . '):
      '; foreach($r as $rr) $allow_names[] = $rr['username']; @@ -195,15 +196,14 @@ function remote_permissions_content($a, $item_copy) { function remote_permissions_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/remote_permissions/" ); $o = replace_macros($t, [ - '$submit' => t('Save Settings'), - '$global' => ['remotepermschoice', t('Global'), 1, t('The posts of every user on this server show the post recipients'), Config::get('remote_perms', 'global') == 1], - '$individual' => ['remotepermschoice', t('Individual'), 2, t('Each user chooses whether his/her posts show the post recipients'), Config::get('remote_perms', 'global') == 0] + '$submit' => L10n::t('Save Settings'), + '$global' => ['remotepermschoice', L10n::t('Global'), 1, L10n::t('The posts of every user on this server show the post recipients'), Config::get('remote_perms', 'global') == 1], + '$individual' => ['remotepermschoice', L10n::t('Individual'), 2, L10n::t('Each user chooses whether his/her posts show the post recipients'), Config::get('remote_perms', 'global') == 0] ]); } function remote_permissions_addon_admin_post(&$a){ $choice = ((x($_POST,'remotepermschoice')) ? notags(trim($_POST['remotepermschoice'])) : ''); Config::set('remote_perms','global',($choice == 1 ? 1 : 0)); - info( t('Settings updated.'). EOL ); + info(L10n::t('Settings updated.'). EOL); } - diff --git a/securemail/securemail.php b/securemail/securemail.php index e62b6076..d63c2ee9 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -8,6 +8,7 @@ use Friendica\App; use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Util\Emailer; @@ -62,11 +63,11 @@ function securemail_settings(App &$a, &$s){ $t = get_markup_template('admin.tpl', 'addon/securemail/'); $s .= replace_macros($t, [ - '$title' => t('"Secure Mail" Settings'), - '$submit' => t('Save Settings'), - '$test' => t('Save and send test'), //NOTE: update also in 'post' - '$enable' => ['securemail-enable', t('Enable Secure Mail'), $enable, ''], - '$publickey' => ['securemail-pkey', t('Public key'), $publickey, t('Your public PGP key, ascii armored format'), 'rows="10"'] + '$title' => L10n::t('"Secure Mail" Settings'), + '$submit' => L10n::t('Save Settings'), + '$test' => L10n::t('Save and send test'), //NOTE: update also in 'post' + '$enable' => ['securemail-enable', L10n::t('Enable Secure Mail'), $enable, ''], + '$publickey' => ['securemail-pkey', L10n::t('Public key'), $publickey, L10n::t('Your public PGP key, ascii armored format'), 'rows="10"'] ]); } @@ -90,9 +91,9 @@ function securemail_settings_post(App &$a, array &$b){ PConfig::set(local_user(), 'securemail', 'pkey', trim($_POST['securemail-pkey'])); $enable = ((x($_POST, 'securemail-enable')) ? 1 : 0); PConfig::set(local_user(), 'securemail', 'enable', $enable); - info(t('Secure Mail Settings saved.') . EOL); + info(L10n::t('Secure Mail Settings saved.') . EOL); - if ($_POST['securemail-submit'] == t('Save and send test')) { + if ($_POST['securemail-submit'] == L10n::t('Save and send test')) { $sitename = $a->config['sitename']; $hostname = $a->get_hostname(); @@ -127,9 +128,9 @@ function securemail_settings_post(App &$a, array &$b){ PConfig::set(local_user(), 'securemail', 'enable', $enable); if ($res) { - info(t('Test email sent') . EOL); + info(L10n::t('Test email sent') . EOL); } else { - notice(t('There was an error sending the test email') . EOL); + notice(L10n::t('There was an error sending the test email') . EOL); } } } diff --git a/showmore/showmore.php b/showmore/showmore.php index f6e5028c..c2d4b194 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -8,6 +8,7 @@ * */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function showmore_install() { @@ -37,24 +38,24 @@ function showmore_addon_settings(&$a,&$s) { $chars = '1100'; $s .= ''; - $s .= '

      ' . t('"Show more" Settings').'

      '; + $s .= '

      ' . L10n::t('"Show more" Settings').'

      '; $s .= '
      '; $s .= ''; return; @@ -70,7 +71,7 @@ function showmore_addon_settings_post(&$a,&$b) { $enable = ((x($_POST,'showmore-enable')) ? intval($_POST['showmore-enable']) : 0); $disable = 1-$enable; PConfig::set(local_user(),'showmore','disable', $disable); - info( t('Show More Settings saved.') . EOL); + info(L10n::t('Show More Settings saved.') . EOL); } } @@ -124,7 +125,7 @@ function showmore_prepare_body(&$a,&$b) { if($found) { $rnd = random_string(8); $b['html'] = ''.$shortened." ". - ''.sprintf(t('show more')).''. + ''.sprintf(L10n::t('show more')).''. ''; } } diff --git a/startpage/startpage.php b/startpage/startpage.php index 872fb234..840b547e 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -7,6 +7,7 @@ * */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function startpage_install() { @@ -51,16 +52,12 @@ function startpage_settings_post($a,$post) { PConfig::set(local_user(),'startpage','startpage',strip_tags(trim($_POST['startpage']))); } - /** * * Called from the Addon Setting form. * Add our own settings info to the page. * */ - - - function startpage_settings(&$a,&$s) { if(! local_user()) @@ -78,20 +75,20 @@ function startpage_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

      ' . t('Startpage') . '

      '; + $s .= '

      ' . L10n::t('Startpage') . '

      '; $s .= '
      '; $s .= ''; + $s .= '
      '; } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 3d708389..f9b770a9 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -49,6 +49,7 @@ use Friendica\App; use Friendica\Content\OEmbed; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Model\GContact; use Friendica\Model\Group; @@ -190,7 +191,7 @@ function statusnet_jot_nets(App $a, &$b) $statusnet_defpost = PConfig::get(local_user(), 'statusnet', 'post_by_default'); $selected = ((intval($statusnet_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
      ' - . t('Post to GNU Social') . '
      '; + . L10n::t('Post to GNU Social') . ''; } } @@ -238,7 +239,7 @@ function statusnet_settings_post(App $a, $post) PConfig::set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); //PConfig::set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { - notice(t('Please contact your site administrator.
      The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); + notice(L10n::t('Please contact your site administrator.
      The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); } } } @@ -267,7 +268,7 @@ function statusnet_settings_post(App $a, $post) PConfig::set(local_user(), 'statusnet', 'baseapi', $apibase); } else { // still not the correct API base, let's do noting - notice(t('We could not contact the GNU Social API with the Path you entered.') . EOL); + notice(L10n::t('We could not contact the GNU Social API with the Path you entered.') . EOL); } } goaway('settings/connectors'); @@ -301,7 +302,7 @@ function statusnet_settings_post(App $a, $post) if (!intval($_POST['statusnet-mirror'])) PConfig::delete(local_user(), 'statusnet', 'lastid'); - info(t('GNU Social settings updated.') . EOL); + info(L10n::t('GNU Social settings updated.') . EOL); } } } @@ -342,11 +343,11 @@ function statusnet_settings(App $a, &$s) $css = (($enabled) ? '' : '-disabled'); $s .= ''; - $s .= '

      ' . t('GNU Social Import/Export/Mirror') . '

      '; + $s .= '

      ' . L10n::t('GNU Social Import/Export/Mirror') . '

      '; $s .= '
      '; $s .= '
      '; @@ -747,7 +748,7 @@ function statusnet_addon_admin(App $a, &$o) foreach ($sites as $id => $s) { $sitesform[] = [ 'sitename' => ["sitename[$id]", "Site name", $s['sitename'], ""], - 'apiurl' => ["apiurl[$id]", "Api url", $s['apiurl'], t("Base API Path \x28remember the trailing /\x29")], + 'apiurl' => ["apiurl[$id]", "Api url", $s['apiurl'], L10n::t("Base API Path \x28remember the trailing /\x29")], 'secret' => ["secret[$id]", "Secret", $s['consumersecret'], ""], 'key' => ["key[$id]", "Key", $s['consumerkey'], ""], //'applicationname' => Array("applicationname[$id]", "Application name", $s['applicationname'], ""), @@ -758,16 +759,16 @@ function statusnet_addon_admin(App $a, &$o) /* empty form to add new site */ $id++; $sitesform[] = [ - 'sitename' => ["sitename[$id]", t("Site name"), "", ""], - 'apiurl' => ["apiurl[$id]", "Api url", "", t("Base API Path \x28remember the trailing /\x29")], - 'secret' => ["secret[$id]", t("Consumer Secret"), "", ""], - 'key' => ["key[$id]", t("Consumer Key"), "", ""], - //'applicationname' => Array("applicationname[$id]", t("Application name"), "", ""), + 'sitename' => ["sitename[$id]", L10n::t("Site name"), "", ""], + 'apiurl' => ["apiurl[$id]", "Api url", "", L10n::t("Base API Path \x28remember the trailing /\x29")], + 'secret' => ["secret[$id]", L10n::t("Consumer Secret"), "", ""], + 'key' => ["key[$id]", L10n::t("Consumer Key"), "", ""], + //'applicationname' => Array("applicationname[$id]", L10n::t("Application name"), "", ""), ]; $t = get_markup_template("admin.tpl", "addon/statusnet/"); $o = replace_macros($t, [ - '$submit' => t('Save Settings'), + '$submit' => L10n::t('Save Settings'), '$sites' => $sitesform, ]); } diff --git a/superblock/superblock.php b/superblock/superblock.php index b6d19de4..24111486 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -9,6 +9,7 @@ * */ use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function superblock_install() { @@ -52,18 +53,18 @@ function superblock_addon_settings(&$a,&$s) { } $s .= ''; - $s .= '

      ' . t('"Superblock"') . '

      '; + $s .= '

      ' . L10n::t('"Superblock"') . '

      '; $s .= '
      '; $s .= ''; + $s .= '
      '; return; } @@ -75,7 +76,7 @@ function superblock_addon_settings_post(&$a,&$b) { if($_POST['superblock-submit']) { PConfig::set(local_user(),'system','blocked',trim($_POST['superblock-words'])); - info( t('SUPERBLOCK Settings saved.') . EOL); + info(L10n::t('SUPERBLOCK Settings saved.') . EOL); } } @@ -147,7 +148,7 @@ function superblock_item_photo_menu(&$a,&$b) { } } - $b['menu'][ t('Block Completely')] = 'javascript:superblockBlock(\'' . $author . '\'); return false;'; + $b['menu'][L10n::t('Block Completely')] = 'javascript:superblockBlock(\'' . $author . '\'); return false;'; } function superblock_module() {} @@ -167,6 +168,6 @@ function superblock_init(&$a) { } PConfig::set(local_user(),'system','blocked',$words); - info( t('superblock settings updated') . EOL ); + info(L10n::t('superblock settings updated') . EOL ); killme(); } diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index f28d8d55..6eb9344e 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -1,5 +1,4 @@ $rr['language'], 'to_name' => $rr['username'], 'to_email' => $rr['email'], - 'source_name' => t('Administrator'), + 'source_name' => L10n::t('Administrator'), 'source_link' => $a->get_baseurl(), 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', ]); @@ -90,8 +89,8 @@ function testdrive_enotify(&$a, &$b) { if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'testdrive_expire') { $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), Config::get('system','sitename')); - $b['subject'] = t('Your Friendica test account is about to expire.'); - $b['body'] = sprintf( t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server()); + $b['epreamble'] = $b['preamble'] = sprintf(L10n::t('Your account on %s will expire in a few days.'), Config::get('system','sitename')); + $b['subject'] = L10n::t('Your Friendica test account is about to expire.'); + $b['body'] = sprintf(L10n::t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server()); } } diff --git a/tictac/tictac.php b/tictac/tictac.php index f928fd5e..fe2c5cf1 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -6,6 +6,7 @@ * Author: Mike Macgirvin */ use Friendica\Core\Addon; +use Friendica\Core\L10n; function tictac_install() { Addon::registerHook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); @@ -17,7 +18,7 @@ function tictac_uninstall() { } function tictac_app_menu($a,&$b) { - $b['app_menu'][] = ''; + $b['app_menu'][] = ''; } @@ -50,17 +51,17 @@ function tictac_content(&$a) { $dimen = 3; } - $o .= '

      ' . t('3D Tic-Tac-Toe') . '


      '; + $o .= '

      ' . L10n::t('3D Tic-Tac-Toe') . '


      '; $t = new tictac($dimen,$handicap,$mefirst,$yours,$mine); $o .= $t->play(); - $o .= '' . t('New game') . '
      '; - $o .= '' . t('New game with handicap') . '
      '; - $o .= '

      ' . t('Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '); - $o .= t('In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'); + $o .= '' . L10n::t('New game') . '
      '; + $o .= '' . L10n::t('New game with handicap') . '
      '; + $o .= '

      ' . L10n::t('Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '); + $o .= L10n::t('In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'); $o .= '

      '; - $o .= t('The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'); + $o .= L10n::t('The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'); $o .= '

      '; return $o; @@ -179,24 +180,24 @@ class tictac { if($this->first_move) { if(rand(0,1) == 1) { - $o .= '
      ' . t('You go first...') . '

      '; + $o .= '
      ' . L10n::t('You go first...') . '

      '; $this->mefirst = 0; $o .= $this->draw_board(); return $o; } - $o .= '
      ' . t('I\'m going first this time...') . '

      '; + $o .= '
      ' . L10n::t('I\'m going first this time...') . '

      '; $this->mefirst = 1; } if($this->check_youwin()) { - $o .= '
      ' . t('You won!') . '

      '; + $o .= '
      ' . L10n::t('You won!') . '

      '; $o .= $this->draw_board(); return $o; } if($this->fullboard()) - $o .= '
      ' . t('"Cat" game!') . '

      '; + $o .= '
      ' . L10n::t('"Cat" game!') . '

      '; $move = $this->winning_move(); if(strlen($move)) { @@ -219,9 +220,9 @@ class tictac { } if($this->check_iwon()) - $o .= '
      ' . t('I won!') . '

      '; + $o .= '
      ' . L10n::t('I won!') . '

      '; if($this->fullboard()) - $o .= '
      ' . t('"Cat" game!') . '

      '; + $o .= '
      ' . L10n::t('"Cat" game!') . '

      '; $o .= $this->draw_board(); return $o; } diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index ff218d0a..008027c0 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -1,5 +1,4 @@ */ -require_once('library/OAuth1.php'); -require_once('addon/tumblr/tumblroauth/tumblroauth.php'); +require_once 'library/OAuth1.php'; +require_once 'addon/tumblr/tumblroauth/tumblroauth.php'; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; function tumblr_install() { @@ -36,7 +36,7 @@ function tumblr_module() {} function tumblr_content(&$a) { if(! local_user()) { - notice( t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); return ''; } @@ -62,10 +62,10 @@ function tumblr_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/tumblr/" ); $o = replace_macros($t, [ - '$submit' => t('Save Settings'), + '$submit' => L10n::t('Save Settings'), // name, label, value, help, [extra values] - '$consumer_key' => ['consumer_key', t('Consumer Key'), Config::get('tumblr', 'consumer_key' ), ''], - '$consumer_secret' => ['consumer_secret', t('Consumer Secret'), Config::get('tumblr', 'consumer_secret' ), ''], + '$consumer_key' => ['consumer_key', L10n::t('Consumer Key'), Config::get('tumblr', 'consumer_key' ), ''], + '$consumer_secret' => ['consumer_secret', L10n::t('Consumer Secret'), Config::get('tumblr', 'consumer_secret' ), ''], ]); } @@ -74,7 +74,7 @@ function tumblr_addon_admin_post(&$a){ $consumer_secret = ((x($_POST,'consumer_secret')) ? notags(trim($_POST['consumer_secret'])): ''); Config::set('tumblr','consumer_key',$consumer_key); Config::set('tumblr','consumer_secret',$consumer_secret); - info( t('Settings updated.'). EOL ); + info(L10n::t('Settings updated.'). EOL); } function tumblr_connect($a) { @@ -165,8 +165,8 @@ function tumblr_callback($a) { PConfig::set(local_user(), "tumblr", "oauth_token", $access_token['oauth_token']); PConfig::set(local_user(), "tumblr", "oauth_token_secret", $access_token['oauth_token_secret']); - $o = t("You are now authenticated to tumblr."); - $o .= '
      '.t("return to the connector page").''; + $o = L10n::t("You are now authenticated to tumblr."); + $o .= '
      '.L10n::t("return to the connector page").''; return($o); } @@ -179,7 +179,7 @@ function tumblr_jot_nets(&$a,&$b) { $tmbl_defpost = PConfig::get(local_user(),'tumblr','post_by_default'); $selected = ((intval($tmbl_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
      ' - . t('Post to Tumblr') . '
      '; + . L10n::t('Post to Tumblr') . ''; } } @@ -206,24 +206,24 @@ function tumblr_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

      '. t('Tumblr Export').'

      '; + $s .= '

      '. L10n::t('Tumblr Export').'

      '; $s .= '
      '; $s .= '
      '; /* provide a submit button */ - $s .= '
      '; + $s .= '
      '; } diff --git a/twitter/twitter.php b/twitter/twitter.php index 0a831800..244eaee7 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1,5 +1,4 @@ ' - . t('Post to Twitter') . ''; + . L10n::t('Post to Twitter') . ''; } } @@ -241,7 +241,7 @@ function twitter_settings_post(App $a, $post) PConfig::delete(local_user(), 'twitter', 'lastid'); } - info(t('Twitter settings updated.') . EOL); + info(L10n::t('Twitter settings updated.') . EOL); } } } @@ -271,11 +271,11 @@ function twitter_settings(App $a, &$s) $css = (($enabled) ? '' : '-disabled'); $s .= ''; - $s .= '

      ' . t('Twitter Import/Export/Mirror') . '

      '; + $s .= '

      ' . L10n::t('Twitter Import/Export/Mirror') . '

      '; $s .= '
      '; $s .= ''; return; @@ -97,6 +96,6 @@ function yourls_addon_settings_post(&$a,&$b) { Config::set('yourls','username1',trim($_POST['yourls_username'])); Config::set('yourls','password1',trim($_POST['yourls_password'])); Config::set('yourls','ssl1',intval($_POST['yourls_ssl'])); - info( t('yourls Settings saved.') . EOL); + info(L10n::t('yourls Settings saved.') . EOL); } } From 1f71af77d5a0d9d1a89f69cf1a3333021c78a060 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Mon, 22 Jan 2018 14:30:13 -0500 Subject: [PATCH 012/116] Missed t() missed t() call --- nsfw/nsfw.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index 8eedca8d..f0fc0177 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -84,7 +84,7 @@ function nsfw_addon_settings(&$a,&$s) { $s .= ''; $s .= '
      '; - $s .= '

      ' . t ('This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter.') . '

      '; + $s .= '

      ' . L10n::t('This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter.') . '

      '; $s .= ''; $s .= ''; $s .= '
      '; From a43901ba073f64b8b2fa5b320d94d7426ef84a7e Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Mon, 22 Jan 2018 17:19:53 -0500 Subject: [PATCH 013/116] Missed use Missed use for L10n --- buglink/buglink.php | 1 + 1 file changed, 1 insertion(+) diff --git a/buglink/buglink.php b/buglink/buglink.php index 0ca43924..71c22a67 100644 --- a/buglink/buglink.php +++ b/buglink/buglink.php @@ -6,6 +6,7 @@ * Author: Mike Macgirvin */ use Friendica\Core\Addon; +use Friendica\Core\L10n; function buglink_install() { From b191d5716c850b5b5b44d46a265a1108b838a320 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Tue, 23 Jan 2018 22:59:20 -0500 Subject: [PATCH 014/116] Remove sprintf with translations don't use sprintf with translation functions --- blockem/blockem.php | 2 +- communityhome/communityhome.php | 4 ++-- diaspora/diaspora.php | 4 ++-- gnot/gnot.php | 2 +- libravatar/libravatar.php | 2 +- notifyall/notifyall.php | 4 ++-- nsfw/nsfw.php | 2 +- piwik/piwik.php | 2 +- public_server/public_server.php | 4 ++-- pumpio/pumpio.php | 4 ++-- rendertime/rendertime.php | 29 ++++++++++++++------------- showmore/showmore.php | 2 +- testdrive/testdrive.php | 4 ++-- widgets/widget_like.php | 4 ++-- windowsphonepush/windowsphonepush.php | 2 +- 15 files changed, 36 insertions(+), 35 deletions(-) diff --git a/blockem/blockem.php b/blockem/blockem.php index 5dd7f4ec..3f4b8865 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -136,7 +136,7 @@ function blockem_prepare_body(&$a,&$b) { } if($found) { $rnd = random_string(8); - $b['html'] = ''; + $b['html'] = ''; } } diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 4a9db112..78d9fe8a 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -227,7 +227,7 @@ function communityhome_home(&$a, &$o){ } $plink = '' . $post_type . ''; - $aside['$like_items'][] = sprintf(L10n::t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); + $aside['$like_items'][] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink); } } @@ -236,7 +236,7 @@ function communityhome_home(&$a, &$o){ $tpl = get_markup_template('communityhome.tpl', 'addon/communityhome/'); $a->page['aside'] = replace_macros($tpl, $aside); - $o = '

      ' . ((x($a->config,'sitename')) ? sprintf(L10n::t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

      '; + $o = '

      ' . ((x($a->config,'sitename')) ? L10n::t("Welcome to %s", $a->config['sitename']) : "" ) . '

      '; if(file_exists('home.html')) $o = file_get_contents('home.html'); diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index 59b130d7..b486c095 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -140,9 +140,9 @@ function diaspora_settings(&$a,&$s) { $r = q("SELECT `addr` FROM `contact` WHERE `self` AND `uid` = %d", intval(local_user())); if (DBM::is_result($r)) { - $status = sprintf(L10n::t("Please remember: You can always be reached from Diaspora with your Friendica handle %s. "), $r[0]['addr']); + $status = L10n::t("Please remember: You can always be reached from Diaspora with your Friendica handle %s. ", $r[0]['addr']); $status .= L10n::t('This connector is only meant if you still want to use your old Diaspora account for some time. '); - $status .= sprintf(L10n::t('However, it is preferred that you tell your Diaspora contacts the new handle %s instead.'), $r[0]['addr']); + $status .= L10n::t('However, it is preferred that you tell your Diaspora contacts the new handle %s instead.', $r[0]['addr']); } $aspects = false; diff --git a/gnot/gnot.php b/gnot/gnot.php index ccc2c77a..c7678a21 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -96,5 +96,5 @@ function gnot_enotify_mail(&$a,&$b) { if((! $b['uid']) || (! intval(PConfig::get($b['uid'], 'gnot','enable')))) return; if($b['type'] == NOTIFY_COMMENT) - $b['subject'] = sprintf(L10n::t('[Friendica:Notify] Comment to conversation #%d'), $b['parent']); + $b['subject'] = L10n::t('[Friendica:Notify] Comment to conversation #%d', $b['parent']); } diff --git a/libravatar/libravatar.php b/libravatar/libravatar.php index 14e6c82f..dd1d613f 100644 --- a/libravatar/libravatar.php +++ b/libravatar/libravatar.php @@ -88,7 +88,7 @@ function libravatar_addon_admin(&$a, &$o) // Show warning if PHP version is too old if (! version_compare(PHP_VERSION, '5.3.0', '>=')) { $o = '
      ' .L10n::t('Warning') .'

      '; - $o .= sprintf(L10n::t('Your PHP version %s is lower than the required PHP >= 5.3.'), PHP_VERSION); + $o .= L10n::t('Your PHP version %s is lower than the required PHP >= 5.3.', PHP_VERSION); $o .= '
      ' .L10n::t('This addon is not functional on your server.') .'


      '; return; } diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index 9abde281..e35d7bf1 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -37,9 +37,9 @@ function notifyall_post(&$a) { $sitename = $a->config['sitename']; if (!x($a->config['admin_name'])) - $sender_name = sprintf(L10n::t('%s Administrator'), $sitename); + $sender_name = L10n::t('%s Administrator', $sitename); else - $sender_name = sprintf(L10n::t('%1$s, %2$s Administrator'), $a->config['admin_name'], $sitename); + $sender_name = L10n::t('%1$s, %2$s Administrator', $a->config['admin_name'], $sitename); if (! x($a->config['sender_email'])) $sender_email = 'noreply@' . $a->get_hostname(); diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index f0fc0177..0782c092 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -165,6 +165,6 @@ function nsfw_prepare_body(&$a,&$b) { if ($found) { $rnd = random_string(8); - $b['html'] = '

      '; + $b['html'] = ''; } } diff --git a/piwik/piwik.php b/piwik/piwik.php index ff141056..bbec1f6f 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -82,7 +82,7 @@ function piwik_analytics($a,&$b) { $b .= L10n::t("This website is tracked using the Piwik analytics tool."); $b .= " "; $the_url = "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut"; - $b .= sprintf(L10n::t("If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."), $the_url); + $b .= L10n::t("If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out).", $the_url); $b .= "
      "; } } diff --git a/public_server/public_server.php b/public_server/public_server.php index 1b30b40b..d3309e6e 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -125,9 +125,9 @@ function public_server_enotify(&$a, &$b) { if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = sprintf(L10n::t('Your account on %s will expire in a few days.'), Config::get('system','sitename')); + $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename')); $b['subject'] = L10n::t('Your Friendica account is about to expire.'); - $b['body'] = sprintf(L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + $b['body'] = L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); } } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 6ab37583..a9c7084d 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -147,7 +147,7 @@ function pumpio_connect(&$a) { if (($consumer_key == "") || ($consumer_secret == "")) { logger("pumpio_connect: ".sprintf("Unable to register the client at the pump.io server '%s'.", $hostname)); - $o .= sprintf(L10n::t("Unable to register the client at the pump.io server '%s'."), $hostname); + $o .= L10n::t("Unable to register the client at the pump.io server '%s'.", $hostname); return($o); } @@ -968,7 +968,7 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]'; $likedata['object-type'] = ACTIVITY_OBJ_NOTE; - $likedata['body'] = sprintf(L10n::t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); + $likedata['body'] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink); $likedata['object'] = '' . ACTIVITY_OBJ_NOTE . '1' . '' . $orig_post['uri'] . '' . xmlify('') . '' . $orig_post['title'] . '' . $orig_post['body'] . ''; diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index 0789f546..81aea8b1 100644 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -8,6 +8,7 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; function rendertime_install() { Addon::registerHook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); @@ -30,20 +31,20 @@ function rendertime_page_end(&$a, &$o) { $ignored = in_array($a->module, $ignored_modules); if (is_site_admin() && ($_GET["mode"] != "minimal") && !$a->is_mobile && !$a->is_tablet && !$ignored) { - $o = $o.'
      '.sprintf(t("Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s"), - round($a->performance["database"] - $a->performance["database_write"], 3), - round($a->performance["database_write"], 3), - round($a->performance["network"], 2), - round($a->performance["rendering"], 2), - round($a->performance["parser"], 2), - round($a->performance["file"], 2), - round($duration - $a->performance["database"] - - $a->performance["network"] - $a->performance["rendering"] - - $a->performance["parser"] - $a->performance["file"], 2), - round($duration, 2) - //round($a->performance["markstart"], 3) - //round($a->performance["plugin"], 3) - )."
      "; + $o = $o.'
      '. L10n::t("Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s", + round($a->performance["database"] - $a->performance["database_write"], 3), + round($a->performance["database_write"], 3), + round($a->performance["network"], 2), + round($a->performance["rendering"], 2), + round($a->performance["parser"], 2), + round($a->performance["file"], 2), + round($duration - $a->performance["database"] + - $a->performance["network"] - $a->performance["rendering"] + - $a->performance["parser"] - $a->performance["file"], 2), + round($duration, 2) + //round($a->performance["markstart"], 3) + //round($a->performance["plugin"], 3) + )."
      "; if (Config::get("rendertime", "callstack")) { $o .= "
      ";
      diff --git a/showmore/showmore.php b/showmore/showmore.php
      index c2d4b194..89cec83d 100644
      --- a/showmore/showmore.php
      +++ b/showmore/showmore.php
      @@ -125,7 +125,7 @@ function showmore_prepare_body(&$a,&$b) {
       	if($found) {
       		$rnd = random_string(8);
       		$b['html'] = ''.$shortened." ".
      -				''.sprintf(L10n::t('show more')).''.
      +				''.L10n::t('show more').''.
       				'';
       	}
       }
      diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php
      index 6eb9344e..87c6de33 100644
      --- a/testdrive/testdrive.php
      +++ b/testdrive/testdrive.php
      @@ -89,8 +89,8 @@ function testdrive_enotify(&$a, &$b) {
           if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM
       		&& x($b['params'], 'system_type') && $b['params']['system_type'] === 'testdrive_expire') {
               $b['itemlink'] = $a->get_baseurl();
      -        $b['epreamble'] = $b['preamble'] = sprintf(L10n::t('Your account on %s will expire in a few days.'), Config::get('system','sitename'));
      +        $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename'));
               $b['subject'] = L10n::t('Your Friendica test account is about to expire.');
      -        $b['body'] = sprintf(L10n::t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server());
      +        $b['body'] = L10n::t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com.", $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server());
           }
       }
      diff --git a/widgets/widget_like.php b/widgets/widget_like.php
      index 27931187..5f03c12e 100644
      --- a/widgets/widget_like.php
      +++ b/widgets/widget_like.php
      @@ -58,10 +58,10 @@ function like_widget_content(&$a, $conf){
       	$t = get_markup_template("widget_like.tpl", "addon/widgets/");
       	$o .= replace_macros($t, [
       		'$like'		=> $likes,
      -		'$strlike'	=> sprintf(L10n::tt("%d person likes this", "%d people like this", $likes), $likes),
      +		'$strlike'	=> L10n::tt("%d person likes this", "%d people like this", $likes),
       
       		'$dislike'	=> $dislikes,
      -		'$strdislike'=> sprintf(L10n::tt("%d person doesn't like this", "%d people don't like this", $dislikes), $dislikes),
      +		'$strdislike'=> L10n::tt("%d person doesn't like this", "%d people don't like this", $dislikes),
       
       		'$baseurl' => $a->get_baseurl(),
       	]);
      diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php
      index bc19033c..033d2a64 100644
      --- a/windowsphonepush/windowsphonepush.php
      +++ b/windowsphonepush/windowsphonepush.php
      @@ -87,7 +87,7 @@ function windowsphonepush_settings_post($a, $post)
       
       	PConfig::set(local_user(), 'windowsphonepush', 'senditemtext', intval($_POST['windowsphonepush-senditemtext']));
       
      -	info(t('WindowsPhonePush settings updated.') . EOL);
      +	info(L10n::t('WindowsPhonePush settings updated.') . EOL);
       }
       
       /* Called from the Addon Setting form.
      
      From 2f2bf75058fbc2d08cedabb29c5e6d81e275dd1a Mon Sep 17 00:00:00 2001
      From: Tobias Diekershoff 
      Date: Wed, 24 Jan 2018 10:32:43 +0100
      Subject: [PATCH 015/116] Typo in DE translation of the NSFW addon
      
      ---
       nsfw/lang/de/messages.po | 15 ++++++++-------
       nsfw/lang/de/strings.php |  2 +-
       2 files changed, 9 insertions(+), 8 deletions(-)
      
      diff --git a/nsfw/lang/de/messages.po b/nsfw/lang/de/messages.po
      index 192c33cf..3fb237a2 100644
      --- a/nsfw/lang/de/messages.po
      +++ b/nsfw/lang/de/messages.po
      @@ -4,16 +4,17 @@
       # 
       # 
       # Translators:
      -# Abrax , 2014
      -# bavatar , 2014
      +# Andreas H., 2014
      +# Tobias Diekershoff , 2014
      +# Tobias Diekershoff , 2018
       msgid ""
       msgstr ""
       "Project-Id-Version: friendica\n"
       "Report-Msgid-Bugs-To: \n"
       "POT-Creation-Date: 2013-02-27 05:01-0500\n"
      -"PO-Revision-Date: 2014-10-15 12:32+0000\n"
      -"Last-Translator: Abrax \n"
      -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n"
      +"PO-Revision-Date: 2018-01-24 09:14+0000\n"
      +"Last-Translator: Tobias Diekershoff \n"
      +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
       "MIME-Version: 1.0\n"
       "Content-Type: text/plain; charset=UTF-8\n"
       "Content-Transfer-Encoding: 8bit\n"
      @@ -26,13 +27,13 @@ msgstr "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:"
       
       #: nsfw.php:80
       msgid ""
      -"This addon looks in posts for the words/text you specify below, and "
      +"This plugin looks in posts for the words/text you specify below, and "
       "collapses any content containing those keywords so it is not displayed at "
       "inappropriate times, such as sexual innuendo that may be improper in a work "
       "setting. It is polite and recommended to tag any content containing nudity "
       "with #NSFW.  This filter can also match any other word/text you specify, and"
       " can thereby be used as a general purpose content filter."
      -msgstr "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
      +msgstr "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
       
       #: nsfw.php:81
       msgid "Enable Content filter"
      diff --git a/nsfw/lang/de/strings.php b/nsfw/lang/de/strings.php
      index a313c505..9893208b 100644
      --- a/nsfw/lang/de/strings.php
      +++ b/nsfw/lang/de/strings.php
      @@ -6,7 +6,7 @@ function string_plural_select_de($n){
       }}
       ;
       $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:";
      -$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW.  This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
      +$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW.  This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
       $a->strings["Enable Content filter"] = "Aktiviere den Inhaltsfilter";
       $a->strings["Comma separated list of keywords to hide"] = "Durch Kommata getrennte Liste von Schlüsselwörtern die verborgen werden sollen";
       $a->strings["Submit"] = "Senden";
      
      From 9a0a4465de126bf138bd485bfa0ffdffc93d2089 Mon Sep 17 00:00:00 2001
      From: Tobias Diekershoff 
      Date: Wed, 24 Jan 2018 17:25:47 +0100
      Subject: [PATCH 016/116] followup on #498
      
      ---
       nsfw/lang/de/messages.po | 6 +++---
       nsfw/lang/de/strings.php | 2 +-
       2 files changed, 4 insertions(+), 4 deletions(-)
      
      diff --git a/nsfw/lang/de/messages.po b/nsfw/lang/de/messages.po
      index 3fb237a2..49e70b81 100644
      --- a/nsfw/lang/de/messages.po
      +++ b/nsfw/lang/de/messages.po
      @@ -12,7 +12,7 @@ msgstr ""
       "Project-Id-Version: friendica\n"
       "Report-Msgid-Bugs-To: \n"
       "POT-Creation-Date: 2013-02-27 05:01-0500\n"
      -"PO-Revision-Date: 2018-01-24 09:14+0000\n"
      +"PO-Revision-Date: 2018-01-24 16:10+0000\n"
       "Last-Translator: Tobias Diekershoff \n"
       "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
       "MIME-Version: 1.0\n"
      @@ -27,13 +27,13 @@ msgstr "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:"
       
       #: nsfw.php:80
       msgid ""
      -"This plugin looks in posts for the words/text you specify below, and "
      +"This addon looks in posts for the words/text you specify below, and "
       "collapses any content containing those keywords so it is not displayed at "
       "inappropriate times, such as sexual innuendo that may be improper in a work "
       "setting. It is polite and recommended to tag any content containing nudity "
       "with #NSFW.  This filter can also match any other word/text you specify, and"
       " can thereby be used as a general purpose content filter."
      -msgstr "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
      +msgstr "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
       
       #: nsfw.php:81
       msgid "Enable Content filter"
      diff --git a/nsfw/lang/de/strings.php b/nsfw/lang/de/strings.php
      index 9893208b..c2649e0c 100644
      --- a/nsfw/lang/de/strings.php
      +++ b/nsfw/lang/de/strings.php
      @@ -6,7 +6,7 @@ function string_plural_select_de($n){
       }}
       ;
       $a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe for Work (Filter für ungewollte Inhalte) Einstellungen:";
      -$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW.  This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
      +$a->strings["This addon looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW.  This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Addon sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
       $a->strings["Enable Content filter"] = "Aktiviere den Inhaltsfilter";
       $a->strings["Comma separated list of keywords to hide"] = "Durch Kommata getrennte Liste von Schlüsselwörtern die verborgen werden sollen";
       $a->strings["Submit"] = "Senden";
      
      From 7b95efedd15b318b39710153de918d28b3305cc9 Mon Sep 17 00:00:00 2001
      From: Adam Magness 
      Date: Fri, 26 Jan 2018 19:26:37 -0500
      Subject: [PATCH 017/116] Update function calls
      
      update function calls and remove require_once
      ---
       buffer/buffer.php       | 10 +++++-----
       statusnet/statusnet.php |  9 ++++-----
       tumblr/tumblr.php       |  4 ++--
       twitter/twitter.php     | 14 ++++++--------
       wppost/wppost.php       | 15 +++++++--------
       5 files changed, 24 insertions(+), 28 deletions(-)
      
      diff --git a/buffer/buffer.php b/buffer/buffer.php
      index 02dd7ffb..aef9a0fd 100644
      --- a/buffer/buffer.php
      +++ b/buffer/buffer.php
      @@ -8,6 +8,7 @@
       require 'addon/buffer/bufferapp.php';
       
       use Friendica\App;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -273,8 +274,7 @@ function buffer_send(App $a, &$b)
       	if($access_token) {
       		$buffer = new BufferApp($client_id, $client_secret, $callback_url, $access_token);
       
      -		require_once("include/plaintext.php");
      -		require_once("include/network.php");
      +		require_once 'include/network.php';
       
       		$profiles = $buffer->go('/profiles');
       		if (is_array($profiles)) {
      @@ -339,7 +339,7 @@ function buffer_send(App $a, &$b)
       					$item["body"] = preg_replace("(\[s\](.*?)\[\/s\])ism",'-$1-',$item["body"]);
       				}
       
      -				$post = plaintext($item, $limit, $includedlinks, $htmlmode);
      +				$post = Plaintext::toPlaintext($item, $limit, $includedlinks, $htmlmode);
       				logger("buffer_send: converted message ".$b["id"]." result: ".print_r($post, true), LOGGER_DEBUG);
       
       				// The image proxy is used as a sanitizer. Buffer seems to be really picky about pictures
      @@ -365,8 +365,8 @@ function buffer_send(App $a, &$b)
       				if (($profile->service == "twitter") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
       				elseif (($profile->service == "appdotnet") && isset($post["url"]) && isset($post["title"]) && ($post["type"] != "photo")) {
      -					$post["title"] = shortenmsg($post["title"], 90);
      -					$post["text"] = shortenmsg($post["text"], $limit - (24 + strlen($post["title"])));
      +					$post["title"] = Plaintext::shortenMsg($post["title"], 90);
      +					$post["text"] = Plaintext::shortenMsg($post["text"], $limit - (24 + strlen($post["title"])));
       					$post["text"] .= "\n[".$post["title"]."](".$post["url"].")";
       				} elseif (($profile->service == "appdotnet") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index f9b770a9..3296acbe 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -47,6 +47,7 @@ require_once 'include/enotify.php';
       
       use Friendica\App;
       use Friendica\Content\OEmbed;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -639,13 +640,12 @@ function statusnet_post_hook(App $a, &$b)
       		PConfig::set($b['uid'], 'statusnet', 'max_char', $max_char);
       
       		$tempfile = "";
      -		require_once "include/plaintext.php";
       		require_once "include/network.php";
      -		$msgarr = plaintext($b, $max_char, true, 7);
      +		$msgarr = Plaintext::toPlaintext($b, $max_char, true, 7);
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"]))
      -			$msg = shortenmsg($msgarr["title"], $max_char - 50);
      +			$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
       
       		$image = "";
       
      @@ -785,7 +785,6 @@ function statusnet_prepare_body(App $a, &$b)
       			$max_char = 140;
       		}
       
      -		require_once "include/plaintext.php";
       		$item = $b["item"];
       		$item["plink"] = $a->get_baseurl() . "/display/" . $a->user["nickname"] . "/" . $item["parent"];
       
      @@ -810,7 +809,7 @@ function statusnet_prepare_body(App $a, &$b)
       			}
       		}
       
      -		$msgarr = plaintext($item, $max_char, true, 7);
      +		$msgarr = Plaintext::toPlaintext($item, $max_char, true, 7);
       		$msg = $msgarr["text"];
       
       		if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
      diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php
      index 008027c0..4e518e43 100644
      --- a/tumblr/tumblr.php
      +++ b/tumblr/tumblr.php
      @@ -10,6 +10,7 @@
       require_once 'library/OAuth1.php';
       require_once 'addon/tumblr/tumblroauth/tumblroauth.php';
       
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -358,9 +359,8 @@ function tumblr_send(&$a,&$b) {
       			$tags = implode(',',$tag_arr);
       
       		$title = trim($b['title']);
      -		require_once('include/plaintext.php');
       
      -		$siteinfo = get_attached_data($b["body"]);
      +		$siteinfo = Plaintext::getAttachedData($b["body"]);
       
       		$params = [
       			'state' => 'published',
      diff --git a/twitter/twitter.php b/twitter/twitter.php
      index 244eaee7..f0ed88cf 100644
      --- a/twitter/twitter.php
      +++ b/twitter/twitter.php
      @@ -61,6 +61,7 @@
       
       use Friendica\App;
       use Friendica\Content\OEmbed;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -524,12 +525,11 @@ function twitter_post_hook(App $a, &$b)
       		$tweet = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
       
       		$max_char = 280;
      -		require_once "include/plaintext.php";
      -		$msgarr = plaintext($b, $max_char, true, 8);
      +		$msgarr = Plaintext::toPlaintext($b, $max_char, true, 8);
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"])) {
      -			$msg = shortenmsg($msgarr["title"], $max_char - 50);
      +			$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
       		}
       
       		$image = "";
      @@ -593,12 +593,11 @@ function twitter_post_hook(App $a, &$b)
       		if (strlen($msg) && ($image == "")) {
       // -----------------
       			$max_char = 280;
      -			require_once "include/plaintext.php";
      -			$msgarr = plaintext($b, $max_char, true, 8);
      +			$msgarr = Plaintext::toPlaintext($b, $max_char, true, 8);
       			$msg = $msgarr["text"];
       
       			if (($msg == "") && isset($msgarr["title"])) {
      -				$msg = shortenmsg($msgarr["title"], $max_char - 50);
      +				$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
       			}
       
       			if (isset($msgarr["url"])) {
      @@ -771,7 +770,6 @@ function twitter_prepare_body(App $a, &$b)
       
       	if ($b["preview"]) {
       		$max_char = 280;
      -		require_once "include/plaintext.php";
       		$item = $b["item"];
       		$item["plink"] = $a->get_baseurl() . "/display/" . $a->user["nickname"] . "/" . $item["parent"];
       
      @@ -791,7 +789,7 @@ function twitter_prepare_body(App $a, &$b)
       			}
       		}
       
      -		$msgarr = plaintext($item, $max_char, true, 8);
      +		$msgarr = Plaintext::toPlaintext($item, $max_char, true, 8);
       		$msg = $msgarr["text"];
       
       		if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
      diff --git a/wppost/wppost.php b/wppost/wppost.php
      index 88ae5a4f..a64ffc3d 100644
      --- a/wppost/wppost.php
      +++ b/wppost/wppost.php
      @@ -5,6 +5,7 @@
        * Version: 1.1
        * Author: Mike Macgirvin 
        */
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
      @@ -218,18 +219,16 @@ function wppost_send(&$a,&$b) {
       		$wp_backlink_text = L10n::t('Read the orig­i­nal post and com­ment stream on Friendica');
       	}
       
      -	if($wp_username && $wp_password && $wp_blog) {
      -
      -		require_once('include/bbcode.php');
      -		require_once('include/html2plain.php');
      -		require_once('include/plaintext.php');
      +	if ($wp_username && $wp_password && $wp_blog) {
      +		require_once 'include/bbcode.php';
      +		require_once 'include/html2plain.php';
       
       		$wptitle = trim($b['title']);
       
      -		if (intval(PConfig::get($b['uid'],'wppost','shortcheck'))) {
      +		if (intval(PConfig::get($b['uid'], 'wppost', 'shortcheck'))) {
       			// Checking, if its a post that is worth a blog post
       			$postentry = false;
      -			$siteinfo = get_attached_data($b["body"]);
      +			$siteinfo = Plaintext::getAttachedData($b["body"]);
       
       			// Is it a link to an aricle, a video or a photo?
       			if (isset($siteinfo["type"])) {
      @@ -256,7 +255,7 @@ function wppost_send(&$a,&$b) {
       		// If the title is empty then try to guess
       		if ($wptitle == '') {
       			// Fetch information about the post
      -			$siteinfo = get_attached_data($b["body"]);
      +			$siteinfo = Plaintext::getAttachedData($b["body"]);
       			if (isset($siteinfo["title"])) {
       				$wptitle = $siteinfo["title"];
       			}
      
      From 9c9088069a349b7370c35bbc6dfd38b7f820b746 Mon Sep 17 00:00:00 2001
      From: Adam Magness 
      Date: Fri, 26 Jan 2018 20:04:00 -0500
      Subject: [PATCH 018/116] Plaintext was renamed to BBCode
      
      update class name
      ---
       buffer/buffer.php       |  8 ++++----
       statusnet/statusnet.php |  8 ++++----
       tumblr/tumblr.php       |  4 ++--
       twitter/twitter.php     | 12 ++++++------
       wppost/wppost.php       |  6 +++---
       5 files changed, 19 insertions(+), 19 deletions(-)
      
      diff --git a/buffer/buffer.php b/buffer/buffer.php
      index aef9a0fd..a82fd4fc 100644
      --- a/buffer/buffer.php
      +++ b/buffer/buffer.php
      @@ -8,7 +8,7 @@
       require 'addon/buffer/bufferapp.php';
       
       use Friendica\App;
      -use Friendica\Content\Text\Plaintext;
      +use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -339,7 +339,7 @@ function buffer_send(App $a, &$b)
       					$item["body"] = preg_replace("(\[s\](.*?)\[\/s\])ism",'-$1-',$item["body"]);
       				}
       
      -				$post = Plaintext::toPlaintext($item, $limit, $includedlinks, $htmlmode);
      +				$post = BBCode::toPlaintext($item, $limit, $includedlinks, $htmlmode);
       				logger("buffer_send: converted message ".$b["id"]." result: ".print_r($post, true), LOGGER_DEBUG);
       
       				// The image proxy is used as a sanitizer. Buffer seems to be really picky about pictures
      @@ -365,8 +365,8 @@ function buffer_send(App $a, &$b)
       				if (($profile->service == "twitter") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
       				elseif (($profile->service == "appdotnet") && isset($post["url"]) && isset($post["title"]) && ($post["type"] != "photo")) {
      -					$post["title"] = Plaintext::shortenMsg($post["title"], 90);
      -					$post["text"] = Plaintext::shortenMsg($post["text"], $limit - (24 + strlen($post["title"])));
      +					$post["title"] = BBCode::shortenMsg($post["title"], 90);
      +					$post["text"] = BBCode::shortenMsg($post["text"], $limit - (24 + strlen($post["title"])));
       					$post["text"] .= "\n[".$post["title"]."](".$post["url"].")";
       				} elseif (($profile->service == "appdotnet") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index 3296acbe..40239af7 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -47,7 +47,7 @@ require_once 'include/enotify.php';
       
       use Friendica\App;
       use Friendica\Content\OEmbed;
      -use Friendica\Content\Text\Plaintext;
      +use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -641,11 +641,11 @@ function statusnet_post_hook(App $a, &$b)
       
       		$tempfile = "";
       		require_once "include/network.php";
      -		$msgarr = Plaintext::toPlaintext($b, $max_char, true, 7);
      +		$msgarr = BBCode::toPlaintext($b, $max_char, true, 7);
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"]))
      -			$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
      +			$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
       
       		$image = "";
       
      @@ -809,7 +809,7 @@ function statusnet_prepare_body(App $a, &$b)
       			}
       		}
       
      -		$msgarr = Plaintext::toPlaintext($item, $max_char, true, 7);
      +		$msgarr = BBCode::toPlaintext($item, $max_char, true, 7);
       		$msg = $msgarr["text"];
       
       		if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
      diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php
      index 4e518e43..20a27f45 100644
      --- a/tumblr/tumblr.php
      +++ b/tumblr/tumblr.php
      @@ -10,7 +10,7 @@
       require_once 'library/OAuth1.php';
       require_once 'addon/tumblr/tumblroauth/tumblroauth.php';
       
      -use Friendica\Content\Text\Plaintext;
      +use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -360,7 +360,7 @@ function tumblr_send(&$a,&$b) {
       
       		$title = trim($b['title']);
       
      -		$siteinfo = Plaintext::getAttachedData($b["body"]);
      +		$siteinfo = BBCode::getAttachedData($b["body"]);
       
       		$params = [
       			'state' => 'published',
      diff --git a/twitter/twitter.php b/twitter/twitter.php
      index f0ed88cf..57a9db2b 100644
      --- a/twitter/twitter.php
      +++ b/twitter/twitter.php
      @@ -61,7 +61,7 @@
       
       use Friendica\App;
       use Friendica\Content\OEmbed;
      -use Friendica\Content\Text\Plaintext;
      +use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -525,11 +525,11 @@ function twitter_post_hook(App $a, &$b)
       		$tweet = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
       
       		$max_char = 280;
      -		$msgarr = Plaintext::toPlaintext($b, $max_char, true, 8);
      +		$msgarr = BBCode::toPlaintext($b, $max_char, true, 8);
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"])) {
      -			$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
      +			$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
       		}
       
       		$image = "";
      @@ -593,11 +593,11 @@ function twitter_post_hook(App $a, &$b)
       		if (strlen($msg) && ($image == "")) {
       // -----------------
       			$max_char = 280;
      -			$msgarr = Plaintext::toPlaintext($b, $max_char, true, 8);
      +			$msgarr = BBCode::toPlaintext($b, $max_char, true, 8);
       			$msg = $msgarr["text"];
       
       			if (($msg == "") && isset($msgarr["title"])) {
      -				$msg = Plaintext::shortenMsg($msgarr["title"], $max_char - 50);
      +				$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
       			}
       
       			if (isset($msgarr["url"])) {
      @@ -789,7 +789,7 @@ function twitter_prepare_body(App $a, &$b)
       			}
       		}
       
      -		$msgarr = Plaintext::toPlaintext($item, $max_char, true, 8);
      +		$msgarr = BBCode::toPlaintext($item, $max_char, true, 8);
       		$msg = $msgarr["text"];
       
       		if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
      diff --git a/wppost/wppost.php b/wppost/wppost.php
      index a64ffc3d..f2f9b935 100644
      --- a/wppost/wppost.php
      +++ b/wppost/wppost.php
      @@ -5,7 +5,7 @@
        * Version: 1.1
        * Author: Mike Macgirvin 
        */
      -use Friendica\Content\Text\Plaintext;
      +use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
      @@ -228,7 +228,7 @@ function wppost_send(&$a,&$b) {
       		if (intval(PConfig::get($b['uid'], 'wppost', 'shortcheck'))) {
       			// Checking, if its a post that is worth a blog post
       			$postentry = false;
      -			$siteinfo = Plaintext::getAttachedData($b["body"]);
      +			$siteinfo = BBCode::getAttachedData($b["body"]);
       
       			// Is it a link to an aricle, a video or a photo?
       			if (isset($siteinfo["type"])) {
      @@ -255,7 +255,7 @@ function wppost_send(&$a,&$b) {
       		// If the title is empty then try to guess
       		if ($wptitle == '') {
       			// Fetch information about the post
      -			$siteinfo = Plaintext::getAttachedData($b["body"]);
      +			$siteinfo = BBCode::getAttachedData($b["body"]);
       			if (isset($siteinfo["title"])) {
       				$wptitle = $siteinfo["title"];
       			}
      
      From 9e3ebd61a206bbb96ccdff445dda1b363b440360 Mon Sep 17 00:00:00 2001
      From: Adam Magness 
      Date: Fri, 26 Jan 2018 20:30:38 -0500
      Subject: [PATCH 019/116] Method moved to Plaintext
      
      the shorten method moved to Plaintext class
      ---
       buffer/buffer.php       | 5 +++--
       statusnet/statusnet.php | 3 ++-
       twitter/twitter.php     | 5 +++--
       3 files changed, 8 insertions(+), 5 deletions(-)
      
      diff --git a/buffer/buffer.php b/buffer/buffer.php
      index a82fd4fc..0f05b5c6 100644
      --- a/buffer/buffer.php
      +++ b/buffer/buffer.php
      @@ -9,6 +9,7 @@ require 'addon/buffer/bufferapp.php';
       
       use Friendica\App;
       use Friendica\Content\Text\BBCode;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -365,8 +366,8 @@ function buffer_send(App $a, &$b)
       				if (($profile->service == "twitter") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
       				elseif (($profile->service == "appdotnet") && isset($post["url"]) && isset($post["title"]) && ($post["type"] != "photo")) {
      -					$post["title"] = BBCode::shortenMsg($post["title"], 90);
      -					$post["text"] = BBCode::shortenMsg($post["text"], $limit - (24 + strlen($post["title"])));
      +					$post["title"] = Plaintext::shorten($post["title"], 90);
      +					$post["text"] = Plaintext::shorten($post["text"], $limit - (24 + strlen($post["title"])));
       					$post["text"] .= "\n[".$post["title"]."](".$post["url"].")";
       				} elseif (($profile->service == "appdotnet") && isset($post["url"]) && ($post["type"] != "photo"))
       					$post["text"] .= " ".$post["url"];
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index 40239af7..d74fd313 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -48,6 +48,7 @@ require_once 'include/enotify.php';
       use Friendica\App;
       use Friendica\Content\OEmbed;
       use Friendica\Content\Text\BBCode;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -645,7 +646,7 @@ function statusnet_post_hook(App $a, &$b)
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"]))
      -			$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
      +			$msg = Plaintext::shorten($msgarr["title"], $max_char - 50);
       
       		$image = "";
       
      diff --git a/twitter/twitter.php b/twitter/twitter.php
      index 57a9db2b..6402b82d 100644
      --- a/twitter/twitter.php
      +++ b/twitter/twitter.php
      @@ -62,6 +62,7 @@
       use Friendica\App;
       use Friendica\Content\OEmbed;
       use Friendica\Content\Text\BBCode;
      +use Friendica\Content\Text\Plaintext;
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
      @@ -529,7 +530,7 @@ function twitter_post_hook(App $a, &$b)
       		$msg = $msgarr["text"];
       
       		if (($msg == "") && isset($msgarr["title"])) {
      -			$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
      +			$msg = Plaintext::shorten($msgarr["title"], $max_char - 50);
       		}
       
       		$image = "";
      @@ -597,7 +598,7 @@ function twitter_post_hook(App $a, &$b)
       			$msg = $msgarr["text"];
       
       			if (($msg == "") && isset($msgarr["title"])) {
      -				$msg = BBCode::shortenMsg($msgarr["title"], $max_char - 50);
      +				$msg = Plaintext::shorten($msgarr["title"], $max_char - 50);
       			}
       
       			if (isset($msgarr["url"])) {
      
      From ca3c45101e7d1faac2f19dea1f49fe4300fdd04e Mon Sep 17 00:00:00 2001
      From: Adam Magness 
      Date: Sat, 27 Jan 2018 08:52:02 -0500
      Subject: [PATCH 020/116] Network was moved to src
      
      update all function calls to use class, insert use statements and remove require_once statements
      ---
       blogger/blogger.php                           |  3 ++-
       buffer/buffer.php                             | 10 ++++------
       curweather/curweather.php                     |  4 ++--
       dwpost/dwpost.php                             |  7 ++++---
       fortunate/fortunate.php                       | 20 ++++++++++---------
       fromgplus/fromgplus.php                       | 16 +++++++--------
       geocoordinates/geocoordinates.php             |  3 ++-
       geonames/geonames.php                         |  5 +++--
       ijpost/ijpost.php                             |  6 ++++--
       jappixmini/jappixmini.php                     |  3 ++-
       leistungsschutzrecht/leistungsschutzrecht.php | 12 +++++------
       libertree/libertree.php                       |  5 ++---
       ljpost/ljpost.php                             |  7 ++++---
       mailstream/mailstream.php                     |  3 ++-
       openstreetmap/openstreetmap.php               |  3 ++-
       pumpio/pumpio.php                             |  3 ++-
       statusnet/statusnet.php                       | 19 +++++++++---------
       twitter/twitter.php                           | 13 +++++-------
       wppost/wppost.php                             |  5 ++---
       19 files changed, 76 insertions(+), 71 deletions(-)
      
      diff --git a/blogger/blogger.php b/blogger/blogger.php
      index e9813dc2..7d1a3f4a 100644
      --- a/blogger/blogger.php
      +++ b/blogger/blogger.php
      @@ -8,6 +8,7 @@
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
      +use Friendica\Util\Network;
       
       function blogger_install()
       {
      @@ -205,7 +206,7 @@ EOT;
       		logger('blogger: data: ' . $xml, LOGGER_DATA);
       
       		if ($bl_blog !== 'test') {
      -			$x = post_url($bl_blog, $xml);
      +			$x = Network::postURL($bl_blog, $xml);
       		}
       
       		logger('posted to blogger: ' . (($x) ? $x : ''), LOGGER_DEBUG);
      diff --git a/buffer/buffer.php b/buffer/buffer.php
      index 0f05b5c6..3d02d55f 100644
      --- a/buffer/buffer.php
      +++ b/buffer/buffer.php
      @@ -272,11 +272,9 @@ function buffer_send(App $a, &$b)
       	$client_secret = Config::get("buffer", "client_secret");
       	$access_token = PConfig::get($b['uid'], "buffer","access_token");
       
      -	if($access_token) {
      +	if ($access_token) {
       		$buffer = new BufferApp($client_id, $client_secret, $callback_url, $access_token);
       
      -		require_once 'include/network.php';
      -
       		$profiles = $buffer->go('/profiles');
       		if (is_array($profiles)) {
       			logger("Will send these parameter ".print_r($b, true), LOGGER_DEBUG);
      @@ -353,11 +351,11 @@ function buffer_send(App $a, &$b)
       
       				//if ($includedlinks) {
       				//	if (isset($post["url"]))
      -				//		$post["url"] = short_link($post["url"]);
      +				//		$post["url"] = Network::shortLink($post["url"]);
       				//	if (isset($post["image"]))
      -				//		$post["image"] = short_link($post["image"]);
      +				//		$post["image"] = Network::shortLink($post["image"]);
       				//	if (isset($post["preview"]))
      -				//		$post["preview"] = short_link($post["preview"]);
      +				//		$post["preview"] = Network::shortLink($post["preview"]);
       				//}
       
       				// Seems like a bug to me
      diff --git a/curweather/curweather.php b/curweather/curweather.php
      index 525b03d0..928b8bbe 100644
      --- a/curweather/curweather.php
      +++ b/curweather/curweather.php
      @@ -9,7 +9,6 @@
        *
        */
       
      -require_once 'include/network.php';
       require_once 'mod/proxy.php';
       require_once 'include/text.php';
       
      @@ -18,6 +17,7 @@ use Friendica\Core\Cache;
       use Friendica\Core\Config;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
      +use Friendica\Util\Network;
       
       //  get the weather data from OpenWeatherMap
       function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0) {
      @@ -32,7 +32,7 @@ function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0)
       	}
           }
           try {
      -    	$res = new SimpleXMLElement(fetch_url($url));
      +    	$res = new SimpleXMLElement(Network::fetchURL($url));
           } catch (Exception $e) {
       	info(L10n::t('Error fetching weather data.\nError was: '.$e->getMessage()));
       	return false;
      diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php
      index c5063baa..92e34efc 100644
      --- a/dwpost/dwpost.php
      +++ b/dwpost/dwpost.php
      @@ -10,6 +10,7 @@
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
      +use Friendica\Util\Network;
       
       function dwpost_install() {
       	Addon::registerHook('post_local',           'addon/dwpost/dwpost.php', 'dwpost_post_local');
      @@ -220,10 +221,10 @@ EOT;
       
       		logger('dwpost: data: ' . $xml, LOGGER_DATA);
       
      -		if($dw_blog !== 'test')
      -			$x = post_url($dw_blog,$xml,["Content-Type: text/xml"]);
      +		if($dw_blog !== 'test') {
      +			$x = Network::postURL($dw_blog, $xml, ["Content-Type: text/xml"]);
      +		}
       		logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG);
      -
       	}
       }
       
      diff --git a/fortunate/fortunate.php b/fortunate/fortunate.php
      index 4d87bffe..c51bf374 100644
      --- a/fortunate/fortunate.php
      +++ b/fortunate/fortunate.php
      @@ -6,31 +6,33 @@
        * Author: Mike Macgirvin 
        */
       use Friendica\Core\Addon;
      +use Friendica\Util\Network;
       
       // IMPORTANT: SET THIS to your fortunate server
       
      -define ('FORTUNATE_SERVER', 'hostname.com');
      +define('FORTUNATE_SERVER', 'hostname.com');
       
      -function fortunate_install() {
      +function fortunate_install()
      +{
       	Addon::registerHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch');
      -	if(FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) {
      +	if (FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) {
       		notice('Fortunate addon requires configuration. See README');
       	}
       }
       
      -function fortunate_uninstall() {
      +function fortunate_uninstall()
      +{
       	Addon::unregisterHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch');
       }
       
       
      -function fortunate_fetch(&$a,&$b) {
      -
      +function fortunate_fetch(&$a, &$b)
      +{
       	$a->page['htmlhead'] .= '' . "\r\n";
       
      -	if(FORTUNATE_SERVER != 'hostname.com') {
      -		$s = fetch_url('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand());
      +	if (FORTUNATE_SERVER != 'hostname.com') {
      +		$s = Network::fetchURL('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand());
       		$b .= '
      ' . $s . '
      '; } } - diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index 94ff9834..36791310 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -14,6 +14,7 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Object\Image; +use Friendica\Util\Network; require_once 'mod/share.php'; require_once 'mod/parse_url.php'; @@ -313,8 +314,7 @@ function fromgplus_cleantext($text) { } function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { - require_once("include/items.php"); - require_once("include/network.php"); + require_once 'include/items.php'; $post = ""; $quote = ""; @@ -325,13 +325,13 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { switch($attachment->objectType) { case "video": $pagedata["type"] = "video"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::originalURL($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); break; case "article": $pagedata["type"] = "link"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::originalURL($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); @@ -382,7 +382,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "photo-album": - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::originalURL($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; @@ -403,7 +403,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { case "album": $pagedata["type"] = "link"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::originalURL($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $thumb = $attachment->thumbnails[0]; @@ -416,7 +416,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "audio": - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::originalURL($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; break; @@ -441,7 +441,7 @@ function fromgplus_fetch($a, $uid) { $account = PConfig::get($uid,'fromgplus','account'); $key = Config::get('fromgplus','key'); - $result = fetch_url("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); + $result = Network::fetchURL("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); //$result = file_get_contents("google.txt"); //file_put_contents("google.txt", $result); diff --git a/geocoordinates/geocoordinates.php b/geocoordinates/geocoordinates.php index c96f40e0..a714d8f2 100644 --- a/geocoordinates/geocoordinates.php +++ b/geocoordinates/geocoordinates.php @@ -9,6 +9,7 @@ use Friendica\Core\Addon; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\L10n; +use Friendica\Util\Network; function geocoordinates_install() { @@ -50,7 +51,7 @@ function geocoordinates_resolve_item(&$item) return; } - $s = fetch_url("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); + $s = Network::fetchURL("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); if (!$s) { logger("API could not be queried", LOGGER_DEBUG); diff --git a/geonames/geonames.php b/geonames/geonames.php index eb5a0c87..55098457 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -23,6 +23,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\Network; function geonames_install() { @@ -111,12 +112,12 @@ function geonames_post_hook($a, &$item) { * */ - $s = fetch_url('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); + $s = Network::fetchURL('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); if(! $s) return; - $xml = parse_xml_string($s); + $xml = Network::parseXmlString($s); if($xml->geoname->name && $xml->geoname->countryName) $item['location'] = $xml->geoname->name . ', ' . $xml->geoname->countryName; diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index c094eee9..fe072253 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -10,6 +10,7 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\Network; function ijpost_install() { Addon::registerHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); @@ -219,8 +220,9 @@ EOT; logger('ijpost: data: ' . $xml, LOGGER_DATA); - if($ij_blog !== 'test') - $x = post_url($ij_blog,$xml,["Content-Type: text/xml"]); + if($ij_blog !== 'test') { + $x = Network::postURL($ij_blog, $xml, ["Content-Type: text/xml"]); + } logger('posted to insanejournal: ' . ($x) ? $x : '', LOGGER_DEBUG); } diff --git a/jappixmini/jappixmini.php b/jappixmini/jappixmini.php index 8b58ecb3..4f8f7ff3 100644 --- a/jappixmini/jappixmini.php +++ b/jappixmini/jappixmini.php @@ -68,6 +68,7 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Model\User; +use Friendica\Util\Network; function jappixmini_install() { @@ -658,7 +659,7 @@ function jappixmini_cron(App $a, $d) try { // send request - $answer_json = fetch_url($url); + $answer_json = Network::fetchURL($url); // parse answer $answer = json_decode($answer_json); diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index f5cee117..b59abd7b 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -7,6 +7,7 @@ */ use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Util\Network; function leistungsschutzrecht_install() { Addon::registerHook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); @@ -65,18 +66,17 @@ function leistungsschutzrecht_cuttext($text) { return $text; } -function leistungsschutzrecht_fetchsites() { - require_once("include/network.php"); - +function leistungsschutzrecht_fetchsites() +{ // This list works - but question is how current it is $url = "http://leistungsschutzrecht-stoppen.d-64.org/blacklist.txt"; - $sitelist = fetch_url($url); + $sitelist = Network::fetchURL($url); $siteurls = explode(',', $sitelist); $whitelist = ['tagesschau.de', 'heute.de', 'wdr.de']; $sites = []; - foreach ($siteurls AS $site) { + foreach ($siteurls as $site) { if (!in_array($site, $whitelist)) { $sites[$site] = $site; } @@ -89,7 +89,7 @@ function leistungsschutzrecht_fetchsites() { $url = "http://www.vg-media.de/lizenzen/digitale-verlegerische-angebote/wahrnehmungsberechtigte-digitale-verlegerische-angebote.html"; - $site = fetch_url($url); + $site = Network::fetchURL($url); $doc = new DOMDocument(); @$doc->loadHTML($site); diff --git a/libertree/libertree.php b/libertree/libertree.php index b1b75461..0054b5e5 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -8,6 +8,7 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\Network; function libertree_install() { Addon::registerHook('post_local', 'addon/libertree/libertree.php', 'libertree_post_local'); @@ -229,9 +230,7 @@ function libertree_send(&$a,&$b) { // 'token' => $ltree_api_token ]; - $result = post_url($ltree_blog,$params); + $result = Network::postURL($ltree_blog, $params); logger('libertree: ' . $result); - } } - diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index a8c40a75..7ab748ea 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -10,6 +10,7 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\Network; function ljpost_install() { Addon::registerHook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); @@ -233,10 +234,10 @@ EOT; logger('ljpost: data: ' . $xml, LOGGER_DATA); - if($lj_blog !== 'test') - $x = post_url($lj_blog,$xml,["Content-Type: text/xml"]); + if ($lj_blog !== 'test') { + $x = Network::postURL($lj_blog, $xml, ["Content-Type: text/xml"]); + } logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG); - } } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 18d0420d..fd5a58aa 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -10,6 +10,7 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Database\DBM; +use Friendica\Util\Network; function mailstream_install() { Addon::registerHook('addon_settings', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings'); @@ -155,7 +156,7 @@ function mailstream_do_images($a, &$item, &$attachments) { $redirects; $cookiejar = tempnam(get_temppath(), 'cookiejar-mailstream-'); $attachments[$url] = [ - 'data' => fetch_url($url, true, $redirects, 0, Null, $cookiejar), + 'data' => Network::fetchURL($url, true, $redirects, 0, null, $cookiejar), 'guid' => hash("crc32", $url), 'filename' => basename($url), 'type' => $a->get_curl_content_type()]; diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index 930f1a4a..2bcf06f4 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -12,6 +12,7 @@ use Friendica\Core\Addon; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\L10n; +use Friendica\Util\Network; function openstreetmap_install() { @@ -115,7 +116,7 @@ function openstreetmap_generate_named_map(&$a, &$b) $nomserver = 'http://nominatim.openstreetmap.org/search.php'; $args = '?q=' . urlencode($b['location']) . '&format=json'; - $x = z_fetch_url($nomserver . $args); + $x = Network::zFetchURL($nomserver . $args); if($x['success']) { $j = json_decode($x['body'],true); diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index a9c7084d..0973559c 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -16,6 +16,7 @@ use Friendica\Model\Group; use Friendica\Model\User; use Friendica\Model\Item; use Friendica\Model\Queue; +use Friendica\Util\Network; require 'addon/pumpio/oauth/http.php'; require 'addon/pumpio/oauth/oauth_client.php'; @@ -1698,7 +1699,7 @@ function pumpio_fetchallcomments(&$a, $uid, $id) { function pumpio_reachable($url) { - $data = z_fetch_url($url, false, $redirects, ['timeout'=>10]); + $data = Network::zFetchURL($url, false, $redirects, ['timeout'=>10]); return(intval($data['return_code']) != 0); } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index d74fd313..658b106d 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -57,6 +57,7 @@ use Friendica\Model\GContact; use Friendica\Model\Group; use Friendica\Model\Photo; use Friendica\Model\User; +use Friendica\Util\Network; class StatusNetOAuth extends TwitterOAuth { @@ -234,7 +235,7 @@ function statusnet_settings_post(App $a, $post) foreach ($globalsn as $asn) { if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl']) { $apibase = $asn['apiurl']; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchURL($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { PConfig::set(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey']); PConfig::set(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret']); @@ -252,7 +253,7 @@ function statusnet_settings_post(App $a, $post) // we'll check the API Version for that, if we don't get one we'll try to fix the path but will // resign quickly after this one try to fix the path ;-) $apibase = $_POST['statusnet-baseapi']; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchURL($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -262,7 +263,7 @@ function statusnet_settings_post(App $a, $post) } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchURL($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is now correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -641,7 +642,6 @@ function statusnet_post_hook(App $a, &$b) PConfig::set($b['uid'], 'statusnet', 'max_char', $max_char); $tempfile = ""; - require_once "include/network.php"; $msgarr = BBCode::toPlaintext($b, $max_char, true, 7); $msg = $msgarr["text"]; @@ -653,7 +653,7 @@ function statusnet_post_hook(App $a, &$b) if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { if ((strlen($msgarr["url"]) > 20) && ((strlen($msg . " \n" . $msgarr["url"]) > $max_char))) { - $msg .= " \n" . short_link($msgarr["url"]); + $msg .= " \n" . Network::shortLink($msgarr["url"]); } else { $msg .= " \n" . $msgarr["url"]; } @@ -662,7 +662,7 @@ function statusnet_post_hook(App $a, &$b) } if ($image != "") { - $img_str = fetch_url($image); + $img_str = Network::fetchURL($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); $postdata = ["status" => $msg, "media[]" => $tempfile]; @@ -1613,7 +1613,7 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic if (is_array($items)) { $posts = array_reverse($items); - foreach ($posts AS $post) { + foreach ($posts as $post) { $postarray = statusnet_createpost($a, $uid, $post, $self, false, false); if (trim($postarray['body']) == "") { @@ -1635,7 +1635,6 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic function statusnet_convertmsg(App $a, $body, $no_tags = false) { require_once "include/items.php"; - require_once "include/network.php"; $body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism", "$1.$2.$3.$4/$5", $body); @@ -1653,7 +1652,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) logger("statusnet_convertmsg: expanding url " . $match[1], LOGGER_DEBUG); - $expanded_url = original_url($match[1]); + $expanded_url = Network::originalURL($match[1]); logger("statusnet_convertmsg: fetching data for " . $expanded_url, LOGGER_DEBUG); @@ -1677,7 +1676,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) } elseif ($oembed_data->type != "link") { $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = fetch_url($expanded_url, true, $redirects, 4); + $img_str = Network::fetchURL($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); diff --git a/twitter/twitter.php b/twitter/twitter.php index 6402b82d..45d11ce8 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -74,6 +74,7 @@ use Friendica\Model\Photo; use Friendica\Model\Queue; use Friendica\Model\User; use Friendica\Object\Image; +use Friendica\Util\Network; require_once 'include/enotify.php'; @@ -424,8 +425,6 @@ function twitter_action(App $a, $uid, $pid, $action) function twitter_post_hook(App $a, &$b) { // Post to Twitter - require_once "include/network.php"; - if (!PConfig::get($b["uid"], 'twitter', 'import') && ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))) { return; @@ -545,7 +544,7 @@ function twitter_post_hook(App $a, &$b) // and now tweet it :-) if (strlen($msg) && ($image != "")) { - $img_str = fetch_url($image); + $img_str = Network::fetchURL($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); @@ -1172,8 +1171,6 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $picture) { - require_once "include/network.php"; - $tags = ""; $plain = $body; @@ -1184,11 +1181,11 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur $footerlink = ""; $footer = ""; - foreach ($item->entities->urls AS $url) { + foreach ($item->entities->urls as $url) { $plain = str_replace($url->url, '', $plain); if ($url->url && $url->expanded_url && $url->display_url) { - $expanded_url = original_url($url->expanded_url); + $expanded_url = Network::originalURL($url->expanded_url); $oembed_data = OEmbed::fetchURL($expanded_url); @@ -1217,7 +1214,7 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur } elseif ($oembed_data->type != "link") { $body = str_replace($url->url, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = fetch_url($expanded_url, true, $redirects, 4); + $img_str = Network::fetchURL($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); diff --git a/wppost/wppost.php b/wppost/wppost.php index f2f9b935..b371990a 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -313,10 +313,9 @@ EOT; logger('wppost: data: ' . $xml, LOGGER_DATA); - if($wp_blog !== 'test') { - $x = post_url($wp_blog,$xml); + if ($wp_blog !== 'test') { + $x = Network::postURL($wp_blog, $xml); } logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG); - } } From f1514063559930de791c0bff18a3f6ae4b455f7c Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sat, 27 Jan 2018 11:23:04 -0500 Subject: [PATCH 021/116] Review updates update renamed and moved functions --- blogger/blogger.php | 2 +- buffer/buffer.php | 6 +++--- curweather/curweather.php | 2 +- dwpost/dwpost.php | 2 +- fortunate/fortunate.php | 2 +- fromgplus/fromgplus.php | 12 ++++++------ geocoordinates/geocoordinates.php | 2 +- geonames/geonames.php | 5 +++-- ijpost/ijpost.php | 2 +- jappixmini/jappixmini.php | 2 +- leistungsschutzrecht/leistungsschutzrecht.php | 4 ++-- libertree/libertree.php | 2 +- ljpost/ljpost.php | 2 +- mailstream/mailstream.php | 2 +- openstreetmap/openstreetmap.php | 2 +- pumpio/pumpio.php | 2 +- statusnet/statusnet.php | 14 +++++++------- twitter/twitter.php | 6 +++--- wppost/wppost.php | 2 +- 19 files changed, 37 insertions(+), 36 deletions(-) diff --git a/blogger/blogger.php b/blogger/blogger.php index 7d1a3f4a..7dfbcc4a 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -206,7 +206,7 @@ EOT; logger('blogger: data: ' . $xml, LOGGER_DATA); if ($bl_blog !== 'test') { - $x = Network::postURL($bl_blog, $xml); + $x = Network::post($bl_blog, $xml); } logger('posted to blogger: ' . (($x) ? $x : ''), LOGGER_DEBUG); diff --git a/buffer/buffer.php b/buffer/buffer.php index 3d02d55f..bb1d8482 100644 --- a/buffer/buffer.php +++ b/buffer/buffer.php @@ -351,11 +351,11 @@ function buffer_send(App $a, &$b) //if ($includedlinks) { // if (isset($post["url"])) - // $post["url"] = Network::shortLink($post["url"]); + // $post["url"] = Network::shortenUrl($post["url"]); // if (isset($post["image"])) - // $post["image"] = Network::shortLink($post["image"]); + // $post["image"] = Network::shortenUrl($post["image"]); // if (isset($post["preview"])) - // $post["preview"] = Network::shortLink($post["preview"]); + // $post["preview"] = Network::shortenUrl($post["preview"]); //} // Seems like a bug to me diff --git a/curweather/curweather.php b/curweather/curweather.php index 928b8bbe..edf96c3e 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -32,7 +32,7 @@ function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0) } } try { - $res = new SimpleXMLElement(Network::fetchURL($url)); + $res = new SimpleXMLElement(Network::fetchUrl($url)); } catch (Exception $e) { info(L10n::t('Error fetching weather data.\nError was: '.$e->getMessage())); return false; diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 92e34efc..42b1770e 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -222,7 +222,7 @@ EOT; logger('dwpost: data: ' . $xml, LOGGER_DATA); if($dw_blog !== 'test') { - $x = Network::postURL($dw_blog, $xml, ["Content-Type: text/xml"]); + $x = Network::post($dw_blog, $xml, ["Content-Type: text/xml"]); } logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG); } diff --git a/fortunate/fortunate.php b/fortunate/fortunate.php index c51bf374..8c15caa6 100644 --- a/fortunate/fortunate.php +++ b/fortunate/fortunate.php @@ -32,7 +32,7 @@ function fortunate_fetch(&$a, &$b) . $a->get_baseurl() . '/addon/fortunate/fortunate.css' . '" media="all" />' . "\r\n"; if (FORTUNATE_SERVER != 'hostname.com') { - $s = Network::fetchURL('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand()); + $s = Network::fetchUrl('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand()); $b .= '
      ' . $s . '
      '; } } diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index 36791310..0a2b6802 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -325,13 +325,13 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { switch($attachment->objectType) { case "video": $pagedata["type"] = "video"; - $pagedata["url"] = Network::originalURL($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); break; case "article": $pagedata["type"] = "link"; - $pagedata["url"] = Network::originalURL($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); @@ -382,7 +382,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "photo-album": - $pagedata["url"] = Network::originalURL($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; @@ -403,7 +403,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { case "album": $pagedata["type"] = "link"; - $pagedata["url"] = Network::originalURL($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $thumb = $attachment->thumbnails[0]; @@ -416,7 +416,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "audio": - $pagedata["url"] = Network::originalURL($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; break; @@ -441,7 +441,7 @@ function fromgplus_fetch($a, $uid) { $account = PConfig::get($uid,'fromgplus','account'); $key = Config::get('fromgplus','key'); - $result = Network::fetchURL("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); + $result = Network::fetchUrl("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); //$result = file_get_contents("google.txt"); //file_put_contents("google.txt", $result); diff --git a/geocoordinates/geocoordinates.php b/geocoordinates/geocoordinates.php index a714d8f2..89ccd883 100644 --- a/geocoordinates/geocoordinates.php +++ b/geocoordinates/geocoordinates.php @@ -51,7 +51,7 @@ function geocoordinates_resolve_item(&$item) return; } - $s = Network::fetchURL("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); + $s = Network::fetchUrl("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); if (!$s) { logger("API could not be queried", LOGGER_DEBUG); diff --git a/geonames/geonames.php b/geonames/geonames.php index 55098457..79e268e6 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -24,6 +24,7 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Util\Network; +use Friendica\Util\XML; function geonames_install() { @@ -112,12 +113,12 @@ function geonames_post_hook($a, &$item) { * */ - $s = Network::fetchURL('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); + $s = Network::fetchUrl('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); if(! $s) return; - $xml = Network::parseXmlString($s); + $xml = XML::parseString($s); if($xml->geoname->name && $xml->geoname->countryName) $item['location'] = $xml->geoname->name . ', ' . $xml->geoname->countryName; diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index fe072253..9d9f9112 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -221,7 +221,7 @@ EOT; logger('ijpost: data: ' . $xml, LOGGER_DATA); if($ij_blog !== 'test') { - $x = Network::postURL($ij_blog, $xml, ["Content-Type: text/xml"]); + $x = Network::post($ij_blog, $xml, ["Content-Type: text/xml"]); } logger('posted to insanejournal: ' . ($x) ? $x : '', LOGGER_DEBUG); diff --git a/jappixmini/jappixmini.php b/jappixmini/jappixmini.php index 4f8f7ff3..23f99f17 100644 --- a/jappixmini/jappixmini.php +++ b/jappixmini/jappixmini.php @@ -659,7 +659,7 @@ function jappixmini_cron(App $a, $d) try { // send request - $answer_json = Network::fetchURL($url); + $answer_json = Network::fetchUrl($url); // parse answer $answer = json_decode($answer_json); diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index b59abd7b..04d3e556 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -70,7 +70,7 @@ function leistungsschutzrecht_fetchsites() { // This list works - but question is how current it is $url = "http://leistungsschutzrecht-stoppen.d-64.org/blacklist.txt"; - $sitelist = Network::fetchURL($url); + $sitelist = Network::fetchUrl($url); $siteurls = explode(',', $sitelist); $whitelist = ['tagesschau.de', 'heute.de', 'wdr.de']; @@ -89,7 +89,7 @@ function leistungsschutzrecht_fetchsites() $url = "http://www.vg-media.de/lizenzen/digitale-verlegerische-angebote/wahrnehmungsberechtigte-digitale-verlegerische-angebote.html"; - $site = Network::fetchURL($url); + $site = Network::fetchUrl($url); $doc = new DOMDocument(); @$doc->loadHTML($site); diff --git a/libertree/libertree.php b/libertree/libertree.php index 0054b5e5..b48c9b18 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -230,7 +230,7 @@ function libertree_send(&$a,&$b) { // 'token' => $ltree_api_token ]; - $result = Network::postURL($ltree_blog, $params); + $result = Network::post($ltree_blog, $params); logger('libertree: ' . $result); } } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 7ab748ea..981162e8 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -235,7 +235,7 @@ EOT; logger('ljpost: data: ' . $xml, LOGGER_DATA); if ($lj_blog !== 'test') { - $x = Network::postURL($lj_blog, $xml, ["Content-Type: text/xml"]); + $x = Network::post($lj_blog, $xml, ["Content-Type: text/xml"]); } logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG); } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index fd5a58aa..4ff4c69d 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -156,7 +156,7 @@ function mailstream_do_images($a, &$item, &$attachments) { $redirects; $cookiejar = tempnam(get_temppath(), 'cookiejar-mailstream-'); $attachments[$url] = [ - 'data' => Network::fetchURL($url, true, $redirects, 0, null, $cookiejar), + 'data' => Network::fetchUrl($url, true, $redirects, 0, null, $cookiejar), 'guid' => hash("crc32", $url), 'filename' => basename($url), 'type' => $a->get_curl_content_type()]; diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index 2bcf06f4..1a4a5571 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -116,7 +116,7 @@ function openstreetmap_generate_named_map(&$a, &$b) $nomserver = 'http://nominatim.openstreetmap.org/search.php'; $args = '?q=' . urlencode($b['location']) . '&format=json'; - $x = Network::zFetchURL($nomserver . $args); + $x = Network::curl($nomserver . $args); if($x['success']) { $j = json_decode($x['body'],true); diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 0973559c..6a7429ff 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -1699,7 +1699,7 @@ function pumpio_fetchallcomments(&$a, $uid, $id) { function pumpio_reachable($url) { - $data = Network::zFetchURL($url, false, $redirects, ['timeout'=>10]); + $data = Network::curl($url, false, $redirects, ['timeout'=>10]); return(intval($data['return_code']) != 0); } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 658b106d..eae1c1e4 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -235,7 +235,7 @@ function statusnet_settings_post(App $a, $post) foreach ($globalsn as $asn) { if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl']) { $apibase = $asn['apiurl']; - $c = Network::fetchURL($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { PConfig::set(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey']); PConfig::set(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret']); @@ -253,7 +253,7 @@ function statusnet_settings_post(App $a, $post) // we'll check the API Version for that, if we don't get one we'll try to fix the path but will // resign quickly after this one try to fix the path ;-) $apibase = $_POST['statusnet-baseapi']; - $c = Network::fetchURL($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -263,7 +263,7 @@ function statusnet_settings_post(App $a, $post) } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; - $c = Network::fetchURL($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is now correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -653,7 +653,7 @@ function statusnet_post_hook(App $a, &$b) if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { if ((strlen($msgarr["url"]) > 20) && ((strlen($msg . " \n" . $msgarr["url"]) > $max_char))) { - $msg .= " \n" . Network::shortLink($msgarr["url"]); + $msg .= " \n" . Network::shortenUrl($msgarr["url"]); } else { $msg .= " \n" . $msgarr["url"]; } @@ -662,7 +662,7 @@ function statusnet_post_hook(App $a, &$b) } if ($image != "") { - $img_str = Network::fetchURL($image); + $img_str = Network::fetchUrl($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); $postdata = ["status" => $msg, "media[]" => $tempfile]; @@ -1652,7 +1652,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) logger("statusnet_convertmsg: expanding url " . $match[1], LOGGER_DEBUG); - $expanded_url = Network::originalURL($match[1]); + $expanded_url = Network::finalUrl($match[1]); logger("statusnet_convertmsg: fetching data for " . $expanded_url, LOGGER_DEBUG); @@ -1676,7 +1676,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) } elseif ($oembed_data->type != "link") { $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = Network::fetchURL($expanded_url, true, $redirects, 4); + $img_str = Network::fetchUrl($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); diff --git a/twitter/twitter.php b/twitter/twitter.php index 45d11ce8..5168aa0e 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -544,7 +544,7 @@ function twitter_post_hook(App $a, &$b) // and now tweet it :-) if (strlen($msg) && ($image != "")) { - $img_str = Network::fetchURL($image); + $img_str = Network::fetchUrl($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); @@ -1185,7 +1185,7 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur $plain = str_replace($url->url, '', $plain); if ($url->url && $url->expanded_url && $url->display_url) { - $expanded_url = Network::originalURL($url->expanded_url); + $expanded_url = Network::finalUrl($url->expanded_url); $oembed_data = OEmbed::fetchURL($expanded_url); @@ -1214,7 +1214,7 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur } elseif ($oembed_data->type != "link") { $body = str_replace($url->url, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = Network::fetchURL($expanded_url, true, $redirects, 4); + $img_str = Network::fetchUrl($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); diff --git a/wppost/wppost.php b/wppost/wppost.php index b371990a..85b73d3f 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -314,7 +314,7 @@ EOT; logger('wppost: data: ' . $xml, LOGGER_DATA); if ($wp_blog !== 'test') { - $x = Network::postURL($wp_blog, $xml); + $x = Network::post($wp_blog, $xml); } logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG); } From 0927c200070e0d7d7cadcb0440cfdd5194ce55a7 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 27 Jan 2018 17:17:49 -0500 Subject: [PATCH 022/116] [Composer] Add abraham/twitteroauth dependency - Add vendor to .gitignore - Add install step for addons --- .gitignore | 5 +++- INSTALL.txt | 5 ++-- composer.json | 10 +++++++ composer.lock | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 composer.json create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 39340a42..d4c89f06 100644 --- a/.gitignore +++ b/.gitignore @@ -15,10 +15,13 @@ report/ .buildpath .externalToolBuilders .settings -#ignore OSX .DS_Store files +#ignore OSX .DS_Store files .DS_Store /nbproject/private/ #ignore smarty cache /view/smarty3/compiled/ + +#ignore Composer folder +vendor/ diff --git a/INSTALL.txt b/INSTALL.txt index c06b08e2..8b248bd0 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -4,9 +4,10 @@ To install all addons using git, cd into your top level Friendica directory and -git clone https://github.com/friendica/friendica-addons.git addon + git clone https://github.com/friendica/friendica-addons.git addon + util/composer.phar install -d addon -This will clone the entire repository in a directory called addon. They can now be activated in the addons section of your admin panel. +This will clone the entire repository in a directory called addon. They can now be activated in the addons section of your admin panel. ******************** * Install Manually * diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..9dcfcfba --- /dev/null +++ b/composer.json @@ -0,0 +1,10 @@ +{ + "name": "friendica/friendica-addons", + "description": "Addons library for Friendica", + "type": "library", + "require": { + "abraham/twitteroauth": "^0.7.4" + }, + "license": "3-clause BSD license", + "minimum-stability": "stable" +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..419ff4cc --- /dev/null +++ b/composer.lock @@ -0,0 +1,72 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "341c2ca2f25177375c65577f7e5d7369", + "packages": [ + { + "name": "abraham/twitteroauth", + "version": "0.7.4", + "source": { + "type": "git", + "url": "https://github.com/abraham/twitteroauth.git", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpmd/phpmd": "~2.6", + "phpunit/phpunit": "~5.7", + "squizlabs/php_codesniffer": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Abraham\\TwitterOAuth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abraham Williams", + "email": "abraham@abrah.am", + "homepage": "https://abrah.am", + "role": "Developer" + } + ], + "description": "The most popular PHP library for use with the Twitter OAuth REST API.", + "homepage": "https://twitteroauth.com", + "keywords": [ + "Twitter API", + "Twitter oAuth", + "api", + "oauth", + "rest", + "social", + "twitter" + ], + "time": "2017-06-30T22:02:01+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} From 75d5fbbc7078b7b3fe57c318a352e496f6f099cc Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 27 Jan 2018 23:12:04 -0500 Subject: [PATCH 023/116] Update Twitter addon - Replace Codebird with latest version of TwitterOAuth from addon vendor - Remove references to library/twitteroauth.php, include/bbcode.php and addon/twitter/codebird.php - Remove unused obsolete cacert.pem --- twitter/cacert.pem | 3895 ------------------------------------------ twitter/codebird.php | 1026 ----------- twitter/twitter.php | 83 +- 3 files changed, 21 insertions(+), 4983 deletions(-) delete mode 100644 twitter/cacert.pem delete mode 100644 twitter/codebird.php diff --git a/twitter/cacert.pem b/twitter/cacert.pem deleted file mode 100644 index 99b310bc..00000000 --- a/twitter/cacert.pem +++ /dev/null @@ -1,3895 +0,0 @@ -## -## ca-bundle.crt -- Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012 -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## - -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $ - -GTE CyberTrust Global Root -========================== ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG -A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz -MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL -Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 -IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u -sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql -HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID -AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW -M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF -NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -Thawte Server CA -================ ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE -AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j -b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV -BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u -c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG -A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 -ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl -/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 -1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J -GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ -GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -Thawte Premium Server CA -======================== ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE -AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl -ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU -VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 -aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ -cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 -aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh -Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ -qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm -SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf -8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t -UCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy -MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE -NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i -o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq -kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 -RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy -MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD -VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS -xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi -up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 -mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA -TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah -WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf -Tqj/ZA1k ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd -k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq -WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM -XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC -lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx -nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC -wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA -ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK -1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk -LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO -FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 -lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT -1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD -Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 ------END CERTIFICATE----- - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -ValiCert Class 1 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy -MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi -GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm -DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG -lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX -icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP -Orf1LXLI ------END CERTIFICATE----- - -ValiCert Class 2 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC -CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf -ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ -SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV -UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 -W9ViH0Pd ------END CERTIFICATE----- - -RSA Root Certificate 1 -====================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td -3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H -BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs -3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF -V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r -on+jjBXu ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E -bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ -rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ -Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB -FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N -y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h -a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc -D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y -azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug -b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 -tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 -C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS -0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs -Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 -JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf -0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx -JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j -GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Secure Server CA -============================ ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg -cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl -ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG -A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi -eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p -dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ -aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 -gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw -ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw -CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l -dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw -NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow -HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN -Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 -n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC -AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER -gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B -AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS -o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z -2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX -OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Equifax Secure Global eBusiness CA -================================== ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp -bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx -HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds -b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV -PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN -qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn -hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs -MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN -I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY -NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 1 -============================= ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB -LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE -ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz -IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ -1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a -IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk -MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW -Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF -AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 -lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ -KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE -ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y -MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT -DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn -2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 -BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx -JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e -uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 -jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia -78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm -V+GRMOrN ------END CERTIFICATE----- - -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy -MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 -Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb -WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH -KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP -+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E -FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY -v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj -0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj -VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 -nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA -pKnXwiJPZ9d37CAFYd4= ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -UTN-USER First-Network Applications -=================================== ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp -BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 -WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T -YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB -cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug -mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj -DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu -Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi -P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE -j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w -HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j -cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G -CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK -RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp -xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq -DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - -America Online Root Certification Authority 1 -============================================= ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG -v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z -DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh -sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP -8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z -o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf -GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF -VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft -3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g -Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -America Online Root Certification Authority 2 -============================================= ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en -fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 -f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO -qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN -RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 -gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn -6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid -FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 -Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj -B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op -aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY -T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p -+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg -JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy -zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO -ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh -1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf -GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff -Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP -cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx -OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg -DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij -KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K -DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv -BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp -p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 -nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX -MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM -Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz -uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT -BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj -YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB -BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD -VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 -ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE -AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV -qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s -hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z -POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 -Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp -8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC -bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu -g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p -vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr -qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 1 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw -NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 -7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 -EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl -0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 -2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa -HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT -iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 -28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV -yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR -vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P -qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z -IRlXvVWa ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE -ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w -HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh -bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt -vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P -jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca -C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth -vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 -22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV -HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v -dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN -BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR -EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw -MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y -nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -TDC Internet Root CA -==================== ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE -ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx -NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu -ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j -xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL -znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc -5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 -otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI -AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM -VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM -MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC -AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe -UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G -CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m -gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb -O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU -Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -TDC OCES Root CA -================ ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE -ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 -MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH -nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 -zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV -iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde -dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO -3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB -5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k -ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm -cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp -Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x -LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM -MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm -aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 -+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 -NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 -A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc -A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 -AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 -AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Email Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 -BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 -OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx -FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx -ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz -dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx -B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 -om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG -TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl -yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE -AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV -HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll -bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne -xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ -5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV -NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ -w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -UTN USERFirst Object Root CA -============================ ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb -BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz -NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx -HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy -dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR -loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ -w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu -lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 -RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL -BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 -ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly -c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw -DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO -PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE -qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG -hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -NetLock Qualified (Class QA) Root -================================= ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn -eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 -bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 -LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 -dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP -aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV -CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e -8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb -m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ -0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM -0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 -YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p -a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz -YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg -YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg -ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov -L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr -Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 -aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg -YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 -IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 -DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN -wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg -W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc -R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR -5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI -EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j -ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX -DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH -EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD -VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz -cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM -D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ -z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC -/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 -tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 -4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG -A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC -Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv -bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn -LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 -ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz -IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh -IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu -b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg -Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp -bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 -ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP -ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB -CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr -KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM -8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -NetLock Business (Class B) Root -=============================== ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg -VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD -VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv -bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg -VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S -o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr -1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ -RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh -dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 -ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv -c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg -YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz -Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA -bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl -IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 -YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj -cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM -43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR -stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -NetLock Express (Class C) Root -============================== ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ -BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j -ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z -W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 -euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw -DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN -RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn -YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB -IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i -aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 -ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y -emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k -IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ -UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg -YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 -xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW -gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT -GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp -Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA -ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL -MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT -OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 -ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V -j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH -lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf -3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 -NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww -KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG -AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD -ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf -wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm -7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG -VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl -bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv -MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX -x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 -E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 -OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j -sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj -YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF -BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD -ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv -m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R -OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 -tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 -MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM -MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF -NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe -AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC -b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn -7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN -cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp -WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 -haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY -MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 -MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn -jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ -MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H -VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl -vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl -OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 -1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq -nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy -x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - -SwissSign Platinum CA - G2 -========================== ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw -HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM -U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu -669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF -eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne -WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo -j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 -8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T -aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy -domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D -+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV -CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv -zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 -Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 -NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 -U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 -KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl -9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B -aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs -OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY -Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci -IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -WellsSecure Public Root Certificate Authority -============================================= ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM -F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw -NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl -bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD -VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 -iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 -i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 -bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB -K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB -AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu -cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm -lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB -i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww -GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI -K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 -bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj -qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es -E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ -tylv2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -IGC/A -===== ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD -VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE -Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy -MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI -EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT -STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 -TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW -So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy -HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd -frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ -tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB -egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC -iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK -q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q -MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI -lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF -0mBWWg== ------END CERTIFICATE----- - -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE -BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl -Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO -/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX -WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z -ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 -bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK -9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm -iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG -Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW -mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW -T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - -S-TRUST Authentication and Encryption Root CA 2005 PN -===================================================== ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh -cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT -LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w -NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk -ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj -aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp -b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob -4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL -g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf -eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 -KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB -/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv -bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU -D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD -pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 -P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA -nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit -F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b -Hz2eBIPdltkdOpQ= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA -========================= ------BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE -BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL -EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 -MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz -dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT -GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG -d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N -oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc -QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ -PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb -MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG -IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD -VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 -LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A -dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA -4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg -AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA -egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 -Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO -PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv -c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h -cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw -IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT -WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV -MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp -Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal -HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT -nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE -aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK -yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB -S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. -====================================== ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT -AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg -LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w -HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ -U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh -IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN -yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU -2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 -4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP -2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm -8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf -HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa -Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK -5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b -czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g -ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF -BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug -cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf -AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX -EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v -/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 -MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 -3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk -eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f -/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h -RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU -Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== ------END CERTIFICATE----- - -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw -MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw -IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 -xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ -Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u -SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G -dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ -KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj -TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP -JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk -vQ== ------END CERTIFICATE----- - -TC TrustCenter Class 3 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw -MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W -yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo -6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ -uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk -2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE -O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 -yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 -IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal -092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc -5A== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN -MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg -VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw -JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC -qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv -xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw -ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O -gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j -BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG -1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy -vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 -ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a -7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -ComSign CA -========== ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD -EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy -MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp -Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q -ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy -P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN -GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk -YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM -rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy -oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P -AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ -VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 -QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI -mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb -/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG -zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U -AGegcQCCSA== ------END CERTIFICATE----- - -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE -AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w -NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD -QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs -49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH -7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB -kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 -9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw -AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t -U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA -j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC -AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a -BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp -FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP -51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 -============================================================================================================================= ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH -DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q -aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry -b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV -BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg -S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 -MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl -IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF -n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl -IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft -dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl -cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO -Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 -xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR -6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd -BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 -N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT -y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh -LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M -dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= ------END CERTIFICATE----- - -Buypass Class 2 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 -MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M -cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 -0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 -0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R -uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV -1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt -7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 -fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w -wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 -MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx -ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 -n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia -AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c -1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 -pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA -EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 -htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj -el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 -========================================================================== ------BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg -QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe -Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt -IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by -X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b -gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr -eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ -TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy -Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn -uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI -qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm -ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 -Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW -Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t -FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm -zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k -XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT -bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU -RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK -1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt -2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ -Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 -AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE -ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw -OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD -o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz -VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT -VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or -czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK -y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC -wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S -lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 -Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM -O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 -BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 -G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m -mxE= ------END CERTIFICATE----- - -ApplicationCA - Japanese Government -=================================== ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT -SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw -MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl -cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 -fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN -wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE -jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu -nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU -WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV -BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD -vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs -o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g -/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD -io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW -dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -============================================ ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ -5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn -vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj -CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil -e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR -OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI -CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 -48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi -trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 -qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB -AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC -ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA -A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz -+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj -f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN -kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk -CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF -URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb -CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h -oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV -IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm -66+KAQ== ------END CERTIFICATE----- - -CA Disig -======== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK -QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw -MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz -bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm -GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD -Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo -hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt -ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w -gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P -AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz -aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff -ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa -BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t -WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 -mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K -ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA -4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -Juur-SK -======= ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA -c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw -DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG -SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy -aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf -TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC -+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw -UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa -Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF -MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD -HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh -AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA -cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr -AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw -cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G -A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo -ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL -abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 -IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh -Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 -yyqcjg== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD -T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 -MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG -A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk -WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD -YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew -MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb -m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk -HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT -xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 -3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 -2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq -TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz -4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU -9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg -aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP -eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk -zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 -ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI -KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq -nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE -I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp -MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o -tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ -VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 -yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa -XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n -0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ -RjXZ+Hxb ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky -CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX -bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ -D/xwzoiQ ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi -=================================================== ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz -ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 -MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 -cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u -aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY -8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y -jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI -JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk -9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG -SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d -F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq -D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 -Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -TC TrustCenter Universal CA III -=============================== ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe -Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU -QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex -KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt -QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO -juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut -CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 -M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G -A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA -g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ -KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK -BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq -woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -Certinomis - Autorité Racine -============================= ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg -LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG -A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw -JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa -wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly -Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw -2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N -jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q -c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC -lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb -xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g -530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna -4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x -WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva -R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 -nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B -CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv -JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE -qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b -WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE -wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ -vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -Root CA Generalitat Valenciana -============================== ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE -ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 -IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 -WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE -CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 -F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B -ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ -D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte -JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB -AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n -dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB -ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl -AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA -YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy -AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt -AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA -YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu -AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA -OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 -dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV -BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S -b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh -TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz -Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 -NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH -iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt -+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE -Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R -dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw -RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 -ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 -c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA -zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n -yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE -SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 -iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V -cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV -eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 -ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr -sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd -JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 -ahq97BvIxYSazQ== ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ -Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 -dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu -c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv -bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 -aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 -fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm -N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN -Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T -tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX -e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA -2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs -HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib -D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE -ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O -o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG -4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi -Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul -Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs -O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H -vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L -nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS -FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa -z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ -KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk -J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ -JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG -/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc -nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld -blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc -l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm -7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm -obp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- diff --git a/twitter/codebird.php b/twitter/codebird.php deleted file mode 100644 index 898dc710..00000000 --- a/twitter/codebird.php +++ /dev/null @@ -1,1026 +0,0 @@ - - * @copyright 2010-2013 J.M. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * Define constants - */ -$constants = explode(' ', 'OBJECT ARRAY JSON'); -foreach ($constants as $i => $id) { - $id = 'CODEBIRD_RETURNFORMAT_' . $id; - defined($id) or define($id, $i); -} -$constants = array( - 'CURLE_SSL_CERTPROBLEM' => 58, - 'CURLE_SSL_CACERT' => 60, - 'CURLE_SSL_CACERT_BADFILE' => 77, - 'CURLE_SSL_CRL_BADFILE' => 82, - 'CURLE_SSL_ISSUER_ERROR' => 83 -); -foreach ($constants as $id => $i) { - defined($id) or define($id, $i); -} -unset($constants); -unset($i); -unset($id); - -/** - * A Twitter library in PHP. - * - * @package codebird - * @subpackage codebird-php - */ -class Codebird -{ - /** - * The current singleton instance - */ - private static $_instance = null; - - /** - * The OAuth consumer key of your registered app - */ - protected static $_oauth_consumer_key = null; - - /** - * The corresponding consumer secret - */ - protected static $_oauth_consumer_secret = null; - - /** - * The app-only bearer token. Used to authorize app-only requests - */ - protected static $_oauth_bearer_token = null; - - /** - * The API endpoint to use - */ - protected static $_endpoint = 'https://api.twitter.com/1.1/'; - - /** - * The API endpoint to use for OAuth requests - */ - protected static $_endpoint_oauth = 'https://api.twitter.com/'; - - /** - * The Request or access token. Used to sign requests - */ - protected $_oauth_token = null; - - /** - * The corresponding request or access token secret - */ - protected $_oauth_token_secret = null; - - /** - * The format of data to return from API calls - */ - protected $_return_format = CODEBIRD_RETURNFORMAT_OBJECT; - - /** - * The file formats that Twitter accepts as image uploads - */ - protected $_supported_media_files = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); - - /** - * The current Codebird version - */ - protected $_version = '2.4.1'; - - /** - * Returns singleton class instance - * Always use this method unless you're working with multiple authenticated users at once - * - * @return Codebird The instance - */ - public static function getInstance() - { - if (self::$_instance == null) { - self::$_instance = new self; - } - return self::$_instance; - } - - /** - * Sets the OAuth consumer key and secret (App key) - * - * @param string $key OAuth consumer key - * @param string $secret OAuth consumer secret - * - * @return void - */ - public static function setConsumerKey($key, $secret) - { - self::$_oauth_consumer_key = $key; - self::$_oauth_consumer_secret = $secret; - } - - /** - * Sets the OAuth2 app-only auth bearer token - * - * @param string $token OAuth2 bearer token - * - * @return void - */ - public static function setBearerToken($token) - { - self::$_oauth_bearer_token = $token; - } - - /** - * Gets the current Codebird version - * - * @return string The version number - */ - public function getVersion() - { - return $this->_version; - } - - /** - * Sets the OAuth request or access token and secret (User key) - * - * @param string $token OAuth request or access token - * @param string $secret OAuth request or access token secret - * - * @return void - */ - public function setToken($token, $secret) - { - $this->_oauth_token = $token; - $this->_oauth_token_secret = $secret; - } - - /** - * Sets the format for API replies - * - * @param int $return_format One of these: - * CODEBIRD_RETURNFORMAT_OBJECT (default) - * CODEBIRD_RETURNFORMAT_ARRAY - * - * @return void - */ - public function setReturnFormat($return_format) - { - $this->_return_format = $return_format; - } - - /** - * Main API handler working on any requests you issue - * - * @param string $fn The member function you called - * @param array $params The parameters you sent along - * - * @return mixed The API reply encoded in the set return_format - */ - - public function __call($fn, $params) - { - // parse parameters - $apiparams = array(); - if (count($params) > 0) { - if (is_array($params[0])) { - $apiparams = $params[0]; - } else { - parse_str($params[0], $apiparams); - // remove auto-added slashes if on magic quotes steroids - if (get_magic_quotes_gpc()) { - foreach($apiparams as $key => $value) { - if (is_array($value)) { - $apiparams[$key] = array_map('stripslashes', $value); - } else { - $apiparams[$key] = stripslashes($value); - } - } - } - } - } - - // stringify null and boolean parameters - foreach ($apiparams as $key => $value) { - if (! is_scalar($value)) { - continue; - } - if (is_null($value)) { - $apiparams[$key] = 'null'; - } elseif (is_bool($value)) { - $apiparams[$key] = $value ? 'true' : 'false'; - } - } - - $app_only_auth = false; - if (count($params) > 1) { - $app_only_auth = !! $params[1]; - } - - // map function name to API method - $method = ''; - - // replace _ by / - $path = explode('_', $fn); - for ($i = 0; $i < count($path); $i++) { - if ($i > 0) { - $method .= '/'; - } - $method .= $path[$i]; - } - // undo replacement for URL parameters - $url_parameters_with_underscore = array('screen_name'); - foreach ($url_parameters_with_underscore as $param) { - $param = strtoupper($param); - $replacement_was = str_replace('_', '/', $param); - $method = str_replace($replacement_was, $param, $method); - } - - // replace AA by URL parameters - $method_template = $method; - $match = array(); - if (preg_match('/[A-Z_]{2,}/', $method, $match)) { - foreach ($match as $param) { - $param_l = strtolower($param); - $method_template = str_replace($param, ':' . $param_l, $method_template); - if (!isset($apiparams[$param_l])) { - for ($i = 0; $i < 26; $i++) { - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - throw new \Exception( - 'To call the templated method "' . $method_template - . '", specify the parameter value for "' . $param_l . '".' - ); - } - $method = str_replace($param, $apiparams[$param_l], $method); - unset($apiparams[$param_l]); - } - } - - // replace A-Z by _a-z - for ($i = 0; $i < 26; $i++) { - $method = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method); - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - - $httpmethod = $this->_detectMethod($method_template, $apiparams); - $multipart = $this->_detectMultipart($method_template); - - return $this->_callApi( - $httpmethod, - $method, - $method_template, - $apiparams, - $multipart, - $app_only_auth - ); - } - - /** - * Uncommon API methods - */ - - /** - * Gets the OAuth authenticate URL for the current request token - * - * @return string The OAuth authenticate URL - */ - public function oauth_authenticate($force_login = NULL, $screen_name = NULL) - { - if ($this->_oauth_token == null) { - throw new \Exception('To get the authenticate URL, the OAuth token must be set.'); - } - $url = self::$_endpoint_oauth . 'oauth/authenticate?oauth_token=' . $this->_url($this->_oauth_token); - if ($force_login) { - $url .= "&force_login=1"; - } - if ($screen_name) { - $url .= "&screen_name=" . $screen_name; - } - return $url; - } - - /** - * Gets the OAuth authorize URL for the current request token - * - * @return string The OAuth authorize URL - */ - public function oauth_authorize($force_login = NULL, $screen_name = NULL) - { - if ($this->_oauth_token == null) { - throw new \Exception('To get the authorize URL, the OAuth token must be set.'); - } - $url = self::$_endpoint_oauth . 'oauth/authorize?oauth_token=' . $this->_url($this->_oauth_token); - if ($force_login) { - $url .= "&force_login=1"; - } - if ($screen_name) { - $url .= "&screen_name=" . $screen_name; - } - return $url; - } - - /** - * Gets the OAuth bearer token - * - * @return string The OAuth bearer token - */ - - public function oauth2_token() - { - if (! function_exists('curl_init')) { - throw new \Exception('To make API requests, the PHP curl extension must be available.'); - } - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To obtain a bearer token, the consumer key must be set.'); - } - $ch = false; - $post_fields = array( - 'grant_type' => 'client_credentials' - ); - $url = self::$_endpoint_oauth . 'oauth2/token'; - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); - curl_setopt($ch, CURLOPT_HEADER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem'); - - curl_setopt($ch, CURLOPT_USERPWD, self::$_oauth_consumer_key . ':' . self::$_oauth_consumer_secret); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Expect:' - )); - $reply = curl_exec($ch); - - // certificate validation results - $validation_result = curl_errno($ch); - if (in_array( - $validation_result, - array( - CURLE_SSL_CERTPROBLEM, - CURLE_SSL_CACERT, - CURLE_SSL_CACERT_BADFILE, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR - ) - ) - ) { - throw new \Exception('Error ' . $validation_result . ' while validating the Twitter API certificate.'); - } - - $httpstatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $reply = $this->_parseApiReply('oauth2/token', $reply); - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - $reply['httpstatus'] = $httpstatus; - if ($httpstatus == 200) { - self::setBearerToken($reply['access_token']); - } - break; - case CODEBIRD_RETURNFORMAT_JSON: - if ($httpstatus == 200) { - $parsed = json_decode($reply); - self::setBearerToken($parsed->access_token); - } - break; - case CODEBIRD_RETURNFORMAT_OBJECT: - $reply->httpstatus = $httpstatus; - if ($httpstatus == 200) { - self::setBearerToken($reply->access_token); - } - break; - } - return $reply; - } - - /** - * Signing helpers - */ - - /** - * URL-encodes the given data - * - * @param mixed $data - * - * @return mixed The encoded data - */ - private function _url($data) - { - if (is_array($data)) { - return array_map(array( - $this, - '_url' - ), $data); - } elseif (is_scalar($data)) { - return str_replace(array( - '+', - '!', - '*', - "'", - '(', - ')' - ), array( - ' ', - '%21', - '%2A', - '%27', - '%28', - '%29' - ), rawurlencode($data)); - } else { - return ''; - } - } - - /** - * Gets the base64-encoded SHA1 hash for the given data - * - * @param string $data The data to calculate the hash from - * - * @return string The hash - */ - private function _sha1($data) - { - if (self::$_oauth_consumer_secret == null) { - throw new \Exception('To generate a hash, the consumer secret must be set.'); - } - if (!function_exists('hash_hmac')) { - throw new \Exception('To generate a hash, the PHP hash extension must be available.'); - } - return base64_encode(hash_hmac('sha1', $data, self::$_oauth_consumer_secret . '&' - . ($this->_oauth_token_secret != null ? $this->_oauth_token_secret : ''), true)); - } - - /** - * Generates a (hopefully) unique random string - * - * @param int optional $length The length of the string to generate - * - * @return string The random string - */ - protected function _nonce($length = 8) - { - if ($length < 1) { - throw new \Exception('Invalid nonce length.'); - } - return substr(md5(microtime(true)), 0, $length); - } - - /** - * Generates an OAuth signature - * - * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' - * @param string $method The API method to call - * @param array optional $params The API call parameters, associative - * - * @return string Authorization HTTP header - */ - protected function _sign($httpmethod, $method, $params = array()) - { - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To generate a signature, the consumer key must be set.'); - } - $sign_params = array( - 'consumer_key' => self::$_oauth_consumer_key, - 'version' => '1.0', - 'timestamp' => time(), - 'nonce' => $this->_nonce(), - 'signature_method' => 'HMAC-SHA1' - ); - $sign_base_params = array(); - foreach ($sign_params as $key => $value) { - $sign_base_params['oauth_' . $key] = $this->_url($value); - } - if ($this->_oauth_token != null) { - $sign_base_params['oauth_token'] = $this->_url($this->_oauth_token); - } - $oauth_params = $sign_base_params; - foreach ($params as $key => $value) { - $sign_base_params[$key] = $this->_url($value); - } - ksort($sign_base_params); - $sign_base_string = ''; - foreach ($sign_base_params as $key => $value) { - $sign_base_string .= $key . '=' . $value . '&'; - } - $sign_base_string = substr($sign_base_string, 0, -1); - $signature = $this->_sha1($httpmethod . '&' . $this->_url($method) . '&' . $this->_url($sign_base_string)); - - $params = array_merge($oauth_params, array( - 'oauth_signature' => $signature - )); - ksort($params); - $authorization = 'Authorization: OAuth '; - foreach ($params as $key => $value) { - $authorization .= $key . '="' . $this->_url($value) . '", '; - } - return substr($authorization, 0, -2); - } - - /** - * Detects HTTP method to use for API call - * - * @param string $method The API method to call - * @param array $params The parameters to send along - * - * @return string The HTTP method that should be used - */ - protected function _detectMethod($method, $params) - { - // multi-HTTP method endpoints - switch($method) { - case 'account/settings': - $method = count($params) > 0 ? $method . '__post' : $method; - break; - } - - $httpmethods = array(); - $httpmethods['GET'] = array( - // Timelines - 'statuses/mentions_timeline', - 'statuses/user_timeline', - 'statuses/home_timeline', - 'statuses/retweets_of_me', - - // Tweets - 'statuses/retweets/:id', - 'statuses/show/:id', - 'statuses/oembed', - - // Search - 'search/tweets', - - // Direct Messages - 'direct_messages', - 'direct_messages/sent', - 'direct_messages/show', - - // Friends & Followers - 'friendships/no_retweets/ids', - 'friends/ids', - 'followers/ids', - 'friendships/lookup', - 'friendships/incoming', - 'friendships/outgoing', - 'friendships/show', - 'friends/list', - 'followers/list', - - // Users - 'account/settings', - 'account/verify_credentials', - 'blocks/list', - 'blocks/ids', - 'users/lookup', - 'users/show', - 'users/search', - 'users/contributees', - 'users/contributors', - 'users/profile_banner', - - // Suggested Users - 'users/suggestions/:slug', - 'users/suggestions', - 'users/suggestions/:slug/members', - - // Favorites - 'favorites/list', - - // Lists - 'lists/list', - 'lists/statuses', - 'lists/memberships', - 'lists/subscribers', - 'lists/subscribers/show', - 'lists/members/show', - 'lists/members', - 'lists/show', - 'lists/subscriptions', - - // Saved searches - 'saved_searches/list', - 'saved_searches/show/:id', - - // Places & Geo - 'geo/id/:place_id', - 'geo/reverse_geocode', - 'geo/search', - 'geo/similar_places', - - // Trends - 'trends/place', - 'trends/available', - 'trends/closest', - - // OAuth - 'oauth/authenticate', - 'oauth/authorize', - - // Help - 'help/configuration', - 'help/languages', - 'help/privacy', - 'help/tos', - 'application/rate_limit_status' - ); - $httpmethods['POST'] = array( - // Tweets - 'statuses/destroy/:id', - 'statuses/update', - 'statuses/retweet/:id', - 'statuses/update_with_media', - - // Direct Messages - 'direct_messages/destroy', - 'direct_messages/new', - - // Friends & Followers - 'friendships/create', - 'friendships/destroy', - 'friendships/update', - - // Users - 'account/settings__post', - 'account/update_delivery_device', - 'account/update_profile', - 'account/update_profile_background_image', - 'account/update_profile_colors', - 'account/update_profile_image', - 'blocks/create', - 'blocks/destroy', - 'account/update_profile_banner', - 'account/remove_profile_banner', - - // Favorites - 'favorites/destroy', - 'favorites/create', - - // Lists - 'lists/members/destroy', - 'lists/subscribers/create', - 'lists/subscribers/destroy', - 'lists/members/create_all', - 'lists/members/create', - 'lists/destroy', - 'lists/update', - 'lists/create', - 'lists/members/destroy_all', - - // Saved Searches - 'saved_searches/create', - 'saved_searches/destroy/:id', - - // Places & Geo - 'geo/place', - - // Spam Reporting - 'users/report_spam', - - // OAuth - 'oauth/access_token', - 'oauth/request_token', - 'oauth2/token', - 'oauth2/invalidate_token' - ); - foreach ($httpmethods as $httpmethod => $methods) { - if (in_array($method, $methods)) { - return $httpmethod; - } - } - throw new \Exception('Can\'t find HTTP method to use for "' . $method . '".'); - } - - /** - * Detects if API call should use multipart/form-data - * - * @param string $method The API method to call - * - * @return bool Whether the method should be sent as multipart - */ - protected function _detectMultipart($method) - { - $multiparts = array( - // Tweets - 'statuses/update_with_media', - - // Users - 'account/update_profile_background_image', - 'account/update_profile_image', - 'account/update_profile_banner' - ); - return in_array($method, $multiparts); - } - - /** - * Detect filenames in upload parameters, - * build multipart request from upload params - * - * @param string $method The API method to call - * @param array $params The parameters to send along - * - * @return void - */ - protected function _buildMultipart($method, $params) - { - // well, files will only work in multipart methods - if (! $this->_detectMultipart($method)) { - return; - } - - // only check specific parameters - $possible_files = array( - // Tweets - 'statuses/update_with_media' => 'media[]', - // Accounts - 'account/update_profile_background_image' => 'image', - 'account/update_profile_image' => 'image', - 'account/update_profile_banner' => 'banner' - ); - // method might have files? - if (! in_array($method, array_keys($possible_files))) { - return; - } - - $possible_files = explode(' ', $possible_files[$method]); - - $multipart_border = '--------------------' . $this->_nonce(); - $multipart_request = ''; - - foreach ($params as $key => $value) { - // is it an array? - if (is_array($value)) { - throw new \Exception('Using URL-encoded parameters is not supported for uploading media.'); - continue; - } - $multipart_request .= - '--' . $multipart_border . "\r\n" - . 'Content-Disposition: form-data; name="' . $key . '"'; - - // check for filenames - if (in_array($key, $possible_files)) { - if (// is it a file, a readable one? - @file_exists($value) - && @is_readable($value) - - // is it a valid image? - && $data = @getimagesize($value) - ) { - if (// is it a supported image format? - in_array($data[2], $this->_supported_media_files) - ) { - // try to read the file - ob_start(); - readfile($value); - $data = ob_get_contents(); - ob_end_clean(); - if (strlen($data) == 0) { - continue; - } - $value = $data; - } - } - - /* - $multipart_request .= - "\r\nContent-Transfer-Encoding: base64"; - $value = base64_encode($value); - */ - } - - $multipart_request .= - "\r\n\r\n" . $value . "\r\n"; - } - $multipart_request .= '--' . $multipart_border . '--'; - - return $multipart_request; - } - - - /** - * Builds the complete API endpoint url - * - * @param string $method The API method to call - * @param string $method_template The API method template to call - * - * @return string The URL to send the request to - */ - protected function _getEndpoint($method, $method_template) - { - if (substr($method, 0, 5) == 'oauth') { - $url = self::$_endpoint_oauth . $method; - } else { - $url = self::$_endpoint . $method . '.json'; - } - return $url; - } - - /** - * Calls the API using cURL - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The templated API method to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return mixed The API reply, encoded in the set return_format - */ - - protected function _callApi($httpmethod, $method, $method_template, $params = array(), $multipart = false, $app_only_auth = false) - { - if (! function_exists('curl_init')) { - throw new \Exception('To make API requests, the PHP curl extension must be available.'); - } - $url = $this->_getEndpoint($method, $method_template); - $ch = false; - if ($httpmethod == 'GET') { - $url_with_params = $url; - if (count($params) > 0) { - $url_with_params .= '?' . http_build_query($params); - } - $authorization = $this->_sign($httpmethod, $url, $params); - $ch = curl_init($url_with_params); - } else { - if ($multipart) { - $authorization = $this->_sign($httpmethod, $url, array()); - $params = $this->_buildMultipart($method_template, $params); - } else { - $authorization = $this->_sign($httpmethod, $url, $params); - $params = http_build_query($params); - } - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, $params); - } - if ($app_only_auth) { - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To make an app-only auth API request, the consumer key must be set.'); - } - // automatically fetch bearer token, if necessary - if (self::$_oauth_bearer_token == null) { - $this->oauth2_token(); - } - $authorization = 'Authorization: Bearer ' . self::$_oauth_bearer_token; - } - $request_headers = array(); - if (isset($authorization)) { - $request_headers[] = $authorization; - $request_headers[] = 'Expect:'; - } - if ($multipart) { - $first_newline = strpos($params, "\r\n"); - $multipart_boundary = substr($params, 2, $first_newline - 2); - $request_headers[] = 'Content-Length: ' . strlen($params); - $request_headers[] = 'Content-Type: multipart/form-data; boundary=' - . $multipart_boundary; - } - - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); - curl_setopt($ch, CURLOPT_HEADER, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem'); - - $reply = curl_exec($ch); - - // certificate validation results - $validation_result = curl_errno($ch); - if (in_array( - $validation_result, - array( - CURLE_SSL_CERTPROBLEM, - CURLE_SSL_CACERT, - CURLE_SSL_CACERT_BADFILE, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR - ) - ) - ) { - throw new \Exception('Error ' . $validation_result . ' while validating the Twitter API certificate.'); - } - - $httpstatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $reply = $this->_parseApiReply($method_template, $reply); - if ($this->_return_format == CODEBIRD_RETURNFORMAT_OBJECT) { - $reply->httpstatus = $httpstatus; - } elseif ($this->_return_format == CODEBIRD_RETURNFORMAT_ARRAY) { - $reply['httpstatus'] = $httpstatus; - } - return $reply; - } - - /** - * Parses the API reply to encode it in the set return_format - * - * @param string $method The method that has been called - * @param string $reply The actual reply, JSON-encoded or URL-encoded - * - * @return array|object The parsed reply - */ - protected function _parseApiReply($method, $reply) - { - // split headers and body - $headers = array(); - $reply = explode("\r\n\r\n", $reply, 4); - - // check if using proxy - if (substr($reply[0], 0, 35) === 'HTTP/1.1 200 Connection Established') { - array_shift($reply); - } elseif (count($reply) > 2) { - $headers = array_shift($reply); - $reply = array( - $headers, - implode("\r\n", $reply) - ); - } - - $headers_array = explode("\r\n", $reply[0]); - foreach ($headers_array as $header) { - $header_array = explode(': ', $header, 2); - $key = $header_array[0]; - $value = ''; - if (count($header_array) > 1) { - $value = $header_array[1]; - } - $headers[$key] = $value; - } - if (count($reply) > 1) { - $reply = $reply[1]; - } else { - $reply = ''; - } - - $need_array = $this->_return_format == CODEBIRD_RETURNFORMAT_ARRAY; - if ($reply == '[]') { - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return array(); - case CODEBIRD_RETURNFORMAT_JSON: - return '{}'; - case CODEBIRD_RETURNFORMAT_OBJECT: - return new \stdClass; - } - } - $parsed = array(); - if (! $parsed = json_decode($reply, $need_array)) { - if ($reply) { - if (stripos($reply, '<' . '?xml version="1.0" encoding="UTF-8"?' . '>') === 0) { - // we received XML... - // since this only happens for errors, - // don't perform a full decoding - preg_match('/(.*)<\/request>/', $reply, $request); - preg_match('/(.*)<\/error>/', $reply, $error); - $parsed['request'] = htmlspecialchars_decode($request[1]); - $parsed['error'] = htmlspecialchars_decode($error[1]); - } else { - // assume query format - $reply = explode('&', $reply); - foreach ($reply as $element) { - if (stristr($element, '=')) { - list($key, $value) = explode('=', $element); - $parsed[$key] = $value; - } else { - $parsed['message'] = $element; - } - } - } - } - $reply = json_encode($parsed); - } - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return $parsed; - case CODEBIRD_RETURNFORMAT_JSON: - return $reply; - case CODEBIRD_RETURNFORMAT_OBJECT: - return (object) $parsed; - } - return $parsed; - } -} - -?> diff --git a/twitter/twitter.php b/twitter/twitter.php index 5168aa0e..fabdc6bd 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -59,6 +59,7 @@ * Requirements: PHP5, curl [Slinky library] */ +use Abraham\TwitterOAuth\TwitterOAuth; use Friendica\App; use Friendica\Content\OEmbed; use Friendica\Content\Text\BBCode; @@ -76,7 +77,12 @@ use Friendica\Model\User; use Friendica\Object\Image; use Friendica\Util\Network; +require_once 'boot.php'; +require_once 'include/dba.php'; require_once 'include/enotify.php'; +require_once 'include/text.php'; + +require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes @@ -150,16 +156,8 @@ function twitter_follow(App $a, &$contact) $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); - require_once "addon/twitter/codebird.php"; - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - $parameters = []; - $parameters["screen_name"] = $nickname; - - $user = $cb->friendships_create($parameters); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $connection->post('friendships/create', ['screen_name' => $nickname]); twitter_fetchuser($a, $uid, $nickname); @@ -217,7 +215,6 @@ function twitter_settings_post(App $a, $post) if (isset($_POST['twitter-pin'])) { // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen logger('got a Twitter PIN'); - require_once 'library/twitteroauth.php'; $ckey = Config::get('twitter', 'consumerkey'); $csecret = Config::get('twitter', 'consumersecret'); // the token and secret for which the PIN was generated were hidden in the settings @@ -298,7 +295,6 @@ function twitter_settings(App $a, &$s) * which the user can request a PIN to connect the account to a * account at Twitter. */ - require_once 'library/twitteroauth.php'; $connection = new TwitterOAuth($ckey, $csecret); $request_token = $connection->getRequestToken(); $token = $request_token['oauth_token']; @@ -319,7 +315,6 @@ function twitter_settings(App $a, &$s) * we have an OAuth key / secret pair for the user * so let's give a chance to disable the postings to Twitter */ - require_once 'library/twitteroauth.php'; $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $details = $connection->get('account/verify_credentials'); @@ -398,11 +393,7 @@ function twitter_action(App $a, $uid, $pid, $action) $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); - require_once "addon/twitter/codebird.php"; - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $post = ['id' => $pid]; @@ -410,13 +401,13 @@ function twitter_action(App $a, $uid, $pid, $action) switch ($action) { case "delete": - // To-Do: $result = $cb->statuses_destroy($post); + // To-Do: $result = $connection->post('statuses/destroy', $post); break; case "like": - $result = $cb->favorites_create($post); + $result = $connection->post('favorites/create', $post); break; case "unlike": - $result = $cb->favorites_destroy($post); + $result = $connection->post('favorites/destroy', $post); break; } logger("twitter_action '" . $action . "' send, result: " . print_r($result, true), LOGGER_DEBUG); @@ -520,8 +511,6 @@ function twitter_post_hook(App $a, &$b) return; } - require_once 'library/twitteroauth.php'; - require_once 'include/bbcode.php'; $tweet = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $max_char = 280; @@ -544,29 +533,16 @@ function twitter_post_hook(App $a, &$b) // and now tweet it :-) if (strlen($msg) && ($image != "")) { - $img_str = Network::fetchUrl($image); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $media = $connection->upload('media/upload', ['media' => $image]); - $tempfile = tempnam(get_temppath(), "cache"); - file_put_contents($tempfile, $img_str); - - // Twitter had changed something so that the old library doesn't work anymore - // so we are using a new library for twitter - // To-Do: - // Switching completely to this library with all functions - require_once "addon/twitter/codebird.php"; - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - $post = ['status' => $msg, 'media[]' => $tempfile]; + $post = ['status' => $msg, 'media_ids' => $media->media_id_string]; if ($iscomment) { $post["in_reply_to_status_id"] = substr($orig_post["uri"], 9); } - $result = $cb->statuses_updateWithMedia($post); - unlink($tempfile); + $result = $connection->post('statuses/update', $post); logger('twitter_post_with_media send, result: ' . print_r($result, true), LOGGER_DEBUG); @@ -627,7 +603,7 @@ function twitter_post_hook(App $a, &$b) } $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $post]); - + Queue::add($a->contact, NETWORK_TWITTER, $s); notice(L10n::t('Twitter post failed. Queued for retry.') . EOL); } elseif ($iscomment) { @@ -870,7 +846,6 @@ function twitter_fetchtimeline(App $a, $uid) require_once 'include/items.php'; require_once 'mod/share.php'; - require_once 'library/twitteroauth.php'; $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended"]; @@ -953,15 +928,8 @@ function twitter_queue_hook(App $a, &$b) $z = unserialize($x['content']); - require_once "addon/twitter/codebird.php"; - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - if ($z['url'] == "statuses/update") { - $result = $cb->statuses_update($z['post']); - } + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $result = $connection->post($z['url'], $z['post']); logger('twitter_queue: post result: ' . print_r($result, true), LOGGER_DEBUG); @@ -1132,12 +1100,6 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); - require_once "addon/twitter/codebird.php"; - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1", intval($uid)); @@ -1158,7 +1120,8 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") } // Fetching user data - $user = $cb->users_show($parameters); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $user = $connection->get('users/show', $parameters); if (!is_object($user)) { return; @@ -1686,7 +1649,6 @@ function twitter_fetchhometimeline(App $a, $uid) $application_name = $a->get_hostname(); } - require_once 'library/twitteroauth.php'; require_once 'include/items.php'; $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); @@ -1888,8 +1850,6 @@ function twitter_fetch_own_contact(App $a, $uid) $contact_id = 0; if ($own_id == "") { - require_once 'library/twitteroauth.php'; - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); // Fetching user data @@ -1956,7 +1916,6 @@ function twitter_is_retweet(App $a, $uid, $body) $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); - require_once 'library/twitteroauth.php'; $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $result = $connection->post('statuses/retweet/' . $id); From c0836419b794b369060fccfa6a029b3075aa76ae Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 27 Jan 2018 23:20:09 -0500 Subject: [PATCH 024/116] Update Twitter addon documentation, file comment - Fix formatting --- twitter/LICENSE | 2 +- twitter/README.md | 38 +++++----------- twitter/twitter.php | 95 +++++++++++++++++++++++++--------------- twitter/twitter_sync.php | 7 +-- 4 files changed, 75 insertions(+), 67 deletions(-) diff --git a/twitter/LICENSE b/twitter/LICENSE index 062cc888..496cce20 100644 --- a/twitter/LICENSE +++ b/twitter/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel +Copyright (c) 2011-2018 Tobias Diekershoff, Michael Vogel, Hypolite Petovan All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/twitter/README.md b/twitter/README.md index 7936f894..5a488690 100644 --- a/twitter/README.md +++ b/twitter/README.md @@ -1,39 +1,23 @@ Twitter Addon ============== -Main authors Tobias Diekershoff and Michael Vogel. +Main authors Tobias Diekershoff, Michael Vogel and Hypolite Petovan. -With this addon to friendica you can give your users the possibility to post their *public* messages to Twitter and -to import their timeline. The messages will be strapped their rich context and shortened to 280 characters length if -necessary. +This bi-directional connector addon allows each user to crosspost their Friendica public posts to Twitter, import their +Twitter timeline, interact with tweets from Friendica, and crosspost to Friendica their public tweets. -The addon can also mirror a users Tweets into the ~friendica wall. +## Installation -Installation ------------- - -To use this addon you have to register an [application](https://apps.twitter.com/) for your friendica instance on Twitter. Please leave the field "Callback URL" empty. +To use this addon you have to register an [application](https://apps.twitter.com/) for your Friendica instance on Twitter. +Please leave the field "Callback URL" empty. After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter). -Where to find -------------- +## License -In the friendica addon git repository /twitter/, this directory contains -all required PHP files (including the [Twitter OAuth library][1] by Abraham -Williams, MIT licensed and the [Slinky library][2] by Beau Lebens, BSD license), -a CSS file for styling of the user configuration and an image to _Sign in with -Twitter_. - -[1]: https://github.com/abraham/twitteroauth -[2]: http://dentedreality.com.au/projects/slinky/ - -License -======= - -The _StatusNet Connector_ is licensed under the [3-clause BSD license][3] see the -LICENSE file in the addons directory. - -[3]: http://opensource.org/licenses/BSD-3-Clause +The _Twitter Connector_ is licensed under the [3-clause BSD license][2] see the LICENSE file in the addons directory. +The _Twitter Connector_ uses the [Twitter OAuth library][2] by Abraham Williams, MIT licensed +[1]: http://opensource.org/licenses/BSD-3-Clause +[2]: https://github.com/abraham/twitteroauth diff --git a/twitter/twitter.php b/twitter/twitter.php index fabdc6bd..38b4728a 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -2,11 +2,12 @@ /** * Name: Twitter Connector * Description: Bidirectional (posting, relaying and reading) connector for Twitter. - * Version: 1.0.4 + * Version: 1.1.0 * Author: Tobias Diekershoff * Author: Michael Vogel + * Maintainer: Hypolite Petovan * - * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel + * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel, Hypolite Petovan * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,7 +57,7 @@ * setting. After this, your user can configure their Twitter account settings * from "Settings -> Addon Settings". * - * Requirements: PHP5, curl [Slinky library] + * Requirements: PHP5, curl */ use Abraham\TwitterOAuth\TwitterOAuth; @@ -151,9 +152,9 @@ function twitter_follow(App $a, &$contact) $uid = $a->user["uid"]; - $ckey = Config::get('twitter', 'consumerkey'); + $ckey = Config::get('twitter', 'consumerkey'); $csecret = Config::get('twitter', 'consumersecret'); - $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); + $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); @@ -257,10 +258,10 @@ function twitter_settings(App $a, &$s) * 2) If no OAuthtoken & stuff is present, generate button to get some * 3) Checkbox for "Send public notices (280 chars only) */ - $ckey = Config::get('twitter', 'consumerkey' ); - $csecret = Config::get('twitter', 'consumersecret' ); - $otoken = PConfig::get(local_user(), 'twitter', 'oauthtoken' ); - $osecret = PConfig::get(local_user(), 'twitter', 'oauthsecret' ); + $ckey = Config::get('twitter', 'consumerkey'); + $csecret = Config::get('twitter', 'consumersecret'); + $otoken = PConfig::get(local_user(), 'twitter', 'oauthtoken'); + $osecret = PConfig::get(local_user(), 'twitter', 'oauthsecret'); $enabled = intval(PConfig::get(local_user(), 'twitter', 'post')); $defenabled = intval(PConfig::get(local_user(), 'twitter', 'post_by_default')); @@ -425,7 +426,10 @@ function twitter_post_hook(App $a, &$b) logger("twitter_post_hook: parameter " . print_r($b, true), LOGGER_DATA); // Looking if its a reply to a twitter post - if ((substr($b["parent-uri"], 0, 9) != "twitter::") && (substr($b["extid"], 0, 9) != "twitter::") && (substr($b["thr-parent"], 0, 9) != "twitter::")) { + if ((substr($b["parent-uri"], 0, 9) != "twitter::") + && (substr($b["extid"], 0, 9) != "twitter::") + && (substr($b["thr-parent"], 0, 9) != "twitter::")) + { logger("twitter_post_hook: no twitter post " . $b["parent"]); return; } @@ -474,10 +478,12 @@ function twitter_post_hook(App $a, &$b) if ($b['verb'] == ACTIVITY_LIKE) { logger("twitter_post_hook: parameter 2 " . substr($b["thr-parent"], 9), LOGGER_DEBUG); - if ($b['deleted']) + if ($b['deleted']) { twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "unlike"); - else + } else { twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "like"); + } + return; } @@ -619,8 +625,8 @@ function twitter_post_hook(App $a, &$b) function twitter_addon_admin_post(App $a) { - $consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : ''; - $consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : ''; + $consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : ''; + $consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : ''; Config::set('twitter', 'consumerkey', $consumerkey); Config::set('twitter', 'consumersecret', $consumersecret); info(L10n::t('Settings updated.') . EOL); @@ -665,8 +671,9 @@ function twitter_cron(App $a, $b) } $abandon_days = intval(Config::get('system', 'account_abandon_days')); - if ($abandon_days < 1) + if ($abandon_days < 1) { $abandon_days = 0; + } $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); @@ -803,7 +810,14 @@ function twitter_do_mirrorpost(App $a, $uid, $post) // We don't support nested shares, so we mustn't show quotes as shares on retweets $item = twitter_createpost($a, $uid, $post->retweeted_status, ['id' => 0], false, false, true); - $datarray['body'] = "\n" . share_header($item['author-name'], $item['author-link'], $item['author-avatar'], "", $item['created'], $item['plink']); + $datarray['body'] = "\n" . share_header( + $item['author-name'], + $item['author-link'], + $item['author-avatar'], + "", + $item['created'], + $item['plink'] + ); $datarray['body'] .= $item['body'] . '[/share]'; } else { @@ -977,7 +991,8 @@ function twitter_fetch_contact($uid, $contact, $create_user) "addr" => $contact->screen_name . "@twitter.com", "generation" => 2]); $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1", - intval($uid), dbesc("twitter::" . $contact->id_str)); + intval($uid), + dbesc("twitter::" . $contact->id_str)); if (!count($r) && !$create_user) { return 0; @@ -1095,9 +1110,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") { - $ckey = Config::get('twitter', 'consumerkey'); + $ckey = Config::get('twitter', 'consumerkey'); $csecret = Config::get('twitter', 'consumersecret'); - $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); + $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1", @@ -1357,8 +1372,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis // Don't import our own comments $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", - dbesc($postarray['uri']), - intval($uid) + dbesc($postarray['uri']), + intval($uid) ); if (count($r)) { @@ -1372,8 +1387,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $parent = "twitter::" . $post->in_reply_to_status_id_str; $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($parent), - intval($uid) + dbesc($parent), + intval($uid) ); if (count($r)) { $postarray['thr-parent'] = $r[0]["uri"]; @@ -1382,8 +1397,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $postarray['object-type'] = ACTIVITY_OBJ_COMMENT; } else { $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", - dbesc($parent), - intval($uid) + dbesc($parent), + intval($uid) ); if (count($r)) { $postarray['thr-parent'] = $r[0]['uri']; @@ -1504,7 +1519,14 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $postarray['body'] = $statustext; - $postarray['body'] .= "\n" . share_header($quoted['author-name'], $quoted['author-link'], $quoted['author-avatar'], "", $quoted['created'], $quoted['plink']); + $postarray['body'] .= "\n" . share_header( + $quoted['author-name'], + $quoted['author-link'], + $quoted['author-avatar'], + "", + $quoted['created'], + $quoted['plink'] + ); $postarray['body'] .= $quoted['body'] . '[/share]'; } @@ -1516,7 +1538,7 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray) { /// TODO: this whole function doesn't seem to work. Needs complete check $user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", - intval($uid) + intval($uid) ); if (!count($user)) { @@ -1529,8 +1551,8 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray) } $own_user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1", - intval($uid), - dbesc("twitter::".$own_id) + intval($uid), + dbesc("twitter::".$own_id) ); if (!count($own_user)) { @@ -1543,8 +1565,8 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray) } $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0", - dbesc($postarray['parent-uri']), - intval($uid) + dbesc($postarray['parent-uri']), + intval($uid) ); if (count($myconv)) { @@ -1598,8 +1620,8 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_ } $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc("twitter::".$post->id_str), - intval($uid) + dbesc("twitter::".$post->id_str), + intval($uid) ); if (count($r)) { @@ -1617,8 +1639,9 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_ foreach ($posts as $post) { $postarray = twitter_createpost($a, $uid, $post, $self, false, false, false); - if (trim($postarray['body']) == "") + if (trim($postarray['body']) == "") { continue; + } $item = item_store($postarray); $postarray["id"] = $item; @@ -1810,8 +1833,9 @@ function twitter_fetchhometimeline(App $a, $uid) $item = $r[0]['id']; $parent_id = $r[0]['parent']; } - } else + } else { $parent_id = $postarray['parent']; + } if (($item != 0) && !function_exists("check_item_notification")) { require_once 'include/enotify.php'; @@ -1917,7 +1941,6 @@ function twitter_is_retweet(App $a, $uid, $body) $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - $result = $connection->post('statuses/retweet/' . $id); logger('twitter_is_retweet: result ' . print_r($result, true), LOGGER_DEBUG); diff --git a/twitter/twitter_sync.php b/twitter/twitter_sync.php index 5d6e8b2f..7ff3dbb3 100644 --- a/twitter/twitter_sync.php +++ b/twitter/twitter_sync.php @@ -1,10 +1,12 @@ From 229b21d7b22c82efc9baaefa8b13644b3ddda51d Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 28 Jan 2018 11:19:38 +0000 Subject: [PATCH 025/116] New methods in item class --- pumpio/pumpio.php | 6 +++--- statusnet/statusnet.php | 11 ++++++----- twitter/twitter.php | 13 +++++++------ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 6a7429ff..d0fe09d5 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -974,7 +974,7 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru $likedata['object'] = '' . ACTIVITY_OBJ_NOTE . '1' . '' . $orig_post['uri'] . '' . xmlify('') . '' . $orig_post['title'] . '' . $orig_post['body'] . ''; - $ret = item_store($likedata); + $ret = Item::insert($likedata); logger("pumpio_dolike: ".$ret." User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']); } @@ -1250,7 +1250,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if (trim($postarray['body']) == "") return false; - $top_item = item_store($postarray); + $top_item = Item::insert($postarray); $postarray["id"] = $top_item; if (($top_item == 0) && ($post->verb == "update")) { @@ -1306,7 +1306,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet 'to_email' => $user[0]['email'], 'uid' => $user[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)), + 'link' => $a->get_baseurl().'/display/'.urlencode(Item::getGuidById($top_item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index eae1c1e4..7308f223 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -55,6 +55,7 @@ use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Model\GContact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\User; use Friendica\Util\Network; @@ -1371,7 +1372,7 @@ function statusnet_checknotification(App $a, $uid, $own_url, $top_item, $postarr 'to_email' => $user[0]['email'], 'uid' => $user[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($top_item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($top_item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1495,7 +1496,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted home timeline item ' . $item); @@ -1550,7 +1551,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted mention timeline item ' . $item); @@ -1579,7 +1580,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) 'to_email' => $u[0]['email'], 'uid' => $u[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1620,7 +1621,7 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_complete_conversation: User ' . $self["nick"] . ' posted home timeline item ' . $item); diff --git a/twitter/twitter.php b/twitter/twitter.php index 5168aa0e..d625dfa5 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -70,6 +70,7 @@ use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Model\GContact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\Queue; use Friendica\Model\User; @@ -755,7 +756,7 @@ function twitter_expire(App $a, $b) if (count($r)) { foreach ($r as $rr) { logger('twitter_expire: user ' . $rr['uid']); - item_expire($rr['uid'], $days, NETWORK_TWITTER, true); + Item::expire($rr['uid'], $days, NETWORK_TWITTER, true); } } @@ -1603,7 +1604,7 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray) 'to_email' => $user[0]['email'], 'uid' => $user[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($top_item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($top_item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1657,7 +1658,7 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_ if (trim($postarray['body']) == "") continue; - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('twitter_fetchparentpost: User ' . $self["nick"] . ' posted parent timeline item ' . $item); @@ -1774,7 +1775,7 @@ function twitter_fetchhometimeline(App $a, $uid) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('twitter_fetchhometimeline: User ' . $self["nick"] . ' posted home timeline item ' . $item); @@ -1826,7 +1827,7 @@ function twitter_fetchhometimeline(App $a, $uid) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; if ($item && function_exists("check_item_notification")) { @@ -1861,7 +1862,7 @@ function twitter_fetchhometimeline(App $a, $uid) 'to_email' => $u[0]['email'], 'uid' => $u[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], From 25f9eec89c517dead01935299dd1903ba12ab795 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 28 Jan 2018 14:01:09 +0000 Subject: [PATCH 026/116] "use" was missing --- wppost/wppost.php | 1 + 1 file changed, 1 insertion(+) diff --git a/wppost/wppost.php b/wppost/wppost.php index 85b73d3f..e3127e8e 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -9,6 +9,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\Network; function wppost_install() { Addon::registerHook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); From 01738518a25392aefea8586463121024ae3a1a4c Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 28 Jan 2018 11:41:58 -0500 Subject: [PATCH 027/116] Fix wrong variable name in twitter addon --- twitter/twitter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 38b4728a..50239b8b 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -517,7 +517,7 @@ function twitter_post_hook(App $a, &$b) return; } - $tweet = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $max_char = 280; $msgarr = BBCode::toPlaintext($b, $max_char, true, 8); @@ -593,7 +593,7 @@ function twitter_post_hook(App $a, &$b) $post["in_reply_to_status_id"] = substr($orig_post["uri"], 9); } - $result = $tweet->post($url, $post); + $result = $connection->post($url, $post); logger('twitter_post send, result: ' . print_r($result, true), LOGGER_DEBUG); if ($result->source) { From d18bb44f8a58b0aa8ecd82eab25caca3f9f574b6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 28 Jan 2018 12:17:19 -0500 Subject: [PATCH 028/116] Add explicit dependencies to twitter addon --- .gitignore | 3 - composer.json | 10 - twitter/composer.json | 28 + composer.lock => twitter/composer.lock | 0 twitter/twitter.php | 2 +- .../vendor/abraham/twitteroauth/.gitignore | 4 + .../vendor/abraham/twitteroauth/.travis.yml | 13 + .../abraham/twitteroauth/CODE_OF_CONDUCT.md | 46 + .../vendor/abraham/twitteroauth/LICENSE.md | 22 + twitter/vendor/abraham/twitteroauth/README.md | 10 + .../vendor/abraham/twitteroauth/autoload.php | 36 + .../vendor/abraham/twitteroauth/composer.json | 34 + twitter/vendor/abraham/twitteroauth/phpmd.xml | 15 + .../vendor/abraham/twitteroauth/phpunit.xml | 11 + .../abraham/twitteroauth/src/Config.php | 90 + .../abraham/twitteroauth/src/Consumer.php | 36 + .../abraham/twitteroauth/src/HmacSha1.php | 39 + .../abraham/twitteroauth/src/Request.php | 254 ++ .../abraham/twitteroauth/src/Response.php | 107 + .../twitteroauth/src/SignatureMethod.php | 66 + .../vendor/abraham/twitteroauth/src/Token.php | 38 + .../abraham/twitteroauth/src/TwitterOAuth.php | 508 +++ .../src/TwitterOAuthException.php | 10 + .../vendor/abraham/twitteroauth/src/Util.php | 115 + .../twitteroauth/src/Util/JsonDecoder.php | 26 + .../abraham/twitteroauth/src/cacert.pem | 4043 +++++++++++++++++ .../tests/AbstractSignatureMethodTest.php | 51 + .../twitteroauth/tests/ConsumerTest.php | 16 + .../twitteroauth/tests/HmacSha1Test.php | 35 + .../abraham/twitteroauth/tests/TokenTest.php | 26 + .../twitteroauth/tests/TwitterOAuthTest.php | 256 ++ .../tests/Util/JsonDecoderTest.php | 50 + .../abraham/twitteroauth/tests/bootstrap.php | 12 + .../abraham/twitteroauth/tests/kitten.jpg | Bin 0 -> 215694 bytes .../abraham/twitteroauth/tests/sample_env | 13 + .../abraham/twitteroauth/tests/video.mp4 | Bin 0 -> 383631 bytes twitter/vendor/autoload.php | 7 + twitter/vendor/composer/ClassLoader.php | 445 ++ twitter/vendor/composer/LICENSE | 21 + twitter/vendor/composer/autoload_classmap.php | 9 + .../vendor/composer/autoload_namespaces.php | 9 + twitter/vendor/composer/autoload_psr4.php | 10 + twitter/vendor/composer/autoload_real.php | 52 + twitter/vendor/composer/autoload_static.php | 31 + twitter/vendor/composer/installed.json | 58 + 45 files changed, 6653 insertions(+), 14 deletions(-) delete mode 100644 composer.json create mode 100644 twitter/composer.json rename composer.lock => twitter/composer.lock (100%) create mode 100644 twitter/vendor/abraham/twitteroauth/.gitignore create mode 100644 twitter/vendor/abraham/twitteroauth/.travis.yml create mode 100644 twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md create mode 100644 twitter/vendor/abraham/twitteroauth/LICENSE.md create mode 100644 twitter/vendor/abraham/twitteroauth/README.md create mode 100644 twitter/vendor/abraham/twitteroauth/autoload.php create mode 100644 twitter/vendor/abraham/twitteroauth/composer.json create mode 100644 twitter/vendor/abraham/twitteroauth/phpmd.xml create mode 100644 twitter/vendor/abraham/twitteroauth/phpunit.xml create mode 100644 twitter/vendor/abraham/twitteroauth/src/Config.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Consumer.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/HmacSha1.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Request.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Response.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Token.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Util.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php create mode 100644 twitter/vendor/abraham/twitteroauth/src/cacert.pem create mode 100644 twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/TokenTest.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/bootstrap.php create mode 100644 twitter/vendor/abraham/twitteroauth/tests/kitten.jpg create mode 100644 twitter/vendor/abraham/twitteroauth/tests/sample_env create mode 100644 twitter/vendor/abraham/twitteroauth/tests/video.mp4 create mode 100644 twitter/vendor/autoload.php create mode 100644 twitter/vendor/composer/ClassLoader.php create mode 100644 twitter/vendor/composer/LICENSE create mode 100644 twitter/vendor/composer/autoload_classmap.php create mode 100644 twitter/vendor/composer/autoload_namespaces.php create mode 100644 twitter/vendor/composer/autoload_psr4.php create mode 100644 twitter/vendor/composer/autoload_real.php create mode 100644 twitter/vendor/composer/autoload_static.php create mode 100644 twitter/vendor/composer/installed.json diff --git a/.gitignore b/.gitignore index d4c89f06..36ccc906 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,3 @@ report/ #ignore smarty cache /view/smarty3/compiled/ - -#ignore Composer folder -vendor/ diff --git a/composer.json b/composer.json deleted file mode 100644 index 9dcfcfba..00000000 --- a/composer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "friendica/friendica-addons", - "description": "Addons library for Friendica", - "type": "library", - "require": { - "abraham/twitteroauth": "^0.7.4" - }, - "license": "3-clause BSD license", - "minimum-stability": "stable" -} diff --git a/twitter/composer.json b/twitter/composer.json new file mode 100644 index 00000000..efe4ffa6 --- /dev/null +++ b/twitter/composer.json @@ -0,0 +1,28 @@ +{ + "name": "friendica-addons/twitter", + "description": "Twitter Connector addon for Friendica", + "type": "friendica-addon", + "authors": [ + { + "name": "Tobias Diekershoff", + "homepage": "https://f.diekershoff.de/profile/tobias", + "role": "Developer" + }, + { + "name": "Michael Vogel", + "homepage": "https://pirati.ca/profile/heluecht", + "role": "Developer" + }, + { + "name": "Hypolite Petovan", + "email": "mrpetovan@gmail.com", + "homepage": "https://friendica.mrpetovan.com/profile/hypolite", + "role": "Developer" + } + ], + "require": { + "abraham/twitteroauth": "^0.7.4" + }, + "license": "3-clause BSD license", + "minimum-stability": "stable" +} diff --git a/composer.lock b/twitter/composer.lock similarity index 100% rename from composer.lock rename to twitter/composer.lock diff --git a/twitter/twitter.php b/twitter/twitter.php index 50239b8b..5440f524 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -83,7 +83,7 @@ require_once 'include/dba.php'; require_once 'include/enotify.php'; require_once 'include/text.php'; -require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; +require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes diff --git a/twitter/vendor/abraham/twitteroauth/.gitignore b/twitter/vendor/abraham/twitteroauth/.gitignore new file mode 100644 index 00000000..8213dad6 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +composer.lock +vendor +env diff --git a/twitter/vendor/abraham/twitteroauth/.travis.yml b/twitter/vendor/abraham/twitteroauth/.travis.yml new file mode 100644 index 00000000..f55a2b8c --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/.travis.yml @@ -0,0 +1,13 @@ +language: php +dist: trusty +php: + - '5.6' + - '7.0' + - '7.1' + - hhvm +sudo: false +before_script: + - composer self-update + - composer install --prefer-source --no-interaction +script: + - vendor/bin/phpunit diff --git a/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md b/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..dae99ffc --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at abraham@abrah.am. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/twitter/vendor/abraham/twitteroauth/LICENSE.md b/twitter/vendor/abraham/twitteroauth/LICENSE.md new file mode 100644 index 00000000..64e83a15 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/LICENSE.md @@ -0,0 +1,22 @@ +Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@abrah.am + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/twitter/vendor/abraham/twitteroauth/README.md b/twitter/vendor/abraham/twitteroauth/README.md new file mode 100644 index 00000000..cc403416 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/README.md @@ -0,0 +1,10 @@ +TwitterOAuth [![Build Status](https://img.shields.io/travis/abraham/twitteroauth.svg)](https://travis-ci.org/abraham/twitteroauth) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/abraham/twitteroauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/abraham/twitteroauth/?branch=master) [![Issues Count](https://img.shields.io/github/issues/abraham/twitteroauth.svg)](https://github.com/abraham/twitteroauth/issues) [![Latest Version](https://img.shields.io/packagist/v/abraham/twitteroauth.svg)](https://packagist.org/packages/abraham/twitteroauth) +------------ + +

      The most popular PHP library for Twitter's OAuth REST API.

      + +See documentation at https://twitteroauth.com. + +PHP versions [listed](https://secure.php.net/supported-versions.php) as "active support" or "security fixes only" are supported. + +Twitter bird diff --git a/twitter/vendor/abraham/twitteroauth/autoload.php b/twitter/vendor/abraham/twitteroauth/autoload.php new file mode 100644 index 00000000..cff03e8a --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/autoload.php @@ -0,0 +1,36 @@ + + + Keep TwitterOAuth source code clean. + + + + + + + + diff --git a/twitter/vendor/abraham/twitteroauth/phpunit.xml b/twitter/vendor/abraham/twitteroauth/phpunit.xml new file mode 100644 index 00000000..71cc3e1a --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/phpunit.xml @@ -0,0 +1,11 @@ + + + + + + ./tests/ + + + diff --git a/twitter/vendor/abraham/twitteroauth/src/Config.php b/twitter/vendor/abraham/twitteroauth/src/Config.php new file mode 100644 index 00000000..122016c3 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Config.php @@ -0,0 +1,90 @@ + + */ +class Config +{ + /** @var int How long to wait for a response from the API */ + protected $timeout = 5; + /** @var int how long to wait while connecting to the API */ + protected $connectionTimeout = 5; + /** + * Decode JSON Response as associative Array + * + * @see http://php.net/manual/en/function.json-decode.php + * + * @var bool + */ + protected $decodeJsonAsArray = false; + /** @var string User-Agent header */ + protected $userAgent = 'TwitterOAuth (+https://twitteroauth.com)'; + /** @var array Store proxy connection details */ + protected $proxy = []; + + /** @var bool Whether to encode the curl requests with gzip or not */ + protected $gzipEncoding = true; + + /** @var integer Size for Chunked Uploads */ + protected $chunkSize = 250000; // 0.25 MegaByte + + /** + * Set the connection and response timeouts. + * + * @param int $connectionTimeout + * @param int $timeout + */ + public function setTimeouts($connectionTimeout, $timeout) + { + $this->connectionTimeout = (int)$connectionTimeout; + $this->timeout = (int)$timeout; + } + + /** + * @param bool $value + */ + public function setDecodeJsonAsArray($value) + { + $this->decodeJsonAsArray = (bool)$value; + } + + /** + * @param string $userAgent + */ + public function setUserAgent($userAgent) + { + $this->userAgent = (string)$userAgent; + } + + /** + * @param array $proxy + */ + public function setProxy(array $proxy) + { + $this->proxy = $proxy; + } + + /** + * Whether to encode the curl requests with gzip or not. + * + * @param boolean $gzipEncoding + */ + public function setGzipEncoding($gzipEncoding) + { + $this->gzipEncoding = (bool)$gzipEncoding; + } + + /** + * Set the size of each part of file for chunked media upload. + * + * @param int $value + */ + public function setChunkSize($value) + { + $this->chunkSize = (int)$value; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Consumer.php b/twitter/vendor/abraham/twitteroauth/src/Consumer.php new file mode 100644 index 00000000..ceaf1ef5 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Consumer.php @@ -0,0 +1,36 @@ +key = $key; + $this->secret = $secret; + $this->callbackUrl = $callbackUrl; + } + + /** + * @return string + */ + public function __toString() + { + return "Consumer[key=$this->key,secret=$this->secret]"; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php b/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php new file mode 100644 index 00000000..d8cdab8f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php @@ -0,0 +1,39 @@ +getSignatureBaseString(); + + $parts = [$consumer->secret, null !== $token ? $token->secret : ""]; + + $parts = Util::urlencodeRfc3986($parts); + $key = implode('&', $parts); + + return base64_encode(hash_hmac('sha1', $signatureBase, $key, true)); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Request.php b/twitter/vendor/abraham/twitteroauth/src/Request.php new file mode 100644 index 00000000..a60c23db --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Request.php @@ -0,0 +1,254 @@ +parameters = $parameters; + $this->httpMethod = $httpMethod; + $this->httpUrl = $httpUrl; + } + + /** + * pretty much a helper function to set up the request + * + * @param Consumer $consumer + * @param Token $token + * @param string $httpMethod + * @param string $httpUrl + * @param array $parameters + * + * @return Request + */ + public static function fromConsumerAndToken( + Consumer $consumer, + Token $token = null, + $httpMethod, + $httpUrl, + array $parameters = [] + ) { + $defaults = [ + "oauth_version" => Request::$version, + "oauth_nonce" => Request::generateNonce(), + "oauth_timestamp" => time(), + "oauth_consumer_key" => $consumer->key + ]; + if (null !== $token) { + $defaults['oauth_token'] = $token->key; + } + + $parameters = array_merge($defaults, $parameters); + + return new Request($httpMethod, $httpUrl, $parameters); + } + + /** + * @param string $name + * @param string $value + */ + public function setParameter($name, $value) + { + $this->parameters[$name] = $value; + } + + /** + * @param $name + * + * @return string|null + */ + public function getParameter($name) + { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + /** + * @return array + */ + public function getParameters() + { + return $this->parameters; + } + + /** + * @param $name + */ + public function removeParameter($name) + { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * + * @return string + */ + public function getSignableParameters() + { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return Util::buildHttpQuery($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + * + * @return string + */ + public function getSignatureBaseString() + { + $parts = [ + $this->getNormalizedHttpMethod(), + $this->getNormalizedHttpUrl(), + $this->getSignableParameters() + ]; + + $parts = Util::urlencodeRfc3986($parts); + + return implode('&', $parts); + } + + /** + * Returns the HTTP Method in uppercase + * + * @return string + */ + public function getNormalizedHttpMethod() + { + return strtoupper($this->httpMethod); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + * + * @return string + */ + public function getNormalizedHttpUrl() + { + $parts = parse_url($this->httpUrl); + + $scheme = $parts['scheme']; + $host = strtolower($parts['host']); + $path = $parts['path']; + + return "$scheme://$host$path"; + } + + /** + * Builds a url usable for a GET request + * + * @return string + */ + public function toUrl() + { + $postData = $this->toPostdata(); + $out = $this->getNormalizedHttpUrl(); + if ($postData) { + $out .= '?' . $postData; + } + return $out; + } + + /** + * Builds the data one would send in a POST request + * + * @return string + */ + public function toPostdata() + { + return Util::buildHttpQuery($this->parameters); + } + + /** + * Builds the Authorization: header + * + * @return string + * @throws TwitterOAuthException + */ + public function toHeader() + { + $first = true; + $out = 'Authorization: OAuth'; + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") { + continue; + } + if (is_array($v)) { + throw new TwitterOAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ', '; + $out .= Util::urlencodeRfc3986($k) . '="' . Util::urlencodeRfc3986($v) . '"'; + $first = false; + } + return $out; + } + + /** + * @return string + */ + public function __toString() + { + return $this->toUrl(); + } + + /** + * @param SignatureMethod $signatureMethod + * @param Consumer $consumer + * @param Token $token + */ + public function signRequest(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) + { + $this->setParameter("oauth_signature_method", $signatureMethod->getName()); + $signature = $this->buildSignature($signatureMethod, $consumer, $token); + $this->setParameter("oauth_signature", $signature); + } + + /** + * @param SignatureMethod $signatureMethod + * @param Consumer $consumer + * @param Token $token + * + * @return string + */ + public function buildSignature(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) + { + return $signatureMethod->buildSignature($this, $consumer, $token); + } + + /** + * @return string + */ + public static function generateNonce() + { + return md5(microtime() . mt_rand()); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Response.php b/twitter/vendor/abraham/twitteroauth/src/Response.php new file mode 100644 index 00000000..982b6ae3 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Response.php @@ -0,0 +1,107 @@ + + */ +class Response +{ + /** @var string|null API path from the most recent request */ + private $apiPath; + /** @var int HTTP status code from the most recent request */ + private $httpCode = 0; + /** @var array HTTP headers from the most recent request */ + private $headers = []; + /** @var array|object Response body from the most recent request */ + private $body = []; + /** @var array HTTP headers from the most recent request that start with X */ + private $xHeaders = []; + + /** + * @param string $apiPath + */ + public function setApiPath($apiPath) + { + $this->apiPath = $apiPath; + } + + /** + * @return string|null + */ + public function getApiPath() + { + return $this->apiPath; + } + + /** + * @param array|object $body + */ + public function setBody($body) + { + $this->body = $body; + } + + /** + * @return array|object|string + */ + public function getBody() + { + return $this->body; + } + + /** + * @param int $httpCode + */ + public function setHttpCode($httpCode) + { + $this->httpCode = $httpCode; + } + + /** + * @return int + */ + public function getHttpCode() + { + return $this->httpCode; + } + + /** + * @param array $headers + */ + public function setHeaders(array $headers) + { + foreach ($headers as $key => $value) { + if (substr($key, 0, 1) == 'x') { + $this->xHeaders[$key] = $value; + } + } + $this->headers = $headers; + } + + /** + * @return array + */ + public function getsHeaders() + { + return $this->headers; + } + + /** + * @param array $xHeaders + */ + public function setXHeaders(array $xHeaders = []) + { + $this->xHeaders = $xHeaders; + } + + /** + * @return array + */ + public function getXHeaders() + { + return $this->xHeaders; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php b/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php new file mode 100644 index 00000000..40fd51e8 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php @@ -0,0 +1,66 @@ +buildSignature($request, $consumer, $token); + + // Check for zero length, although unlikely here + if (strlen($built) == 0 || strlen($signature) == 0) { + return false; + } + + if (strlen($built) != strlen($signature)) { + return false; + } + + // Avoid a timing leak with a (hopefully) time insensitive compare + $result = 0; + for ($i = 0; $i < strlen($signature); $i++) { + $result |= ord($built{$i}) ^ ord($signature{$i}); + } + + return $result == 0; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Token.php b/twitter/vendor/abraham/twitteroauth/src/Token.php new file mode 100644 index 00000000..140c1ecc --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Token.php @@ -0,0 +1,38 @@ +key = $key; + $this->secret = $secret; + } + + /** + * Generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + * + * @return string + */ + public function __toString() + { + return sprintf("oauth_token=%s&oauth_token_secret=%s", + Util::urlencodeRfc3986($this->key), + Util::urlencodeRfc3986($this->secret) + ); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php new file mode 100644 index 00000000..fbb2e418 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php @@ -0,0 +1,508 @@ + + */ +class TwitterOAuth extends Config +{ + const API_VERSION = '1.1'; + const API_HOST = 'https://api.twitter.com'; + const UPLOAD_HOST = 'https://upload.twitter.com'; + + /** @var Response details about the result of the last request */ + private $response; + /** @var string|null Application bearer token */ + private $bearer; + /** @var Consumer Twitter application details */ + private $consumer; + /** @var Token|null User access token details */ + private $token; + /** @var HmacSha1 OAuth 1 signature type used by Twitter */ + private $signatureMethod; + + /** + * Constructor + * + * @param string $consumerKey The Application Consumer Key + * @param string $consumerSecret The Application Consumer Secret + * @param string|null $oauthToken The Client Token (optional) + * @param string|null $oauthTokenSecret The Client Token Secret (optional) + */ + public function __construct($consumerKey, $consumerSecret, $oauthToken = null, $oauthTokenSecret = null) + { + $this->resetLastResponse(); + $this->signatureMethod = new HmacSha1(); + $this->consumer = new Consumer($consumerKey, $consumerSecret); + if (!empty($oauthToken) && !empty($oauthTokenSecret)) { + $this->token = new Token($oauthToken, $oauthTokenSecret); + } + if (empty($oauthToken) && !empty($oauthTokenSecret)) { + $this->bearer = $oauthTokenSecret; + } + } + + /** + * @param string $oauthToken + * @param string $oauthTokenSecret + */ + public function setOauthToken($oauthToken, $oauthTokenSecret) + { + $this->token = new Token($oauthToken, $oauthTokenSecret); + } + + /** + * @return string|null + */ + public function getLastApiPath() + { + return $this->response->getApiPath(); + } + + /** + * @return int + */ + public function getLastHttpCode() + { + return $this->response->getHttpCode(); + } + + /** + * @return array + */ + public function getLastXHeaders() + { + return $this->response->getXHeaders(); + } + + /** + * @return array|object|null + */ + public function getLastBody() + { + return $this->response->getBody(); + } + + /** + * Resets the last response cache. + */ + public function resetLastResponse() + { + $this->response = new Response(); + } + + /** + * Make URLs for user browser navigation. + * + * @param string $path + * @param array $parameters + * + * @return string + */ + public function url($path, array $parameters) + { + $this->resetLastResponse(); + $this->response->setApiPath($path); + $query = http_build_query($parameters); + return sprintf('%s/%s?%s', self::API_HOST, $path, $query); + } + + /** + * Make /oauth/* requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array + * @throws TwitterOAuthException + */ + public function oauth($path, array $parameters = []) + { + $response = []; + $this->resetLastResponse(); + $this->response->setApiPath($path); + $url = sprintf('%s/%s', self::API_HOST, $path); + $result = $this->oAuthRequest($url, 'POST', $parameters); + + if ($this->getLastHttpCode() != 200) { + throw new TwitterOAuthException($result); + } + + parse_str($result, $response); + $this->response->setBody($response); + + return $response; + } + + /** + * Make /oauth2/* requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function oauth2($path, array $parameters = []) + { + $method = 'POST'; + $this->resetLastResponse(); + $this->response->setApiPath($path); + $url = sprintf('%s/%s', self::API_HOST, $path); + $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters); + $authorization = 'Authorization: Basic ' . $this->encodeAppAuthorization($this->consumer); + $result = $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters); + $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); + $this->response->setBody($response); + return $response; + } + + /** + * Make GET requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function get($path, array $parameters = []) + { + return $this->http('GET', self::API_HOST, $path, $parameters); + } + + /** + * Make POST requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function post($path, array $parameters = []) + { + return $this->http('POST', self::API_HOST, $path, $parameters); + } + + /** + * Make DELETE requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function delete($path, array $parameters = []) + { + return $this->http('DELETE', self::API_HOST, $path, $parameters); + } + + /** + * Make PUT requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function put($path, array $parameters = []) + { + return $this->http('PUT', self::API_HOST, $path, $parameters); + } + + /** + * Upload media to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * @param boolean $chunked + * + * @return array|object + */ + public function upload($path, array $parameters = [], $chunked = false) + { + if ($chunked) { + return $this->uploadMediaChunked($path, $parameters); + } else { + return $this->uploadMediaNotChunked($path, $parameters); + } + } + + /** + * Private method to upload media (not chunked) to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function uploadMediaNotChunked($path, array $parameters) + { + $file = file_get_contents($parameters['media']); + $base = base64_encode($file); + $parameters['media'] = $base; + return $this->http('POST', self::UPLOAD_HOST, $path, $parameters); + } + + /** + * Private method to upload media (chunked) to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function uploadMediaChunked($path, array $parameters) + { + $init = $this->http('POST', self::UPLOAD_HOST, $path, $this->mediaInitParameters($parameters)); + // Append + $segmentIndex = 0; + $media = fopen($parameters['media'], 'rb'); + while (!feof($media)) + { + $this->http('POST', self::UPLOAD_HOST, 'media/upload', [ + 'command' => 'APPEND', + 'media_id' => $init->media_id_string, + 'segment_index' => $segmentIndex++, + 'media_data' => base64_encode(fread($media, $this->chunkSize)) + ]); + } + fclose($media); + // Finalize + $finalize = $this->http('POST', self::UPLOAD_HOST, 'media/upload', [ + 'command' => 'FINALIZE', + 'media_id' => $init->media_id_string + ]); + return $finalize; + } + + /** + * Private method to get params for upload media chunked init. + * Twitter docs: https://dev.twitter.com/rest/reference/post/media/upload-init.html + * + * @param array $parameters + * + * @return array + */ + private function mediaInitParameters(array $parameters) + { + $return = [ + 'command' => 'INIT', + 'media_type' => $parameters['media_type'], + 'total_bytes' => filesize($parameters['media']) + ]; + if (isset($parameters['additional_owners'])) { + $return['additional_owners'] = $parameters['additional_owners']; + } + if (isset($parameters['media_category'])) { + $return['media_category'] = $parameters['media_category']; + } + return $return; + } + + /** + * @param string $method + * @param string $host + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function http($method, $host, $path, array $parameters) + { + $this->resetLastResponse(); + $url = sprintf('%s/%s/%s.json', $host, self::API_VERSION, $path); + $this->response->setApiPath($path); + $result = $this->oAuthRequest($url, $method, $parameters); + $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); + $this->response->setBody($response); + return $response; + } + + /** + * Format and sign an OAuth / API request + * + * @param string $url + * @param string $method + * @param array $parameters + * + * @return string + * @throws TwitterOAuthException + */ + private function oAuthRequest($url, $method, array $parameters) + { + $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters); + if (array_key_exists('oauth_callback', $parameters)) { + // Twitter doesn't like oauth_callback as a parameter. + unset($parameters['oauth_callback']); + } + if ($this->bearer === null) { + $request->signRequest($this->signatureMethod, $this->consumer, $this->token); + $authorization = $request->toHeader(); + if (array_key_exists('oauth_verifier', $parameters)) { + // Twitter doesn't always work with oauth in the body and in the header + // and it's already included in the $authorization header + unset($parameters['oauth_verifier']); + } + } else { + $authorization = 'Authorization: Bearer ' . $this->bearer; + } + return $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters); + } + + /** + * Set Curl options. + * + * @return array + */ + private function curlOptions() + { + $options = [ + // CURLOPT_VERBOSE => true, + CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout, + CURLOPT_HEADER => true, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_SSL_VERIFYHOST => 2, + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_TIMEOUT => $this->timeout, + CURLOPT_USERAGENT => $this->userAgent, + ]; + + if ($this->useCAFile()) { + $options[CURLOPT_CAINFO] = __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem'; + } + + if($this->gzipEncoding) { + $options[CURLOPT_ENCODING] = 'gzip'; + } + + if (!empty($this->proxy)) { + $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY']; + $options[CURLOPT_PROXYUSERPWD] = $this->proxy['CURLOPT_PROXYUSERPWD']; + $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT']; + $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC; + $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP; + } + + return $options; + } + + /** + * Make an HTTP request + * + * @param string $url + * @param string $method + * @param string $authorization + * @param array $postfields + * + * @return string + * @throws TwitterOAuthException + */ + private function request($url, $method, $authorization, array $postfields) + { + $options = $this->curlOptions($url, $authorization); + $options[CURLOPT_URL] = $url; + $options[CURLOPT_HTTPHEADER] = ['Accept: application/json', $authorization, 'Expect:']; + + switch ($method) { + case 'GET': + break; + case 'POST': + $options[CURLOPT_POST] = true; + $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery($postfields); + break; + case 'DELETE': + $options[CURLOPT_CUSTOMREQUEST] = 'DELETE'; + break; + case 'PUT': + $options[CURLOPT_CUSTOMREQUEST] = 'PUT'; + break; + } + + if (in_array($method, ['GET', 'PUT', 'DELETE']) && !empty($postfields)) { + $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields); + } + + + $curlHandle = curl_init(); + curl_setopt_array($curlHandle, $options); + $response = curl_exec($curlHandle); + + // Throw exceptions on cURL errors. + if (curl_errno($curlHandle) > 0) { + throw new TwitterOAuthException(curl_error($curlHandle), curl_errno($curlHandle)); + } + + $this->response->setHttpCode(curl_getinfo($curlHandle, CURLINFO_HTTP_CODE)); + $parts = explode("\r\n\r\n", $response); + $responseBody = array_pop($parts); + $responseHeader = array_pop($parts); + $this->response->setHeaders($this->parseHeaders($responseHeader)); + + curl_close($curlHandle); + + return $responseBody; + } + + /** + * Get the header info to store. + * + * @param string $header + * + * @return array + */ + private function parseHeaders($header) + { + $headers = []; + foreach (explode("\r\n", $header) as $line) { + if (strpos($line, ':') !== false) { + list ($key, $value) = explode(': ', $line); + $key = str_replace('-', '_', strtolower($key)); + $headers[$key] = trim($value); + } + } + return $headers; + } + + /** + * Encode application authorization header with base64. + * + * @param Consumer $consumer + * + * @return string + */ + private function encodeAppAuthorization(Consumer $consumer) + { + $key = rawurlencode($consumer->key); + $secret = rawurlencode($consumer->secret); + return base64_encode($key . ':' . $secret); + } + + /** + * Is the code running from a Phar module. + * + * @return boolean + */ + private function pharRunning() + { + return class_exists('Phar') && \Phar::running(false) !== ''; + } + + /** + * Use included CA file instead of OS provided list. + * + * @return boolean + */ + private function useCAFile() + { + /* Use CACert file when not in a PHAR file. */ + return !$this->pharRunning(); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php new file mode 100644 index 00000000..79903eca --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php @@ -0,0 +1,10 @@ + + */ +class TwitterOAuthException extends \Exception +{ +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util.php b/twitter/vendor/abraham/twitteroauth/src/Util.php new file mode 100644 index 00000000..372af953 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Util.php @@ -0,0 +1,115 @@ + array('b','c'), 'd' => 'e') + * + * @param string $input + * + * @return array + */ + public static function parseParameters($input) + { + if (!is_string($input)) { + return []; + } + + $pairs = explode('&', $input); + + $parameters = []; + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = Util::urldecodeRfc3986($split[0]); + $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : ''; + + if (isset($parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parameters[$parameter] = [$parameters[$parameter]]; + } + + $parameters[$parameter][] = $value; + } else { + $parameters[$parameter] = $value; + } + } + return $parameters; + } + + /** + * @param array $params + * + * @return string + */ + public static function buildHttpQuery(array $params) + { + if (empty($params)) { + return ''; + } + + // Urlencode both keys and values + $keys = Util::urlencodeRfc3986(array_keys($params)); + $values = Util::urlencodeRfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = []; + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + // June 12th, 2010 - changed to sort because of issue 164 by hidetaka + sort($value, SORT_STRING); + foreach ($value as $duplicateValue) { + $pairs[] = $parameter . '=' . $duplicateValue; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php b/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php new file mode 100644 index 00000000..c8589c53 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php @@ -0,0 +1,26 @@ + + */ +class JsonDecoder +{ + /** + * Decodes a JSON string to stdObject or associative array + * + * @param string $string + * @param bool $asArray + * + * @return array|object + */ + public static function decode($string, $asArray) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) { + return json_decode($string, $asArray, 512, JSON_BIGINT_AS_STRING); + } + + return json_decode($string, $asArray); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/cacert.pem b/twitter/vendor/abraham/twitteroauth/src/cacert.pem new file mode 100644 index 00000000..8849e024 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/cacert.pem @@ -0,0 +1,4043 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.27. +## SHA256: dffa79e6aa993f558e82884abf7bb54bf440ab66ee91d82a27a627f6f2a4ace4 +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================ +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 +MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM +LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo +ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ +wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH +Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a +SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS +NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab +mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY +Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 +qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu +MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO +v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ +82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz +o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs +a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx +OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW +mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o ++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC +rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE +BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl +cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN +MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT +HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg +Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz +o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy +Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti +GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li +qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH +Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG +alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa +m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox +bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi +xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB +bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL +j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU +wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 +XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH +59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ +23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq +J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA +HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi +uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +==================================================== +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6 +==================================================== +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +Certplus Root CA G1 +=================== +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV +BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe +Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD +ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN +r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx +Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj +BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv +LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 +z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc +4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd +4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj +jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ +ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G +A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY +lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG +YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ +2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F +6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX +CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe +tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC +VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ ++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ +qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +Certplus Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT +AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x +NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 +cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN +Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud +IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV +HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl +vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +OpenTrust Root CA G1 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx +MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa +Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 +ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO +YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 +xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO +9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq +3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi +n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 +URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr +TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px +N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv +uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK +n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh +X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 +nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm +GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ +bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o +4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA +OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx +-----END CERTIFICATE----- + +OpenTrust Root CA G2 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy +MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ +Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz +4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV +eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt +UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz +3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj +3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz +9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 +0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT +y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 +M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI +mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG +S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp +EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ +6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr +gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo +SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 +YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm +u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK +-----END CERTIFICATE----- + +OpenTrust Root CA G3 +==================== +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X +DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w +ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B +ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf +BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM +BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta +3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +LuxTrust Global Root 2 +====================== +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG +A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh +bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW +MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm +Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 +xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC +wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm +1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm +FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF +wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ +a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U +ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ +MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB +/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 +Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ +FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN +H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW +7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu +ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA +VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR +TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt +/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc +7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I +iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- diff --git a/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php b/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php new file mode 100644 index 00000000..344b4c1f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php @@ -0,0 +1,51 @@ +assertEquals($this->name, $this->getClass()->getName()); + } + + /** + * @dataProvider signatureDataProvider + */ + public function testBuildSignature($expected, $request, $consumer, $token) + { + $this->assertEquals($expected, $this->getClass()->buildSignature($request, $consumer, $token)); + } + + protected function getRequest() + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Request') + ->disableOriginalConstructor() + ->getMock(); + } + + protected function getConsumer($key = null, $secret = null, $callbackUrl = null) + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Consumer') + ->setConstructorArgs([$key, $secret, $callbackUrl]) + ->getMock(); + } + + protected function getToken($key = null, $secret = null) + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Token') + ->setConstructorArgs([$key, $secret]) + ->getMock(); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php b/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php new file mode 100644 index 00000000..3ec810a9 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php @@ -0,0 +1,16 @@ +assertEquals("Consumer[key=$key,secret=$secret]", $consumer->__toString()); + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php b/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php new file mode 100644 index 00000000..cf37a22e --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php @@ -0,0 +1,35 @@ +getRequest(), $this->getConsumer(), $this->getToken()], + [ + 'EBw0gHngam3BTx8kfPfNNSyKem4=', + $this->getRequest(), + $this->getConsumer('key', 'secret'), + $this->getToken() + ], + [ + 'kDsHFZzws2a5M6cAQjfpdNBo+v8=', + $this->getRequest(), + $this->getConsumer('key', 'secret'), + $this->getToken('key', 'secret') + ], + ['EBw0gHngam3BTx8kfPfNNSyKem4=', $this->getRequest(), $this->getConsumer('key', 'secret'), null], + ]; + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php b/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php new file mode 100644 index 00000000..5be372be --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php @@ -0,0 +1,26 @@ +assertEquals($expected, $token->__toString()); + } + + public function tokenProvider() + { + return [ + ['oauth_token=key&oauth_token_secret=secret', 'key', 'secret'], + ['oauth_token=key%2Bkey&oauth_token_secret=secret', 'key+key', 'secret'], + ['oauth_token=key~key&oauth_token_secret=secret', 'key~key', 'secret'], + ]; + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php b/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php new file mode 100644 index 00000000..730bd34e --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php @@ -0,0 +1,256 @@ +twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + } + + public function testBuildClient() + { + $this->assertObjectHasAttribute('consumer', $this->twitter); + $this->assertObjectHasAttribute('token', $this->twitter); + } + + public function testSetOauthToken() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $twitter->setOauthToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $this->assertObjectHasAttribute('consumer', $twitter); + $this->assertObjectHasAttribute('token', $twitter); + $twitter->get('friendships/show', ['target_screen_name' => 'twitterapi']); + $this->assertEquals(200, $twitter->getLastHttpCode()); + } + + public function testOauth2Token() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $result = $twitter->oauth2('oauth2/token', ['grant_type' => 'client_credentials']); + $this->assertEquals(200, $twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('token_type', $result); + $this->assertObjectHasAttribute('access_token', $result); + $this->assertEquals('bearer', $result->token_type); + return $result; + } + + /** + * @depends testOauth2Token + */ + public function testBearerToken($accessToken) + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, null, $accessToken->access_token); + $result = $twitter->get('statuses/user_timeline', ['screen_name' => 'twitterapi']); + if ($twitter->getLastHttpCode() !== 200) { + $this->assertEquals('foo', substr($accessToken->access_token, 0, 75)); + $this->assertEquals('foo', print_r($result, true)); + } + $this->assertEquals(200, $twitter->getLastHttpCode()); + return $accessToken; + } + + // This causes issues for parallel run tests. + // /** + // * @depends testBearerToken + // */ + // public function testOauth2TokenInvalidate($accessToken) + // { + // $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + // // HACK: access_token is already urlencoded but gets urlencoded again breaking the invalidate request. + // $result = $twitter->oauth2( + // 'oauth2/invalidate_token', + // array('access_token' => urldecode($accessToken->access_token)) + // ); + // $this->assertEquals(200, $twitter->getLastHttpCode()); + // $this->assertObjectHasAttribute('access_token', $result); + // return $result; + // } + + public function testOauthRequestToken() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]); + $this->assertEquals(200, $twitter->getLastHttpCode()); + $this->assertArrayHasKey('oauth_token', $result); + $this->assertArrayHasKey('oauth_token_secret', $result); + $this->assertArrayHasKey('oauth_callback_confirmed', $result); + $this->assertEquals('true', $result['oauth_callback_confirmed']); + return $result; + } + + /** + * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException + * @expectedExceptionMessage Could not authenticate you + */ + public function testOauthRequestTokenException() + { + $twitter = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET'); + $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]); + return $result; + } + + /** + * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException + * @expectedExceptionMessage Invalid oauth_verifier parameter + * @depends testOauthRequestToken + */ + public function testOauthAccessTokenTokenException(array $requestToken) + { + // Can't test this without a browser logging into Twitter so check for the correct error instead. + $twitter = new TwitterOAuth( + CONSUMER_KEY, + CONSUMER_SECRET, + $requestToken['oauth_token'], + $requestToken['oauth_token_secret'] + ); + $twitter->oauth("oauth/access_token", ["oauth_verifier" => "fake_oauth_verifier"]); + } + + public function testUrl() + { + $url = $this->twitter->url('oauth/authorize', ['foo' => 'bar', 'baz' => 'qux']); + $this->assertEquals('https://api.twitter.com/oauth/authorize?foo=bar&baz=qux', $url); + } + + public function testGetAccountVerifyCredentials() + { + // Include entities boolean added to test parameter value cohearsion + $this->twitter->get('account/verify_credentials', ["include_entities" => false]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + // BUG: testing is too unreliable for now + // public function testSetProxy() + // { + // $this->twitter->setProxy(array( + // 'CURLOPT_PROXY' => PROXY, + // 'CURLOPT_PROXYUSERPWD' => PROXYUSERPWD, + // 'CURLOPT_PROXYPORT' => PROXYPORT, + // )); + // $this->twitter->setTimeouts(60, 60); + // $result = $this->twitter->get('account/verify_credentials'); + // $this->assertEquals(200, $this->twitter->getLastHttpCode()); + // $this->assertObjectHasAttribute('id', $result); + // } + + public function testGetStatusesMentionsTimeline() + { + $this->twitter->get('statuses/mentions_timeline'); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testGetSearchTweets() + { + $result = $this->twitter->get('search/tweets', ['q' => 'twitter']); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + return $result->statuses; + } + + /** + * @depends testGetSearchTweets + */ + public function testGetSearchTweetsWithMaxId($statuses) + { + $maxId = array_pop($statuses)->id_str; + $this->twitter->get('search/tweets', ['q' => 'twitter', 'max_id' => $maxId]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testPostFavoritesCreate() + { + $result = $this->twitter->post('favorites/create', ['id' => '6242973112']); + if ($this->twitter->getLastHttpCode() == 403) { + // Status already favorited + $this->assertEquals(139, $result->errors[0]->code); + } else { + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + } + + /** + * @depends testPostFavoritesCreate + */ + public function testPostFavoritesDestroy() + { + $this->twitter->post('favorites/destroy', ['id' => '6242973112']); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testPostStatusesUpdateWithMedia() + { + $this->twitter->setTimeouts(60, 30); + // Image source https://www.flickr.com/photos/titrans/8548825587/ + $file_path = __DIR__ . '/kitten.jpg'; + $result = $this->twitter->upload('media/upload', ['media' => $file_path]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('media_id_string', $result); + $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string]; + $result = $this->twitter->post('statuses/update', $parameters); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + if ($this->twitter->getLastHttpCode() == 200) { + $result = $this->twitter->post('statuses/destroy/' . $result->id_str); + } + return $result; + } + + public function testPostStatusesUpdateWithMediaChunked() + { + $this->twitter->setTimeouts(60, 30); + // Video source http://www.sample-videos.com/ + $file_path = __DIR__ . '/video.mp4'; + $result = $this->twitter->upload('media/upload', ['media' => $file_path, 'media_type' => 'video/mp4'], true); + $this->assertEquals(201, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('media_id_string', $result); + $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string]; + $result = $this->twitter->post('statuses/update', $parameters); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + if ($this->twitter->getLastHttpCode() == 200) { + $result = $this->twitter->post('statuses/destroy/' . $result->id_str); + } + return $result; + } + + public function testPostStatusesUpdateUtf8() + { + $result = $this->twitter->post('statuses/update', ['status' => 'xこんにちは世界 ' . time()]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + return $result; + } + + /** + * @depends testPostStatusesUpdateUtf8 + */ + public function testPostStatusesDestroy($status) + { + $this->twitter->post('statuses/destroy/' . $status->id_str); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testLastResult() + { + $this->twitter->get('search/tweets', ['q' => 'twitter']); + $this->assertEquals('search/tweets', $this->twitter->getLastApiPath()); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('statuses', $this->twitter->getLastBody()); + } + + /** + * @depends testLastResult + */ + public function testResetLastResponse() + { + $this->twitter->resetLastResponse(); + $this->assertEquals('', $this->twitter->getLastApiPath()); + $this->assertEquals(0, $this->twitter->getLastHttpCode()); + $this->assertEquals([], $this->twitter->getLastBody()); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php b/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php new file mode 100644 index 00000000..609382d6 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php @@ -0,0 +1,50 @@ +assertEquals($expected, JsonDecoder::decode($input, $asArray)); + } + + public function jsonProvider() + { + return [ + ['[]', true, []], + ['[1,2,3]', true, [1, 2, 3]], + ['[{"id": 556179961825226750}]', true, [['id' => 556179961825226750]]], + ['[]', false, []], + ['[1,2,3]', false, [1, 2, 3]], + [ + '[{"id": 556179961825226750}]', + false, + [ + $this->getClass(function ($object) { + $object->id = 556179961825226750; + return $object; + }) + ] + ], + + ]; + } + + /** + * @param callable $callable + * + * @return stdClass + */ + private function getClass(\Closure $callable) + { + $object = new \stdClass(); + + return $callable($object); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php b/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php new file mode 100644 index 00000000..7cc9c27f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php @@ -0,0 +1,12 @@ +XD3ePZ9ut$-v0V?-CdZ0KR^K0p|KzSetXUSo-Gx7=QzG zfE)lgxm>wyY@tU5PK2bZjlFWB^q2o52XnwlNdPb{Z9u_d{}ccJiP&5&2Lu8Dh;pK> z;Och8<%Hu;*e4|L^56K+Cya5v_?N-ZzZ`I4;0bg6WsiUHssGXW7Zd)ntFNEyiOye} zFT47>{^g+)P7V%oJ7I{?2`2`7xrLnY%n9Rsf_%MB_{RxjeBGR`005NfZ+xJei{}Z; zo-k7Y)m;08H2{Et$>YD+`M)^OE%d}r0MNd4IV`}-!!r;o;UbBZJAGOeYv2~*;}#ew zO>uI$=oH|J)xP9=*~u>q0RDB)e{%t-zrMwuI9XZlw6e0ayv&LF|1JO9#D8o3@8NIT z{!8Pl+5fZ|h~wFR;{KEOKXI3;06_KIiEpz16X#qE0Cy7rfNSADakvTqV2uZWt{4Ax zKOBGii)UcqWwn3)2?+_2@p5yK`RmYs%m1swzcv5Y@L%=G{H^cbzQgLcxjO~<1Y-X> z)#Z}UrJw-pmCH^pZdmF6XD9wY&iG$u{g)l5%-!7G0^IygsJ{j9 z$q(!0_rGf4|HEwmWy4?mSHC_1bj@!7b3q0`zQ6#Goo4_P%?Lp3%T7{2|86%UxE1jC z$+H&x@UMP?JUZ@?eH-yi^l5yAlxf=EMDA=(gA zh%Lk&5&(&Uq(ZJksvx%@y^zO{X~-MMHsmLi4vL0iq0&%wr~%Xx>H_tLMnTh|B~Ti) z3pxayhQ5V^z!}wrQFf|wnW&`tpg}@SF*I{+APS`MP7WN)?Ku1T%K_^b9LT5mC zj?SCzDqT8VDcxFK%YrRX*3P3fKJ1L+g#i|L!`AJ9+Hzo-Afz{nuT zAkU!3V9Vgg5X*3#p^>4VVT$1c!x0<_7lo_AP2sNaFnAWc2Hp#Q0e=raLa-sk5t;}p z!W$8TC_>yq3?r5hUl|!0g&9vXnlXAYMl%*Mwla<~zGeK$gkr)oX*1a~1u+`#;Zd71eK3z|iSg~Z~@a*gE%OBc%&%O_Sit0*gx)qypf z^*ZYv))%bXNH|gqsf~0(Mj>w?dyp@Y-`LP>a%`q-zHI4ijcj9V8z_2|7)lrAii$^7 zqaLBw&=9l;S{voNk;coVPfqIKOl8auK-PxKg=pbIo!ca$~u5xi50(aNp&A z%>(7Z^O*63@Rack^KA2Cc-47bcvE@Xc^CM=e0V-{zN>uIe9!p4@eA=5>|5TB5NP>@ii&~u?9VR2zg z;aK6@!mmXTBB~eJuK2OkB)bEJ^IH*oHWl zI7vKQyh(gXf?49Mgug_U#Ec}Jq^jga$x_J)JQ%Np_r%}8zmNh;DNA`tl}b&Xf}J{j z%I{Rwsh84B(nRTC=_cv7G8{5SGO;puWj_6b`^Wa5oPQqw^IKL))y`T=kC%6mzac-Pz^tIBa803GVNX#?(M_>Tab5|nWUQ2=G^q4TSw%TO`Ihpg3QomQ z<)+F@Rg5Y{HC=V|H0-q2>1(I&pZ=+)tQM%&uC}W#t$tCxQGG*0T*FPHMq^D=Skp>0;16=&X@6*}v5w(9IEL4@E+s3UwJN)o+^&BRYyvRVOJom$_u)wCnEAL>AK z^mS5op6jA?EpO!G`%Q^YC$lzV1$W)!mY}BDWsv2d6|0rKRfE-cYaQ!c>o+$4*hJbqJ;!s->s+@jy{(mP zo$WU}UAqFi_x4KmiS~2n#m|SHA9LVw@Nww7zP2cpFKK ztc(IhIY$j%6S)?D?R~UktH!8@nw>F zQh72o*(>>Zib6_p%I{Ry)F)}OY1h+^(_PY^WXNR{W&Fu>&wQSxoK==hm+hB5mvc6U zmdlnKp1YQ3oY$3)%}>qWFSt-Jc3ts$c_E@OsPIjZQBij>t~k5+xWuz$_J-Dt+c)`c zrri8q>RLKgMku>g&R?EZepumEF<+@)*;OT0b-kLdI=Fhh#;WFVt!iyU9Zy|a-LHDT z`ZqLl+E9Z^Lqj89V^$NmDX3|)*}i$AMW?0vmh`R4+Z?ykT7lM})~zm{mVD= zuJaqOd|vG>1TP#dMlZpZQePuqUti{1u3C{?x&21@P2XFcx6f8BRu|V?);_+w^6vP3 z{5tdc^$&s{8aCuN?r-XCPHfq2z5jUm^51OkS@pfDH=3WdVx=;>fEdO9eS4o*kU@K<1Ta0HwI@%Q3yA%6?_ zo9pDyaFXkPRQ`Vje;xvC4B$p600FT9U^Wnh4fJQ|WJm&lppcWY|Bh7tM_>>r9X*%< z4gwG->0~4Tf`DOQ7zjoOgPvHx2m(XcfD?mJLUKeidbF^Ue+&agKBrPdt8HNNGrPI- z+dVjkLI93a+d|YO7I7uFT~UY2wd$lSJ`e!@Th)K+0z*z}Ke=~?lT^hMtNtY*2n6!i zCIAFxg9xGIphUEpu#-Ft+lfVIfnPR@z4^G< zSdvKCLg^O~8GEa3nMYMR5WZ)h@%=i~%0}(|UVU0!@Vn%NbV}n*NJjL0#Eei%NOHD| z7mX;|56IHk+5^(;Rfa;>S)|J>QaSU+9Hm*y8-ye@4n>|#b|#+r(i1v6qcnvJjeOQAwqFGK10{e ze`xZv?(l6Vk5a^;|>#ywSwTBZ}k?Rk?sHgUt9%oaKA-uce7dW(6 zD;p($E0oWost;Q0_?S$kW;4C`U^qJZE}MIn+m>2Y zq)`IA6*wQa6eNWpQ$1+ARwHCYqlh@4yt!r1x`bV&pEOrk3Rxd|^aqHTs@Zv^hi+tG z)3{^}7k$MFqUM5j#^nr}ILM>(FRmyBp3l4yQG@15BIvV2GRd}_7GsOf?3!Ilhyu;F z%Rxxj`sIpig4^d2_R+=ggWpQ9PLrgT^Wc+7=eaS{aKbRV%o z=gO;N2K3$PGr0ChME#680l(rGTP>!z$lt+)23N|L}ncp6Fy8rB=adDH$T=%jz@ObT4@nmC2IseIxRUbFOMx`0V4>)e*m3r5xy$U45nP zU|IF}0v)8mjv?64hq$5Tq)D$ZOy;}Z1@D$LGlM?H6zb|>w%GzIP$*Lq37x&yY)4f& zw@3y%lw{E5YAJwwy*Y=xle74e<(O^ZPXBnDXS)4u^XpF7S$fytZ$mM?zPYk^18G}CDTyEH>D9sj& zT4+Z8X2zbn=%NC`=drQV!@FCf4TzFZ^SWtiDc%Avk{LpBOLNo0RsdTY3zx?d52qTk zKmTKpML{pnVxyBy-qoq3#>;<`%2tn4@|vV?VMi9{mgN{H>QCHH7JgJAfx?*5hYPQD zCn8&Gl9wwgnxqVPQy?{y$3CiOD{e4?;J^`^lG(Q1ATgM2$*fQ9c$(S;?XiJao6vXaod#r#wwbOdSTV+M_pex0n1`+>G}(g8 zh3_^X&XipZX-u6MmU_i=AAwD{B-p}~NG8?je7b=QPCh6B7{;eq+PaFCE9r#JwCH%} zjh&f6hg31vFgsLw$_uPN!~OxD3= z4nbacJ5KiSp(Qm2F!EN^f<~SexS3klPsQt4=dEDtT8ASlc6{{ha-O2i~u6(1A6S`|@#8z?`j(ks~91mEEJmGw@r zGc=kgZ@TUof1DA_?{t+}UEp3&lM!d`A&w(cBAYzZa8PBkKlH>Q&gV2X!xf)!zzi*+ z#IP;j;KpElCmdnTT#fmHPG4qObKjK@xdvCHwx99|EQA~I4DD~~v|v^z%ZsYSOpeWt zql**Rc%wbOH1NgCXDb&engs7_k9+a?Md1Tn(H3zT6qtoyit|N(d$8$T!B`HnRi}3} z@o@IEGQUt>su2Dd8&nk^nbQR8tpL7>3Wql3QK?n~)~phERHY!MGE;*6a&7iCZ(^L4 zobzqRm#EUr*2rE<*q--Dnz=a!>G}uYvFQ5eSg8Fb1-BKaJ}FU|6I=c8-FE@X z36*%-ZbUoQnWa_r>vWvrgKC{Fn|17|?>fy$j5ZfLO*8jbut>(UE#75E1Z|wFrwYjv ze=C81+Ps(9&ZCWs);;ulooN?h^>B;7KK$l6`sV&sk38{M&lyW34#SWge0;aIfAoys zd)%g|tVmdWoieJk?TM8#t^o2t6F+b>s+XbTT{dln#*UUBqYyi5VwuqM*T_CL7qi*| zX~Yag-6v()Z&~<%tYwGL98^2!zqRDy;zquKZfM8H{dT4w7dxM(wMn5Pg1uApbZ9%m zr!}!j9L-pO`2j+Xw`mx^DUvuYF^X{*2PAu$Y)3ii=mqWhS6d zM9l=7q4GA>?Ba9kT$`Ar`OuMza>6=gni=Li%6J8}AOT@1jq>@+&a9=P9_AI>!8GNO zT0<#G5)V-}s(>N95FCRuSj&8%*&t6H^^kYXNG>WtArg?mqQc7T4642^RP=-Qx-3t; z2c=IHCHQ`wyJ=p7bb2r3h!!bNO*r88x(ve0diJyr`e@#-b!Y%6_2+@rqM)=4ED0L4 zkamNvYCkUh6h9uZc9iP;z>#j}C9>3^L>R_n8w0U=y`Gkb)onLG%qX!auV-i?1KpEwempUq4#9DtMOaG{OazBJs76!mySD*&JjrU5eN}A>qzqgc<#Zl6X-Lg&H=P z!Wb`)53*QvBVU2Gxl*^DspcL+zac;R3fZ2`swrIVFyJYhKsN6YS?`D$U}UgXH$~#7 zZzXj0F?wOYgwUCWtB!SDXgyGg=Ivkc_YkErj#8G6Emh~|pG=@Ony7JrpL3oB#ovlP(tDzvMD9shrv>P( zceKO+Uv2li%nDNly83QVGYW>~ux^5tg8~`pI5V-AS{wWKe&orD7dKsTlBCSv+fs*S zi*#O4=ENMaNzJ(Gj2um%XvP;2OWvB_o3dPg@}gv-5y{h^E^5m^@zcUPl-B!s$7qtD z=O0GX@6(9EFM%3ReOdSn_E!R4zg8qH%Uhy-x@O{BLP}O-^rjZYKM4b}H8&_v?e2A} zH+dBNiJN!ml1Qh9uOb4Z<&pU%$YkkDB2?@xV4vVwmYuiwq8r;v1jXa!1b#QsT zz6%_sO7x|)Ob`nlx2DC{Z(27AR603AYFMwmCws@G(=I0<89@9$R~x!`N;fVSLfJ7< z_btUBk1JhoyEN+ja!$c9>Nz+Tp~W&M^?1er3~@Qp{197mJwI8N{&S^opeiG3M-4luGgx*h-G>@U2$yND5 zV--J;ZkpbNqN1GfoZ@VOr~+I9@@forhE7ADfuf-ksX|k7(Te_5L3npWpjnS(nYSXG zwR(ro(^YE6cWVkGlGkde2vXoMr6D1fsIjXkC9D_L7??EPTl!3j!rx#PXs@n4vxJ6x z{=R8)!87x$_Q=wV{?DEw8Z+ywt51cbG`*R!_9~h#6}lVb9L}b$-kR4fENIJ{iflv_ zgfrBn>>8)FYf*&-)zG;LM&yieguIEG?SI)?HbE zn%(~XOrB^Ua(`ykBK3&PZh$8>>%B#+a2$#?+31VMLUoL)oQlJYsIbnsd9=TAFhkh5 zx2#E-aARbWq_Rqo7di6R#;HJ#=nxiwilz&b8z-|A5?aJC+tul8O>dUK+K^LVW{>}2WahPRbY(tZnD=jx^m7k0P9 z{FLp}gYW~H{7NA_$!aiExLGOxaN*}&iw1A{g^JO8g1j|eY;aBCLZ$6M7p*g4YANVB zmsGl^ZK!v}6(ei0lvFp21v8Kez*x&A?{u?^Ly}RwMmI7 zA%Q+wDoUm7hNX6el&kwUiUD??P69(yndI&jH>}P%jMkM? zLF~*aY`im^5;dn#pegznotlBt<(Oz-{yRVZ)e8~>$6L9MII)Unkr{lK^4c_J=wt&G z?OajWiW#G9lp2+Dltlw`uWV8hv}Asg1Pv!9@a3Mp5gbO8(aLb8}MklKAej&BV zypodGtpb62dz3h(T3H(7^iT+mVAo($&Ew8Whexts7Lo^(=&FSsJraiw=`VZo2`5Un z!k(bCDPpros{4=E3|=d#ITD>R+iSm&KsLTyl!Ztp9deUm~~Jyn$e| znMofEzt7u+dn_LLjsoU#8n=tv!TeZhKNy4E8CK`!UvEw|4iwZH0Jd-}1$3^qObfTQ z3=mn(h&zh4`|M6v#p`~p(`-nEC@t5A)#?3XRCV7eVFS8Ua~%PppCB=8ipX+9?MBB2 zMY=ytQlzMIm8YnJV)AyFHT5Rxi$E-~K-Ju!(eoDRAk<{B`Ag^y)r1rnb~4KXp2f_y zpl`6*O<<)A>hyrSE^gh<0B+BEc*RA8)kRdbWs1i8Sbbuwb36Bf5Ag#kmn7Feb9bJ% z4}85MXiWWRM#;slRXzUW%eoNUCCd3D9$H?9D3-M(u3E~D{`4)Ahk_*?W2yn#x?|)( zTFe}t+a=>wG70w({j!#_eCk|BgFF*!9HpE+ZImLJ4gDPiwz=lqV1_s*s~h~JDdDcC zPqpyW>Kn}n%dupc6`grAW$QU^`l{r70=P)?nWYWcIB>WmkOm;S7w2a&8iswuk`!e4 z>p=^UzV%eGPp4Qff2Ctn1!gd5{J|)ao*a*m{Sv$1V0SzNkFs^5somk~tjJWy?o^?yI6j>IbW}7`b{_9o zMSyc|J8$}$v`RB)Ufb?iqp(!d&C!L3hYnf>;!aadxxAU|HKRcXzD@=KGNO>S)kI^n z2IA!T)pO&Wsz?F)Yb9p>q^szQ3N@9u?i^aw!Q`%`OoyEIRqXshu+#OjslycUu-Yhx zIPV83*4LId!~E)B=&&uvrSdZbhTor?lAd`RW--M|hP$+-p(|_^O89N`OY2N6sC&Pk z+N`{iY<*^=T5gzJyldzrMV#|rpNj_XmzQ}fT8tgA-5tI^$kHlCe>9;Q$%w1ADL}~ zcbTD=Q|x#JTeKl%SHU$yo4SZo7)0V9V23KGtm!or*ENU>Z1AD)AC#~WH`^asyvF05 zYv_jKa9X3)Tes$nb2|m|&xhwIOozv_%D<~ckm3}^wMyEFKC6X@Y`WL(4S04@Q(_k% zPqZw0IfZm9hN05U$>H{so2B^++Hv(^HtCt;FHnpIV z`wkz@H%*0Bh&~`#zo{jQn5X~p^q9+F#-eKqxMxm(sFhi%P!-CJHlK16RZzE7d=-)N z(Mf;GHKk10n+AV6CD5L;LGSwqz)QT&MX}n6S(Vn;468O6ABu8}VoBoO620z0^19wj zwb)VmdM6WeyvdkoJGvHLTCr_xc!*XKB#OoGasAw}bBTH=sGJ>%Ej`@R!w0Lu&s5NT z$TLnjlJ~fAo{M8f&4RmFX~WnUq%Nr$(kNo3WT#(@3P-e7it~T(4EP{aOm{f9 z>O8b2f2_$Q+N77Kr!I(Iv1rxVtL@VKhVl`Tf+EqI?o}}!r{5%*Y2>Q#26&sI#Fz?x0ugDdPL(TT@UAVLcRU)tekrXGsr0ZU!2ou{s7AhcuM zUT!bUl?oHI%$Pi(xWC%?pcy3 z?Z?Zi^9$(=5>_%*zt`(oSq~*K=N}S{ib`qm??&cc5;^kq4S>J~=j*Rw^Y{;*Rk`&< zvLg3g>L`VGcfS%UKVWXa3(f1{mwaL%@jT9Iifmqu^~D%hka(qvX6ZX9J@lti8sV~U zff`Xs>=$O_{YeA-^dxiuw=G_|hiVRgO5Il-g|GQ%MvT>ok43YS}!*m+w5mvw>%lV z2@bA&7em5YKELdADnarg=zA)+VemQ5D{Ar#lptVB4$9q_-|WNDeDP|z4U6O%ZzC;F zI-8#7bIq-s>orC5-m8@nHk`kY+&&CyZ@}!s8v^oBi|&aVuA^#W^U__%nUMM?XCRa*{+i9-Xv6dKg^MtkLOgg(R9z$F}{_1hK7^qxvP zcGCm@dh4M_Pd7RX#AMwpvn=>uWKI)XZLJxRnA#TfxJj+QDfGEx09SGsiYHZh#D37l=1Y2sgo?y;vW{5hHJzI8 zjIG!t6EjcO9$Rjt3$+5)CX^w0BqIYTzdEzdOxt5L6?fEfcv~o#NeCvxxM1 zV5f<#PDCI32Z;1awl5axKq3u*QreUeCniO+gk?h#e|Ds(0Fi@rMdqoc6lb5VPQ9Z_ zYIV$+H?^Jqf{aRhSF<6xcr9G@$!zM4{j*aHX!@o77P$>Ql41ng-A41!Ge?$pM1pZ$ zgbmQid$O`Bn^u4u)?zMo_m~z_IiL~anuiL2@KGAEIs@k8cokw~!EEH-^$^u(#@{%z zEvh*&_AZ)3WCF;#bWmAzTAi*Jlzm!(08CD*MT@6kuTY{x4ETw1bCu|*n5@(7xw+V@ zJ7)1UeHCs4Mgzsazt@tK)zmkT-z@+?<;vATvtYU&kcFt^f=exB5zxq(9pi`ZP$zms z=TV#OeCa#SNJ005Cm68hQrF#OR z`_P1oOFJ)=V0-RvKX{7-8)z7pgK!zPT5>T}bLZanPmH^p36(Gjs++C(QstcT&WM zAL7u0{97E^v7gKn_@}C;7b>oC<=*OoVPEvnOdyuswRyiCUNwr?86J$TH{ zz~(jnP~3m9PYZg3BFR%1Cf;f5Q?_xh7Ab1!#4{=u2ikZ3R35q&#PYhE-m>qp^tcYD(^uz4QR9iOLd zUu9*uR}h_W?|V&i3Ih6@r!DoLNmTz{-D@dEl@wXMXdBAB`n=Ra&Rq1&-nl7xPcC7^IQ+!qo}u)}P8< z8JC_rsF0JrcXZ8g3ER5nD_V2v!KrR5Tu}!F3Fi-=4U+Ggt==j!j%|S|E7yVSbUp=5l_$E6FPLntbT>dk;=`EEUk7&Mc^POFfTx z^Qn(Mpg%Btvcl>RWmT%n(6t2RhH}5zgV#K$km|74F<0#YPq&q z-|D!_OP=Yh{40cpCvmuQW_UWmOrXsfYxUz6xw^Qq zIl+wX$*J?OE4YJHof4m_(EGY{MOwlv0eDF%&ve7W=@AI+q;0+~KmsDFxe z<=QyomE#TCxW}Dw)iESLI#|e}lYZ19nr_qU8;Zogdb_Y!QYZO*j}$a# zWi>Xe$Uj3Jc1JB^E2Z_`X9? zrIVh@tMxF@c#NBU-2P!Ae6|OqBUQ}r-XY{CwVi8=EvPWb8OTa?bbWumW$VNF?EKe`;x*xTD8O7as%TpPG}vegub!3cVv9oqODT$@8u_z`!b7 z-=U-1^;K=9PK&!yO;*X|Gq|YM@KljNl}JZQ!#E?UE%z3C(^Sh*kRr>9Hr3L{^qJK= z49geq%Y~DwmBL&3B#IIL(5_xJ!I%3eh4t_a0;u)9dMck&sn8aPVL_tbHRxg zMyB;va|}%eeR{QGr)UZfIt6iuxPk=R2wHxwO2!eDG0nhcC30E6s0i#*60OGOA={PP zanWc`LDxlu{=ALASH+IBT2@Ug3pV+1wjoYb%2tXMsbSptsKs_RVBU%*>*f24`6)-W z-klE@_?s6V$rKwexWWu(e}A*@9~_ynyrVByF3@6@a=!QdlxxjUQ)rd{1GlwdvHjFE zg&z}_wr}wnpPYn#NWB_G?bCTFh%(;2fnaMBlFs_Qr4vOg$dCWcEe?pw1;(bA+1eL$c5|7!$*XXgpY>)bl_p+V%0B49s{_B4nxy7(P_vl!wt)Lq+bvRL zoegV2bsnP2NBfaZ)%>pY1hz38Slv?P{PmomcgJQQ@}FTI3VDC{QbK!gSVTFlweHeO4{?kfB^Iqee}!RPM{Q^}OZeSIPr& zuJ^YJS~R|}erfKxz&2m7f9{k6?rzQPZyHt(#vv0=ZzY{tsvYK%FWwzSmx!d_5d8I4 z#HtF|P%WXBTxG^@|GXQU0*8|}#cM4K$5?GIbD-e3AT7*rU z&Wj_9if!y5KNOb`$NRmSQzDY}M!%$0F+!yN(r$R{viLla(+kV5d*)XoWJK@c1CY9e z#1R#E+q%r4NTf9SqfyBuZhGn}WXZlO zy0#D;{&ifUgBG{?Dkkmnrj(Y*FT0ZZ+yXY2kkQ-cAD49dKUT`kHDV?hv*Ml-DB0rVtT&v zJXLeP;mJP9*8(s|UJt{3BcSYLLF6tf*ZK`k=UTcH_HI#9a`v@Sv=I-^s2!t|qcF2$ zoPKhI3tA9wOIE=f?TR#8yycy5y&P_N;Qo0p!)sQZ`N#Ll>vPHO4hDGm6prw-Dz!!`O^Y1J&VaX?^^NOLu}j7u zs~?Ep9=0JH>5nI{P(6GPs^0w`lR8kgs1dZm={pn{&zA}68Q;eQ=AuY(Gt?}nTS*%s zm!aazW!Wg>_!8TSOJcz#(cNu5{*HwCGKySjHbsl6 z3xQ11_n&+nom@dp)Ib`cv2C1+%5Xk&W>Tl~LKMOFZ!cLT`V#j-ISzkplgS zQMy_zS_A5&lif3m=YsK@i#7g~q$eSch|K9>E$*LhvPDUnVwFt850|9Mz2h|uk8+i9 zfmP`xV9y`w2s2Wa-#0%WTtqz;99V$+mS;^@=$6bbv6VM2h$Aa}#h6qv`CEJDyWoq= zB%xo_ECY1pXR5FTk6m=Sh$4)#6&?+l-pNj53PRXnEkO`18dnl8tHA3;zg)@oMtv|v zJcc6v&#P_V>i%-Y>_o}**)&ssv-XiDEOQKE3*Uo1qr*bYAVkwEV0tuTB<*;liNdZq zCu3LPHN^sEjt*}1ct7Q)_Z4Nj6Gb-h13P4l)cO!9hZ2|giICk;e#NSw7rS|%D1k-O z_M2A8h`SNFDECk$W8`_8YM&JIqz8?uoZ-?^liz=QYX^zGp+6@lhzWjb<|-)nq3NQI zq=YTy_AgqL&e_)(mwtIUpQFuy_cdB?o>c#sl&o;W2R>Po3tjUYf0VTA8@Gh_p2_tu58ILR~DVa(?`YqQz~3prS9Wfuc=5Xdr$N6%KR~<+P3W) z*KT2Q{?En&=92~esoLC*R}&QCoCYC$7w%usf6m`o$Z!E)X1P4eep222lQM>6y`DF{Y_6*Vulz z=2hh0*Yi<)h> z&%(D{gDs!3znaMNd_|y$ypxUrS93&Rx|<$ZcOnxy7X4UH6Kb^+uJFBdme#D!lNeJI zvW}UK=(07Z5@F=hst~k}t(DfEhL_L1!0Y+c4xE>8*vE4UE_p6a_vKt^RhDMW=8bW5WN+qOV7+nQzj#4*Gu-g_*_2~D?NF>6=Wcj8!amDE|xTs z+Uxisu4N-Qq8d)j348v{Kp<#@xk%A${sdnh(v|5MSjHz)ppz4MwqyQIzz zQDU+ECTd%DVFE*!TfA7}d%KFv!PQ}lW-tTc23F#N*Ub$i!(B7C>{(Zd4@=go$(N~jq11Gz+9(n>4({lCiYu=sNb`Fo5 z*RLwZRvkiv$~=28)y|x!pN!%1`xA`7LH=f=-l;kc--qnwmr(bv8<~6^Yh3@GRz-XE zTk)+`1NC(~j$g#u)^KbL{BrX4d{(AaQR&o9%O`4A$~&HCU;MI1ojdz-o6+)rfRr9l zk0%E6TeL5%*V%Oo5?ewHFPSXwnWXu=*z4Rbw^fecWDqySO~c+Hu;H=KYp_*=q2|A%fR>5ix26&ULAq zq^`Fxjvn$hcqz1ld)99*><^f`1Yv5%ur-%X*7}T$4e6<#OGm>dtnD|VMz#WBT(V_! z#}SsbZrnlxBIeNwW_83x!#s4Qh4@|5kCso8FQ{TF{9P2sUU4jX33yooiH_Ly6rC{DRx*`o@5lVK{N)S4yJWdx->ZNGnZy z_rBCM%F4-EL=8?lA_Ap8BUIdDBTKLzplQ$87ol61D`Bva2}}6wPpVMKh0-S#Cp)h3 z3Wf{a@-KDMeV*&vkmf*+zN&$CKHk zl3H*v@!FHEtEJNOTS#N=fCfNUi@U~8#Oc_Z2buc@nRjMJ{^Gn0$t&I73_hRhuEI{z zO^b+xEKwnNo+J}VLfmVI+FT6h{XO$!Mca2LJA`=TC0bm2?>Cw@wh!k&QKZD+de^`x z0eQ>4MGecb{)-uf>Db~OXmGXTQ7STDz>pt8YPH&<)FR{LZZ5yR2V0R7!Uh=Y;^&W5 zZ?_kYXxMnqz224I@G<%N*jrp#UiJNENniQ>YtFMx1$BGvXj+sEtG}T|tuN;(^CtJ$ z(71y_ju#qVIX7(Zu^<%u?8x;ybu6lr#$3((vHt z*}ECx)H_lXCidZ+jilV&3og5cV+Ci%Lyv=BW9*9F58rv(uL7H3pg;%K;?B91NxjZ; zIMv6-u<254Cl?e4;bOxY7ssfsb2)%WT{z zlq+~JXZq8!Wl`HOd=5)RYK(jqN*`N^xJdI;#}l|Uk0yH!Vtr5noZWcgxNVI@B>EK{ zN#owKWXz(ikB^Nf*xKh8eRej;H%=9}wH+YrNd8sK&*V4!Sr?1@3$cwgYl5Xp1-pX@ zSO;})w0lycYoj8b##h**m{V>)x)Z2`6&)au zdsjj^V@79!eZ`jl0EYRgtA>$razmjffe@qA{{Sj>8M!+}{{U{%xfY%K!RFC-XwXWY zI}hCgd95!s5*Vzi#hc5<-WM&yZaJZ9JEa4DO(!OH^lVF1Zk9o5pYWS2Hi(}qN@NfO zakoEOEORPOB)ZEmw`GYjVzALrnFQ@Uc0FmiGSbirNT1}qZ7*EixZA`whlnWypyDd< zTrTM7Q z5Ojq}0+8pu5ceIuN1TPM0T2NPpVpTwp{YKRm4;;)a+?l5Kq=d4gG%Ot|uT4UKfU-h2Aog%oRir&Zo+~jgA!hWjmXG(iwXRZDrg>*$M!d3KD->3FTkl zWH6<+YBp;7X<+Dn?H2fhew6@|)90E?$uCBHxl(k9l0Mg>>0wOXsV###$@Gy^=AY1y zlk_Tn*mjnV?Q*vp1nSbRU{fKML42`GXd8R>-?L?vI-8|v2S`XfpU#=`N%l{l9a@ojjjGbvkc&D1^rV77qPo%`QIIAl`c=U%Ku@iQ?UYGEMDx@5Qxl;o z6}u$%3iW<1M`_!N+ZXl>(JQkc?hhnW7h;Jc0zd$e4?piuAZ?HeK$E{eJ*t|1ifY2F zwgJ@#_*0=4mdv>jNwjbbQ?d3adWQA@5EC*z{i&j|xhT4qGOo+*+{NIvmL z2V-LuRwBE3b9tSFe>z}e7i`Iq1txyA3vhG^den$fNfK%q+^f^w|uzQxvPT-xmnim$kElCq}z6j-7!Tis?bB>J|F5sq4kf=R*A2kSg ztFS_(fxR2X3yOV>o_rVqUXjlm)xtDI1UFm6ffA$;Ii>_><|RoRC~wegKUyfs^+F}s zl9#BJK#m7`E-^(Od4vQ)RIa9}$b+WcM+C^|CaU85K+04SWqX1F1Kz4GizLBJmdwnVpe20<@&fRyYK|t^)ZexmtS@5`m zt>z=^P_q?WZ89nl@mC>AGNJ~?p$tXOBtbkHg;|ifAdw#X^r%>%xB$V@t>&QxQt(um z)SqLps6kY`AatlfWIU2c5+j%&#-Rn0@tD#9;-Li+=p`rdZ_M#fgO=PoM2>)-4MG`( zBq+!PcI{Axev(Pi2Wf-NU9t)T$P)m@=8iKUlZrotPdv`l#KTs2MPyed%rtQ-v!SxJWz=`p)93h$9zQvEqHY)KL!-cVM@b22UNT zP1^;^-Hep-Nh92jc%dl6Qe$Mm_NYOt&V(mXNF8>lMhCgZ5YiQ^VIB6UTw{F|R$|R< z+pS9TQ6NYYNt3p0gc2$YW5qj03X1MDYaRGKs->2Tc=S% z1Hc`PDtY5hDCl7Ernbn1)^~Xrt)-r|=qi)g#bd3SpOH?O^DyT3UtqF=8c|FVl462U zzQbNZeI`(YJl+h#%MRQ)wpxKaX(e3NEVxqqmdz?2(XzQ$5JUK$0e0)9*L>nPJ1CLQ z>p?FrO;bQ7UU{Q5G>ddGaNtjt=mjBBv~>3PrE}K9a8!{H^l-gYqu z=xSle;>4xI*Q;E}&HXRCvZYbB$w2Lf>=L=~JA+ z9U^+uB|l=^eV<%oHtk}ii-qe#ofiK9i(m?9CDpOm@~G{OZLOTc4ey-NfKzH)LU~MV zK&*a4xSJHzm7v}x&A0d_5UT{GHz;FMgnlhYf_}4H_R{R4H)QSY-QA&ehZMjeG6u_6 zU&@I}HB@4kkt?LA*$d3L{k|KA<0*!$^nj8?NsYGcLe{!AsHU&kPv>90Vo%|CQ%;0h zwn9^-B3xRG@7z|;8NnI;Dc+eez}&RMt}O6;KH=9ckUXW3dhs=`c_a2YMwK>iJ-EZK zvIZM^mJ$9SmbAFqQwLDmeX6HAj*zCPr<%epaXi3q`zIVqTuN3+Pvbhed~savPV~cz zM!@A4t}QQLwOfjD#uFxbenz@@Jc{?RagOT5ZgC*?G`qbTSLc+(YyjpDLn5?1j!xK4 zB+oD6s>1Pykjuf=UPhq+X#zWUs$wN1-6H$Iu>$H6$~`Wm1GeOz8sF1sC!Z3y35 zHADm2sj<;b?GfBpJ6qc!WZX7jPdg8#Sgso*Xz>=w4BfJ~+Ae9-6{}!Ds%<4~z82{a zi@z6a-~n(99VAa$%KU}s*0ChIBX_<&V0dd~$8Xz01d>#sC*$6ve2W;dKcinW-`hh3 z!;s<;h%(!0pZ@0jb&4O8BlKtTVxX+iT-o;H%$bJu+gz@vpFvWFq?v=iNT%b&-sbjk zr~OsONfC@X>%~73-AeA{h70lH+T1&rCq6z zN{CU3`c|lT=5B5;W!e7#_|1;HX>QPQ*4s|v6Cig?^``s?znWh`2L8$zh3hG1)Vikv zw^={{eJP8?gV-)odl=$BW4D;MQ_mOO8>M7yXV^~F7lRAXGK|*j*Sy#EQOs*~Y+>xa zQnEnOCS>*gw9oCLw9vU{n$Z%l`vGH5+<%B-$$e0wpc4{)N$E(-<3s%@JPqE)*yq`< z<0?9q6=R>rg`BuOmXDbwlZHlCFJKES`SUt+N^ z00MU>nm9jVWcEsJ)Ij7FaDA&pU8^WK!5V-b-xXvFv_iH?AI6@avmRc;&2C@-VxFa9 z*g**N$EYir9cYYsqxo3mByLrxbumy;;7;-+4)kzg!c@#0Nk9tNr;aJ3Whxo13s#~5 zBaNyHc^{#Z&8QuMlkrflY##Nf)dUq2)OM>%#7b`Z2D@qmkP1%+-lJO%8LQA8+a&=z zM-kehR#K7#+%ga$L~q0nDmc*S&XoYJ8PluNr9D1sikz&E+%k96jt6eF0iYAM`jlZL zr0q3i{{SGzSxF)W{Cm=*nHV|yP_PIJ)%<;^T@V!QsV7N@1D|Q3AU$@1Km%WMJkZWI z6lFplbfqRpGhBwwy$X4=CP7F$j^d@Fj6B4soy2#dSqNjSq?jZ}U8?!A36h!BJnb=4 zlOU3uT1Y8LS|elI^rtME>|21CeMFx|vN`seoUEJ|*rF7&q|Bu|MDbL~_>P)z9VC(7 zO;tazB>;;~D4{7bC#m8ng{TGXoGB?2*ROx2M#AD6Wxz-QaT}fZqsD-E{(~&JB^$u_ zrh?-^R5?6^lQjVgF!ZS@3Na&&l?W7N!jMu|sv>Hvw1>!g08XF*>lDQ{46&iwUJD`= zqJ4#5$PdPcA@1r~@3l@(=&lG@K1fWc6vWL_n+-)#;dwJUlnq6Zl97s^P)^E|-Zm9~ zAP*POf}c`J5;)qg?ox6Dwp<3l6H=jaFcIg zabAUz@Y~c9I#Gy2q`o#PP?_F4R4i~FNRg})^Tk3AQt(Vdfdi+tLJOgD01ypA4p8g~ zN~3P|2slfsAi)6q)F7yFGyAg=CZPp2h>6wHYJ@z}nE;SSze+gCk#=~Z52yt5)1@<# z9I135r9xwvrMWO1o#lVs#Wn#oU}S})gWW8 z4M$PcwC_q32zuls$W)%b^#~?!kpwAHM|!DBf{at`g70xg!T{7Gjp=_Vd=lF#e9M^8 zYL`y5qyS@j8O`>X_{DZ}`3vs9-EcJ_16#9tY) z3#YLMoWzM)D}a>}lh^6mf;o8u6up#A9pX5|u@KXbJhi~s_3D4KL(cRRX9e_3v5?xX zyyQF!dQ$0=`cb9(9UmqgA%-W2X|ihR4=xrUB=r9PiWxfDBR4mf2I7sgTkB`Jp8w}@kxfyI?N zKv6ttB=nAy*m+V)nlvo#jnd0OyZo<&-P^tr<&X*~k5KPFms-g3ZpPwKYUE3B>wApu z7V}SpS|Q-liobM5`*oV7FfuLLMtPQSrQv0_RN@&#>q&r^F$4~={AsaUF=U%hWdn|3 z?KO_uy$-myi-eudl!+#OmC?nKIMZRm7@M}r$q-0ndMMv32;((Wut(W@q9YoTm`|Yl6E>o?I+^6-z=V+ z83?GlLF^kZy@}dpD}^ReVA|YuAV$JZ<<^6M?l;kfPh>rBgfJU%es#gn3U`8f50ga| zMt3O6U7Hb}t`~-2*O&{cw{^>H0KhWeeT_O<9Z{*{){SgU(|6eF{c1x@w5JNm00`fI z=}2Fb6QoBnj$pTU#4B$#z|nEkB@%rgPc@-oad##y`B1t#8EK9oj3riVlm?7D=-zk{ z?j+YjUSu42vt1^xjiAANGqk$H+`F@Oz~UHt2wU1YT2AIV@_$Oqp%%2oOAfw@ml0zV z%Z+2$^9?B=D@xQ+I-`yHRY@iJSi0X5xw6FDyUTYNqJoy-xb%~>lezvp)9`2Z*{TrZ zqR6p!**AD@D$2pMDFG=PgsL~1*=w+=7Y+lN8)oGSL!^=bNLm()^g$ zD8$w5?e?R!vTfBhblR4r{`$X%LtYY@;eAJ8jfe zIr?U0ktb-RG0(NV?UEb}VhVss620Uel$Rf9YVx98yhia6%ND=+i!TseB=_C{_#(C@a%T*gI@#0j0Dj5#==-v- z?GjW74imXoawdsnrAC||)8$t_&Z6W$1u#4^J!} zX^3f$t}q-r={f^Vkb5VZE@^ZFg8B#9cwL5GUHOL4B=95+%^J;Y4~;KGy6?igDVsIL ziWM8qnrCF>ljzZ39=tTSX43iA*q1pFB0Z}wlZA1y_%p^cvs64h!EsAmU-q728ww>L z@|o^yhVkCdNe?CqqoCOx0ZiMa)e@;sSSs44G}eihq^#KNA*3awDMBkmBA(2SE73Ax zKqW~N+C?;5Ut*gi0kTXUoP3&q^GM7tM?z$6H3iAvL-t%E2#$CHpbZA?R}iA26FWfb zT6x$i1d`2Arqq%MosDXY(-k^zWUkH4Dvd@@_sv>+p;Wl&mD;!nNl_(U=AQ@XRHZ@N zatS3+pQkj-DNH$Pw5x6tv{RwcpCE4Bg9c;foesqX8#4r*zGe>VXqqLf6a#n;5pdg>#--=>@nj5a$Y1FT3sX?NKPFtm3 zl2jn_MGnzUy@K6gVQL(K?af9FL=^LCg#a}{>BUeySJ*B4X_Tk~9S;=LuWVu?*OtKR z5~4OgUevaNO|F2q4CyOMwQscdstHZEupP~)1SlDvfN*LRB)tM$vznz_IpPl}x>%~S|gFX*#B}P5y zY5kGGp84mgC+W2^*fw|`B~!dad{n=%WUNsygzS;1_4leGRH#`G6%aikGq|EsWwe;( z4+F4JJMqOcnicV}(p(_S0|Zp$ir~j-c|-yMnD17d^b14A-PODU&>woT4$$IcZ?{2E zgM>H<-cLMKAmBPkh$E#!3!%u=r~;u6gQUUJ9XX1GF)o!VNCa^J)F7Ib1ga0nJt`0$ z`;cIftEuf!fUAcA*pPb|s6Zp{i75b`>JS?B&>JWu51uNVk}XEa<<0UE6bS>dnp>M= z6c@4~ca0XLAf(5=07)c3alG5)B&lm8a1Z-ZXW00~Jv3_Ph`uN>WXqtuf=XfvxcXGc z*B!G)EL;5?#__ktrc{gO1>0oFAv%E59c!25O~qO^!yIVkPl#S4-Cf>XDXW58l9B42 zr+?>IXPG^j{sm<(n)8jz8D;X7l)8F@8~3dkV4AZ;Fs0F|80K!gyTcoYA!%_*JMMmK zM5;Xlo)Kewr;9v`=B^xBGIX8y1oetkYnIGu$EJ(h5XP>4<_waRBh%2IZ|7Qg*{&EO zwtLz&awPcTtHuN%i5+c|xI=fuL%9sEp*EGz}r&LeQ z(?anz*q`o~(YpQzW)`k->`x2Cl;E*;-S*KV&<>ryjSn4Yb}uPC7MFte=~dm<2-<-_ zdC);IzUF7?QW3G=BYKGu%{cJ?01m#i`@>GYF4UyyGD*}Ye}PPLYiLCAsedlX1DScu zV=A|rf&v+BN@d3qpa~p6>%7s%E%qV!-$XYR$mlsS+m;zx0J>3?kqB?1N4)i*wz^|h z2+^;3_SHB|?hZciR)y(IfB0&i1XV1ueX{r{^j#hfVa?xL7w%eZY<>MKxWvNNh!A`4 zJw7O0)!CyKK2F(r-C)-kPIk_jI?llfxWq7mwu5mDr(&`}FidS8^l8}|p`V7<7Pc9Z z&klK%U)`mhZK!Uftt!+{zQEO?QNpgu=RN29%l`ltZyJBfHc#5E0l6AfqI+~ZRBqXG z$x^E;JjnC;PZYnlx@=0qn*f=Vkt7J`o@r7211yPl1k0FG-NrJGBW-TA*j&5hNE`Wq zKtVk@qF3xVMlGgp(hJCI5W_6)!MbAQ4S-1044L27R!FJ5r2)zr2K0SY?)L~MQNleFw5 zirucr9#Qb~{AUQr2GNwamu{cBYZ7xwR)>s)$mzI&MF7d3W61O)#8wV ze-cPh5$*9^3~`fRkyxjCV!3B9w`=E%hZLKHE_dcRkC`T>TZmaAo|$>&T;pioa>>hX z<K|SC>&gMV^rT}uXvCivcz5To-P7p2;xs7vSnCOLQQ0PUZa)AwWv)&bZP5dw`n z>~1WvO2soL+OqP^fXTb^dL)%he?e6&Z__ldIuY#Fyx;bn#jfrbru{|9Bq$NI?X@Z5 zW?Y_sE{ZD{@p~G@gXvw{iz=NaU=vi^g4vo=Z?HC4%=d}L?bN51qOCsv z546Matk;S;Wn!09HIRY?lf7Dly$ha5q;DU9e`9;xa}{G1#@k+yQwdsrvVSgXLPlwL zQp@@~9pSHm_&!v&wP~C^1&kqc$6~`AsM& znA8d9=9?Uk>_s9~hF?1Rn;w-k4?QT<<<)^WKG8nH+({=?sX*`TP60C3%giQQQAk%4 zwL27dV9s}w-px(%Z!G@+h_drRqNJW=Oo}^9ONY9I~fXX1m9*EY1hn*oNQOKl{e z0mu~SGNP4RB`t)8_aOB%(wHhv&xzd0fy~TQ7T{)s!P1Y4g?wYy6i$PtN4I)_G#a&D z$xh%%Bo1k~`Y4iGxRm*2B1Fw-#k~p0lhG)&SyT`RntFu_an%yLH3Oig2{gon$~H)C z_u!H0k`D*@)1s+RDip)EWET|zBYnD4arQ1r2bd}J$u#BJorW1cl!y^Om&H5@HaI#ihv7oOO0$~ z?YdFv2`8-W`cSoH+)lv8fSHDWC`U~;BXrWT!NfKwL z_AAb}Ye#m^e(+Jkiqq5PfyJ;TG-2l{3EoJVrba0Mq}%AoI9DKo6CFCyF2dn{#N3pX zB_%+0=})0@jUOiAVhUt;fw`*zBsmVGDEeTH_n~pJ%-c~VDh8 zmY|ZQ05~xb?L`~*MC3SWpUS~C00a#TBe)Y%Mv@J}37sWJ*7Qp5|g@wb`(lv93k*W<0&5$Y1s#eeLDcXU8=}EZSgXd6z$Wk zGaD*PL$o?|D4rv}^us(yjlK${N>}AV=Do1g81z0Q$OES}X`-B1;V#JPNaKEL$`niE znVB2>)FG0eNE4{1X_)4r1pfArqMbvD0ywBa19ku;s3dkBOw~4*Wu)Ig%d3=y6Ed#8 z^<@FBZlIMZKo6RQHbk#6WTj+zfDn7oP0(;wMelKx4O*O^X{E_*ZyM-`Vi@8|9SL-u zJMBwNEe?)0`zlP$n-gk>l$XyR=835CA@GK}HM2Z;qi)Tk=vC`TR{W7XR$Q}w#zP&w z9PaT`#&%s|=o_Rq`czVVXVoKPT>RPVO`CW+q_%R~#UBvvuJ7)cRpQnNRP_K>3Fi(N zY8$&XCp2bOSl6l2TUOJk$=jM&CnQ^hBDUR_t=oKmDn5ih+8#?}qj^$Kxa(THS;+`; zevM_sELCp9sn$sk5UsfX0GjAqeSqelZi!XBwYzrsMZr)>btzCY$>99fOu2F=vMDFg zYhNw9tP0d2!S{wz3V=SPjrWQfd2^uD$J|wTQujG(uoTue-Q=Za_6>HsTNGTa)&W;3B6mNatj*FLhTHCn-s3Z| zd5U2{S7l-A#FRE7LJ8c*@Syn-rFh9Zc63qP30Pl)IX1=Xl{(elBI*<6+sd@TAoo`z zdeEe}=-UcG?;f(Q4VEyBA1mP~dBm-N;d4+{rvqS=K=(CLhKRA-wsLnF#BQ-HM)8aE zEjLU)NF$<$PvJ;OScN5YY(Indmo299-dTR(#VZm|sD!i{Ni#h2yj3)t(0(V#uFa6l z7`=n6hYWaMGq}esaW}!*dmeHbU+cn}Mto9*N!uw)IL@&Sd;$@;#Pc zjJRT3!7}b>Man%*w(47nDhlKS+B(xQsHuKk1(ynaj65gID0b1iX7q{{R@cw#4u(bdzS|$JV_+jbFVz_AyJpM#l)a?6GqH0Erh^VsCA* z>xUU#%5}E5B!>c~e@Umpt6)Mfk4C|G0iK%9If=VW(RZrNZ!W=tm_aL9l>zQV(P5o- zU*eq`D&7#hyOUnZ7=6pOx6ER93t^c7O_aD@Yf$P6M0}G^QBswn-xui8UmEdb;MuvW zi*fg6o=R^X4h_<^?-3mpHCeJXq-B;h=!$3i%Um+yylV)$KjD}5j9xPe;Yv@fC*M#s zi8kKCgj7Zub2N*)j6V`X?zf0rw3Nz@(=-ss9HyT}>)_d{+ZMrarx$Xczsf-=Gt#v@ z_n~|jWV0}53uf~BEnY3XO%d0TKgOzAe#3+uoi2@k&)Aa~<}-kcM$)FA(vEgAt%)_B zb8n+mBPhB>E90I`xw2bq+XSmqdV*8Dds5SMX~73I`5FbD(|FU?tvr`QfEhAC1A#P} zY11>y3Pn3}ns02cQ)pgvBV>)@DW3FYoaDa}A)B%5*L=h0DNKPQb0_EWs%?stQ(GVp zVkv$lYbQvV+n&_ESJ0?pgmgV->17CQA#N^s36n<)Xu0K4?6>?b%2)XAFL3IcaV@mM z%oN0uBlDx;`?8$W)8cf??9t$5qHoxG^@8ew4sK_9&6~}PUlq1!@Vp0n<+HH9A7z{; z2DfFTG}zb!=^PG}pBhe6wsbP8Ux{#+Et$Gu*h*5B0yhV3_pY0gIqg2s^6wn-oqY`{ zD^c8SupadskP(yiFlOz`h#qT_cToe6YO>~=7f0S7xk7x+NKa4JptlD_gM}9D(gOWL zcs!b_La8EqhvIECVJmDa_)mId8(kO8Bv?2$C>&Y_!ZzEHS|cZ7qYK%5<(r1o8-*1| zziQo%G%3KhSxYOlAgFP?^G{LwGs!NOWdY)Aw$}F7Do&kHM3YRM+Evi3O((w14aHt< z++9JvohmyHyVnECZONUl9qNm(Bw?%4mll#&#BmjcTanOE{A|9k)^sH#B}qIFirE*W zkh#?bijxC*=y&7utK|NKN(gM?kdR=c#@*=ATv^~+PTU`H6IKgt4;oqIDn17laa#a2 zZsbCBC=Ozd5o9EGj>ra8)Cty5} zUVxLbM{c2{M?FmOPmH|^YF>lZz%&h-pgC2}3MHi139Y4KKu!=ZIIGoS&|Kb=`qZnPp;^pU)S9CJ`pXQ8A* zisdk4ZnXh#=t;&}BVuQ)nkc$1Hr)*!X(LpmgX}4mig30Ld6cLVto=m~0;3kY1-WYl zdz~cJIHl|`W6TdxOi$`6ng!!tm>uRslc1B|wM8P7S_Qpml}rK%h%x+V)iA*C*(4Q6 zB?qV!92r;W8s(89L@G=P6d@$vK&Pz%)I z>qsZiwL*^@!0G%=3q{m|Ek1?m0clYuaWsajKsZPw+ld7LZ3Z{}<55YXEOH39arl1< z0q5F^+eJ`Sr-qOu$F}iSvVD*u&B-Dl0Y6G&WT2xjsS)aw`%tu-E`kl*>maO8JtAma zE1(=cf(d+{G=#(tY94K9TZ==0@i1W>_v=mOic9SHI;bug5>%SDn z8&o@O-%v?|ze*)1R0Vq-q3t?IRKbb{h&xNFL~10CVu?D~GFF8Xb^szrw@9WbpguM) z_mR$?{b-XOQHQgP;LE1XilnZw3rAjJRk~yB03rgJrE-_-%ff3A;OOsErkxg_A z{{XlfTJ)7c>Ay96(&!(JjIXgoI@wwj2falw{svVz{yF!3Wl9ME(9TGZ#_XrF4t5qw zC07M4j@!@sR$0mVHsg=kU0nF1Xz5x-+E%DLasBZ~d22?9!Ce%Gh(08=t9Mkw+76@= zH{^8{7G>;wA$=U(@ngnCS=~OuA1O)MAgFFnZq=7RkeZ}O;c41A$>QgVuBzp0vRjB$ zX>bFwkN4KO(a5=53Uc&~P{gxv#@tdJP;K!kQJItPQh67kEs%WQWToN3#HguoLST+# z_*QnWvNlC>ZZ7a~yMHih)Iz7XZRz;4aeE?kNUn0=a_FIcf8AdsDmMuPZTjz8mz^G{ zmc5P681fT=VOME!w;3802mN2tmp?B50E#4G{{TuSS$7OWImP?ihRfM^4`EkVV4q6R zktrWl>G$S^c}=Qe%M|L$3ilSp^Db@7SjFwi?p%3Gc@lT_8}y39DZ4Fr((H<2SBhJS zeP~g0)3{E_9iokQvYZ;zTLLF?^XaZX)8B;>jUUtD>(&6~F4 zQ(;Ng4=6oE_N^H)DQ%CAX(dL(=9|W@@(sEykex|NRN#%mlenzDUPaO|$`1P=xeqps zWMbGlEZa7OkSFm3%^FGi?K*`8z1n0{fg$+^Yn*}KFR zrG4c=DOR_NJs_um0(dnh+t}#Ay`z)Yi&({RyCmDG+)3-_+;K@%hMFrR3QZa4wQ@!M zwpGV)gqj1Y$DyeRur9p^9qzswG+2MDZPN_eVQSjTusHb!rk4UC0_;o&SbMjYWtIK? zOr=EZ;$%#plg$E?0lGKi?KGBfOuykj_$q_Mk#Ovjq>h|%S|-}rl0TEtq?UNyu4VAgCRkiDgyL9!IQAYvSEe(joL&RG};n+G@aV57d3pWCP2q*aQSDPTuik(Dxhhw%X!E7-F zI39A<#H3E=_^OkXuXw_12qPjk>K}d5>ytB&)L?SV_GXmxuly3*|KJ<7GuV zK^u;@ROzZrLSjLr6%0#^j%Ptn$p{zayy+2`p{6lv42T&&4OBWW`{9<+SfII$Iz>KchBc?PF4oqZk$ zHL5q>iY!~l^f_f@M9PyJj?`)FTS04O=>yWK_cVVaDued!?voNHiqk3jGm=|32`Dm7 z`<_0PAumNsO37WDss#Wj$GvFADZ50j)zhUUL7ldy$FWnDXfgcj`7x*JRaj91qcu}+)&Ck!Ikz7e$gug1nKytxX`{#7VVjnDNOrSQCyfY zcBi6AosYFf$_F^a4Ul8rn52frmcb9&LY8+)1IYtivm$uj_LGf))IwSqwc6S>^YLh8)W-~^Qd zQxVU-8jG-H9cW!E3R(*XF;sCo=aj`2X@ZpwJsnqGoN;KV^R$hsEC0px{AB#*5c$V57A;Cht^ zoyRmw^6V(R>~_<@CrAcnK50)(r`Y+sfC^KnfJDbiI5L|bHtKhg2emMRlsyq7>F6pD zbf;6vR-!i(R~NmI^Y1AMlA=#xQeEhVUwZ{23Y0kzYAG~Sqhcz%PT(lSPy10Uj1`So z3lPK-onb~tao&&RUqyU-vJZ*l2taWK(KELD(q#Rb5=^CW-1cynmg3$0m?TL&`%rU3 zJ|J5@EZI89ShyNiH}#Ht)cFv_AF{X1-X~$pFQreG+=JFYG#O-(Qisv1IrGH!T20G- zaVRn;S07qhl4{4n?9q(dEnlf2JbOq%Y-WtxOqG@CVNOSjq% zDb>E76)NdR9BN%N3z{o-vl<2@3PO@rcL7|_2j+=*_USN-7Siol#g)q`TAcF4>W)VS zX;Y6EMYPC{358v|jA9G5P;bgdozLO`#?wIG*lQG;w2R)t&gTCB47~H(d2ibwJ1H@# zzOxkz!s*nI-y3PSal25{QF6m60Fos7M(XcFCU1@<6W8t$Z{glIbm(oXoKE}hE8rBi z+DebmlloC(t}QaTZjDX3y%u=Ojar=u^8Wx4I}YdODR70fg=O+9qA7QXI1A0CLraa5 zw*bz>O>cf3G~3Xo+=%u7>Yl$cpb~XXk^A5CN>cdVh2$Mv-WwcQ)hS3)93Yt|(r34N zU(GfL7G8OG8MMV(#IWT!;#7ocD2>zz+{Ik+%|~RC>4^9(h1w4hk!g8u%gx>)`(y_M z1Z^PCeXBHMPT8%=&Xjr<#XzyfaSO*<7P{Ycq^C~+5-Og}RBq;3%{N!yV=Tyvm&1F+J(ikn&+NS#r?KQ&(;=*=em8*Q9ZgMZo? z)BHaDHjO@p?yc?Cf_%9V0ewA0?b;~h{)%2auFijF>>jqYX1N?BkNTQa@g03m7A@Yvnn#*iQW}rI4kX^2gF!TA#PR)LDUYwbpU!`cBeZ`zZ(+b z(`L)&JY455v&IRH;|Xz##A7!$!ATLJ#HmFlc_5{62DT=iErA51lJ7?!?XKFuvt7m- zrygqAoJg&1>;hHHj*?&s#TX=SglXGlx1W4Mvd1$19cO9o5}TzZ z0LIB2MGU1{ulX}S8yb;Q=RXOXUKe9;ZqsXdWb2)e%`fEG%$WT}6{atc7{IOV8!Wa$ z#_EwpmDb{A`07FIp4u#NHMSDckP`%I{3fzTGkRw1Ql+zFEU(3lot2;k(&z0Du~C8g zQ(Dk&N%U-{RLm*EaEo@EalgGf;2L0^hh3{b#U}J(lv%J@b1*53W}JD~0#r_&K*{#@ z`K@^HO1~pC@bYE9hvJ@M5`5C2lmj!jc&>&#X$nw9jGV$(mV%mAqRqfc%>ERSTUE*$ z7UdN!fvhtcU2#QfDj&KOWY2mfIl9aUX-o57NE)YeN5Ws=&gZ=VUe9Q@3i8&a zZeaAO#g|Qq+h^q|;GpW6Nmr}Yx%Qxy-pg3cfyfxk_wU;%s#HjyVeL-ChuRgE6|;Q2 zJ_Rh>>Li`Eh^^^9jF}#+zg)x{v$9g0Q7O|pd)AdyC*(%5c!QWza`UVqN&tbd<|dQm zWUj)%`7$S!u&|;XDFl-xQP#ORCY$Px%7(ODwunj+1Zj_b>fn&bMWOgvSsaAKaWt}< zN6K+Kz}|LA=AafdQq`$mqy6-nY*binsxj3B5_cZ+A2d{#LhX)OT2xXKBp$OBU^v?g zu&_4(NZ)O$nOrNd#k-&?WRoAQ9A3pbqDN%z;F4tSIIR)vROpmgzXM8?W(fGLE?+{@ zNR?Qy*fCPk&v@H@bOcvu}NYb&>dcF*w z8wbA31L@RyP=y6R_pQQ$!iQdXnzV)~q`zRtEs9c9f~5h;ii`;5rgOkK5S>75f4HwK zdX}tFE)%k#gU73ifN(LH3nnyvq|^rMqc1R-Bac)-4g9l=u}A|DcU)j4o&n* zPo{aRZOT<6=0|#9d=ctYQ@{hYLMl#$TYX^4Oo7M647v;|)8WV(fmYE-4af1Yk}e>S zNR!Q2sYb%BT#X=r5_<1YABp=3HvXbOoiQLz=AkD9m4ushQa2I&OjH&SMZqY7Ac51b z#X=53(4r)Xo<$OqL33thT75dU?KLBjvX;+vtC^K^F}SA$+3-@N5=_)7$jV8b;-DwG z)&}ttCZPpOiYM^}6Hv5;1B9qf&^hZ+T(SKNrN}T&+)p(MgzH15)~Ft+qEevblN`3; zjfkG-tu{Rilu|>aI(FYl;%HrfJ4MWC)K0`~Dy~JOE-n+$jZ@52{EOhv1||}qhYEFX z9gp;;0%Gm@#DJvFJk%f|+)2j5?io;D`IA8zHpnE5XgHF#^qA!*Xrmwp6vpk`OMtqR zue8v~(8$8dCpqSY;mA{@q$i;UO;YxaZm;+13JHyezz=odmCPM*jf9f?iyj z+7IGU(XIKn$L4PXjX7}Y(gYOG&*lwhbCdQtVvM?GllYV38ZT~(*6*ljmgFuB5h7_5 z>}+vCX`1hOo}Wd+)|b?xWQFSDk!|!Elvhlzaqkh_RlUPEF6wD#)B*kNpw-l#gk{SK zX`^2;EXJ$Aq>>p5UXrc=6|O!!s{a7;VsL;K?)}SW(xC5{gs4CRq3R7687ImW{{V5( zNv#*(g&2w(%)<=4DRU3JV1THAl_+gUow;nN@?92IaQlW(zIP3@ZrQ8jW*fLtWcic4 z8SS+$YjkY+W}|Pg&PB`)J9@*dy0i}{w6IJCq>ab8t4#`@ktsuyLyT6{H`vxD^`eSY z6ce`4k|+BVcL&&b{Dh;jC*p#Uhvn?4V%^HxTJ2YIM9NgPD38tntI1T9P?$IV1DjfS(h@}lZk3{<@zEh52cgRp! zQcF&y1WLYo@mggS$CC#lZELb|b#R+pOAENNSVh8a-9nKbkdX&gugcqylGK;a=XNQdE8eI!7w`jw?Ih0M47Q?ON5C5a!P>hCXoxRnIydx))wMz z8nI^S-EHbwN>qQ%$RA(fL_}={OT%2p?Qnc`7Ut=zM;x(RgK%7rK$+ynG*OGRTZ1;^ z#SDXhVR=6*XB@ctu5jCoB@V9D2wI&@+D4aBrG6B_Bzx0|dZSVBmn~hq%Iz%*Dr)gB zmf)2x+>sv!3?eNy7RAo*bt!PExEod~v@9P-6F zkyiL|oUv<`JUYSiMjvf<&Kq$50QhCosE9((;RN&x1p8G+`xQAR{{S5u(Q%v`z3@LA z%PMU)w@lrl?Y2;@Km4RTTU?INQg-P~(La4^-Spe^~1C?Z5i@Aa!sM3wp?7>}EVysLXvtT-J3-AAbYBYIS{W`ri)$lH$$ zv$fhCvbMOpEw|(;C?Q*jAMI5ti|p&e%camYc%a3xTwfHpbx;&{AG|vAOL$zKnI1^D zV8ZiD#h6RU*4atYq9#6+a`ELIkH?op$!b}}cIcT_6t+yXNYkmkcsLh^DEu*5@ z9}N4wqbdoLv7hhawZ@n7rG>lEiD>}7opLxKR*5@&%(uc0n1#Y^LI zOmW-Zi-RWyBBhfDNKo%EVy#7>8e)E8j~gCih^umFv?ztB=_w?r?0S(^8M~$*4QL|U z#2v^WoyTfvnn|w1R?esa5CQk%pbcJ$1*6lX=>&p)m7)^9yA?G=n%d?9Pdmw;wWbL@ zF)~)kRio-zNfHzYr-J9`m)orEx_OwU!Hb%;WRA__sU#9)?*sIwv{ zQT7xh`W_^149WUcOkkRlB1i=Go|SN(#L8A+rnHg@w3z*A&R~ftFn8at(tv|PCsv?0 zFeqAJP1DfD=C{;4^%WwSaFzBAaj*&4tFJs!474zDtwae4o#v{LAeYe!03;K}^-^`v zYFY=r%JwH?)OMvMeG2F3V78Vw8}2}>ab$5%V+TM~l9R~(%@h$_5zPHyfS~}W$IW2MJ5=nw2ll7W7$==E`3k3RPk<+y_hGfps zw-pF@6nG+c=dh?#ze0&wk5FVRW1C>~TvSM{sC z1;swaL*X$l145+lqByUk!F1|Da0D!Y(2+FNHUpgr99^j?aH)rfMREDjDX^1ophf01 z#-bLqh4DS9Yz_>MznV?5)Y9BqK^sc8SHb>9iA;1Oss!BUCRh%B*&ud2)k)cHQ4_xL z3eL=%hHg@}hpB1Rx@w9cIM<4pHRZeNP19_;fjWZ5`*3}#1sEe(GvADuYm5*t8c|A$ zRFa|TpKe72oAhY-=^9nyFNnBx`!`p3ZOU4_Zbp!?Diwl$MVAG$pS~e@q@^3iop;Q9 zB&9y7#C0Z*S!JSRJj$Ac$ z=FY$@?y9FYWy_99?4q+Ca(47O3+W0>|x;JBmEf$xIm;)G^ zn#>qj{{ZAS{{Y9iY@T33SNUyKKeDi6anma77aMaAO_RX|tAw|p@62pzWzQl`nkFCj zDlDJGE?syzYVVX1bq`DfBlYP{x}z_VFUprhYsGv`tX+9=M0rfHVA@g;m=pc1&@Oq7cmXf8lRhTp=YaB?xgl z{weG_*Fz>qz55e>i2D~TD&gDG-jo;%6Rhl|oXYsGetO z->I%O_K`qT4?#OK?z7a?bZz;8ldIvS-)1^8(%-*&RouR z&#C8ZR^SR+$^QW3FZ`ooJwSeR{{UQt%PhH3XlH!R-ap`t%lJe7R%5{smmO&d5b6tI z1tcDWnpEX#hhlAH*`H`_?A**M-x9vVvFy8vIEL(R)|-~Z`duDLDbhPgs+6pC$upU`&?4IzZDppB=W1=# zq{pvuLiRHyx5%gQWi1z2Rict~p+qQesWh3vt)?v7KMC_4jlNgMGIhalhk(0f#*{+P z>Q2OgOpaRYek_S--S_hw_~uc>*g*D>1S_ZEa-;5P_W&6?A*mgRC&Blk$v`O-dDXI5EZT05WiWwOin7!ECf z;#Q5}*iJ8qi>m~Ys5FNVKWE(Tksid>+zVWO&KI91&4!r3Lg#$CC~xgRuPPn$&CW&~T}cJ8F1PAN!C zkPit^8mGNem3lN|#+j)t?kg<695DlfkDZw440Vd(ky(bm@HELt|U~Od-qbLFG|W_>Dbjdv2x8h{*9*a zqZPxk%M5o8yi$C|Y#h1@Ff}b8`gi?4O;;!O7C9@nhqzF{tSqpWu9)$M-dEb13ws&&jDhXAyDAYmpopKN9TJg18F*ql;*-GZ065I~1!qILBK;C~i zq)toyCqoo%e}WP-OO1f0-bo5Rt;~vDvXYC?{?jtty>tUaq!J=bz~_ptIg7{(`FycEI$k!$-t+jZ&5uBHd02az*>upB%yW|V}f zN{AJt$!jCOKcqpAZpby^ryujT&S5@y`TZQ zk9p>s4$QKfOqAI?Wgx-&@mg_;Y?WH8Ty3hFgc3_-Y?v@dHK7Q}mb8Ox6#D^32eA-t z_7!PB5!g}kS3`%4sU|{3pU_idDkb_Jr%6u08Q8^Jl4uFW_GF+mz$ISYsBLzI9+HAM zF}F@?`7voq>}*;EKouX#n6g;Gy2gXgrmpO{LbS$Cqf$0bp}0G7Pz4%x4s|KqC~$l6 zROPw|8nlrhr%>mPYRCOqx8 zm3veR8Oqk)R3}jru@U^M$Sh~9po3#jQ4onck=kg|V9Ip%E)t}b9b^&!5xh|=7dcs& z)S)MBE8-?u?zhZiPR3FASp#{21w2}g&^8WyOpj_RVA>PF*>V3sn zf8mbM@#HBW9w2d02}4#rZQwMJbc4k26$OMDf77{@PQrNlR3Kj7;A}|~JWn*YJ&-SK z@`xIMJpE{t(E_Zy=>(nn??gfKPE10i&ruZ$2Xeyg&xIT{V8kBjave6Nz*Be)&Brdj5g@4y9>*dUI_t5g`|!M{qN;V zmz)0pOD-^vqg64#`i5qU3|`{VP5H$nrULd_V`IkDnSWBr_RVC1bipam!_>LaB06`p={pKLsy9Oc=s>-$OOhOw2{-rl$qCw)YL^fZ^6!T2Q|c0+OR z6t6K0({PuTvPm$dOpd>u2OAk2v+9TjC5l|!JgcQ4)FE<0fcz)=Q7KnLK5UPqN3l#z zZsFwXQrsg+Ttxn^3X;A&?+)$|dByua+vza;TTw5E;cQ)tD4tYtqN`Vle$tSUo z%AwTYgiEV;O@FdF==fIuoS9B7HI^i390E(COuiMK_7qJggey8n8)QHmfb% zr;^fvAkS`wqB2RY%EuSRAH*7N+Sy>CK&>C@P#e)(x-eyod$M_)+(pH%7Q>FDy6zg% z(n_Q!)5o^+T_?&>N-SPAAG2FA^`~8`l8-51!nDTyKUxf5BwrZ?UF?}-ZC&D7O^0p+ zr71)-q6EO(^c30P-O-iCZd8Z^X-ce?)wy)3*0h-CP#sTBYdVym?#lS5eT!vB-o&u0 zds4R*b#CIBDVZ_I{*|U*lGE7gaUz!QyN2e*T5%z;Uea{|w3@>#b6adDHuhWs;j7%o zX>Q}L7Th5#AV!csv03EZ>=@;bNZ20^ZrZ~x+rse&9J0aj7ag*4!RFDJ{u!Gi>#TqF$`z+o|bou(oR|0pR){*mUE?$Ve`ks1klG%ReLX?>5 zW4#pRtrT3o3t~)K=5;%Alv|;eQsTCe2S^~#JepQE+ooDi(XwviH@Q;J6~P+B9Zixi zh9XurUZ4yF$8@NJS|>KNh`f0{vJI87JSP~<*p0=j<+dDP+uR{$6>`xs2^@M!kF6@w zdo@BTsh^;KvXz5v_rLecf_29e~04uwpCKl z<&eW|F-sSl*(+`V3KOv*DR56aiqDn}p`JcQn|`RP*4_$1p&qU-ScJ-cOlF1n-_RvKEhZK67X(rD6aX8hhVlyq$)IICHm zyG#3Wqz3gcwWNRKQiPEoT54)qvnuhVmtr=p;no)xthVEeX5EDXk_45(=kugb#*JEL zs5ewbt@5TIFm>b35f3SAOpTD(CvtmpyoG1x#!=@qCZbWwgfj-rt<7z8n<&ihC-Bud464I1Uno0Ff zq)_quWPBe*tASBgVjU-8f*ZyhVHS*|O(xbAT3R!tp_Ua%c5)Z%9y6SRH zsOC-Cyck*oRw)HiH1*n_87ecxgJxit7UGo(>GMm^l910HH1t6m0VMQ}0In;_bkkNU z9ZJ-c$OrgPtk2kTN{kDTt<-1RwMUZ0v(GSuN%anP6EEqaAd*G_&522Xd-XIjc2lDO@dZXkp~0D&q{D=DW7Io4m2DsmxTY+FC@E~9 zl7$r%lOvuf{{SGVzeqg8CmyJmSw2DCK#)fr zD`qJ-*qo8xiJl(!q-r|48gQo@?2_5N1dw(IiLDTkouXf3aAFohLEz6HHK1IfM55Jd z5J@D8e0oMX<89g`7R%#I9)oTumty`l7ij7nfzxh2lONdy|) z9mjgK4om5K7nlSj0VEBLP`3##&k6_wbf0e33KCk0N!||wekkCA;KoiMo%Ib~)Y>GQ z_BL8{busPIhE9d4+n`gsmBaz@&*e+x!Wy`<#1J?;Q+*H=`PoV(I=(4RPuT&EnI}j{ zoN!dUEM?qdSO3z=G6zqR)wH``RorHHj z)ON(Zgb=0b(o;J?_xYw{wk}Zm9VP)xL_{5{OjQ8W==3%_m`+r9~hfp2n!35ZPQi{hBIjj{`&@Q-~$XWExHZ$&{#vtP5{jah#Lvb(jr#FFA;ND7IW=&z@0MoiI< zZ0JV|Yl}HS<9FMt-y|y$!qI(x69h8zB`%;2p-G7cV@i2b>6Hu_BJ_?bc=z_k%sI~H z`TQ#q!tWSYB?|%39mLFkIjoL(A48;*TSmC$ZxK90%#OIw#cpjZ9y&{b#FTN>8n@!9 zV#@n7&Q!l1&C$z0U~e6KQp4=CHebwHV;{49A%0TJmhX+YP$5a}xHQ$_MfS{%e8UJ#&(?aFy96@x&_M5=h*J9Zw7Y07`{6ULG{6?9qwjlCC6=8vg*K zzlrYQS66v!6Jp~tA*CqWTml=p1EN$0%jq3yQ}Gg3hDR1lswgX8v6qTAmqnJaJCkqkMu%`h*8q7?Mx7wnKqCKkY$s4A&gkuee^jUeI{CHQg!o0tG7{gU;8$!xi367ycnGCjppNy+Tm*E}T%FOw9&w18c zPLxOyKA}#>`8qSh9D{l8^6x9>+oj+6@M1)Ttd9WNti4xtz<0;kP&b zQq<-g@(llzr0v{{V=2L87*Ys1+xgABs|!D;`+xy3^To zS_aU7hDj-&pmwbj!O2syYuQNu0E;AI77ih{(7;Ix8hGEeb8`6UIz~zP6zLw|MOIkW zD|AYmw^TaRY(bgYwqS%3&{C9|=wpqgcX-9NBBZ0t^JQ8Gc;fL~fXlYl#jC4le5JSqA;TLP??ZQIMhl6& zA7}pn5#MXWyX-epVHk~yt?t4P<8dYm$S3g*C+kgwigB{w@P`_+%$a8I4!^cl-X(`( z%!Y~pD|xNGTbLk1W~VyQYFp8CH-CF+pM|zJ<_sNo%s#ahX!4mLp>h6U1W2HhZ=+Tj zZ$^c9zmjY&Gk$o$a^Y&}7uSnw(bcE_060n72==8nBBzE;+BMTJUFM$)yh+0shg?5p ziCSE?l9|#1cGM5C6H*yC>2^x zk1V-Qk&Z2>@iiO848MPcW=o4Z$60+2Hj;&bB|x3OAz9@MbcZQk$ipg4qo_r=Th1|| z{Xh}0ps+jCfPok3W_Y-F==R6we*G<9~aFn{0?%LYaCQnF;B=<&z;!Und z{WbVmg5cSM!j|zYy^A@7UgB2@K+yQ|nM&IArIc&}Ng-YKJJ(tt!|^$p+_|MLmd!c) zRb1Zx0Q3XFpBij1f^iH#5WB*0pu@bBoeM(5ZiS&HC#_tf{ys@;=tBaIc}4Wqp7^(L z#yjCgNAX7s#6~M_-U9Wrfp;N4c5MntX(c0b=_L`~k(oL(LDZUOHFF!c8OIXxlF!}4 z;jIBG3Q5!@Uj$b^QnpmP*`yiE1H>^u5UublEpL|fG9X9^3Oba2048Xrm29}qfmT=W z>Y8QUETt-MpTs2p07}g5bZEuoB>w;+O@rONhB$=<1d^HJOdsc0iY+^4*!dQXvdB2q z-KDj+nDf40mRdhtz!so0rilX?v0i>!Yh%}ub_Q;2nCD;hR!B*dT2hE1^3 z`!|Chz_7d%FJjqo&>y&J#SNE2K}Z^8B1cm)X>K?8u&a7Cn&SpIUTDMe<>H;SE-;rC zg(eh~?X-6^i)ryR#tH3q0M1TZHk)B)q8eS=fCp`XjwX1a$dcJ#DoB0TDBwA`j2h}Hy&o)QJPbxTf+rH7($A7 zDVaR{S4$LEvn1ZgHZg%HsZW9eh=D)GpYe&Bk8Knuj%r>VlCT>xfL(De-K+o#pr`@* z14_*nqd>wbZ08HMPhDaUT{x8~Dp@Kqx)1zTB?)^EZS)wz@Um`%HWZ>GamQMcRBpvp zrAEbMjI}N>bf~zX2XPbpYU1drep*LGJQ&LAE3-kiTWzI7e~x3lYsVz0%j9BlM_0Te z!V3&rtfm4$AV*Fsd>gAd@9f&_6r zQ~(5n)Su^AG;|}4c6c5sPU%#1gG!V`;k!q{&|yB3J%|+}AF@qZ;dvmZlRr)B_#ikl zKRsWF0%Pk%#TW4ysoe_vA_(nPM-eYF2`LIp9z`Zj$poKfCD_}Jl4wRHT?;n$k`f4l zXMXh&Y%6bZ8c8bE%yUjnRS9sU9bw=U05A_b)`Z2$St7H12;2mnx^GO2XwN98*(|Yi z{{WbCTQRmGiH08W8b;@SW+I=>3ZG=Q+47QwB&KGYjz(!JWUmdlQbH5C_wQPw=~$_v zVQS>0L<-T4c4f&ny$9{wBnbw16HF5Mm7XvVI5p5H4c+bNMd!N`wNhe zM)S7uP%9m48v;oL!J^}M&L?L)K{&Fo3;;e zTa@kyJJKe^Nh5NL%BNAVAFO^mIQq`i*YPM}HjD}9Gk6x8fQg=X!%-9e&2kQ5w=WfzqnMlWU;`sKP)@bUyV` z=$|0jamZSe`qE$Qry;3OpGv}&6S);uTAD(^(qM%Zd;v-1!)<+wHt{A($w?anM;Y&B zaS1fyy(BJ7O)#*VYSmu-krl0NWMw7h$ifIzN(Y+UF6 z0Fy)W+I0?&ZT|rEXT`q~vm!09`)?_`w=|*Kh51(32Y{5Ref_IeFA3G#7n9DL?A?D3 zKE{~dW5qE0j}!7Ag;_z@0zy9cZy1Gik zZCw_Iq>h`_M=dZ`2>L3I5WEY^Ij0S|w8bo~p1Ex$v^*OHOGx5RwKh^y(+)V)c5`#Y z&$8|nX@=shV67l6ptUWqHq-shCoVXyhT@MSi9RZLTZrM(WheKNIgf3r zHu^BFE{7j|okF)NmCpSE=>O|eNrjQ$bOp7oWn&C2== z<(qKr)*{o7B?Pus+oezt;1V|NOu@$g03njidPT&|^El6jH+O0)xJy@shtNz0iB8J- zCPjB~xTyX+IoV|uE%s2XJ8;eVm#rvKM<3@Pr4wnB#T2OTRSjcC`4BYw-@z;6((vd(X5tGC0LQ+Git zZAkPvut|Mx2eMqhfqM&P?Rr6q$C$_ThMAmu@(OgcuDts2dJoAATyFpZFv? z-)8#bw+YOch9j93h_i@0hpyNLq#Z0Q=?Ca}_o`WaQ0c~>=!9cgPY-{^p9@%e#Sb*f z?_Io6+t(hSk<;dx6>L(A_}YqNBY$B4ReWS_`wDo=U=fJg-kY}WgG`}G3go6a{bH&9EToFP z{6`M7ZqpG%X?0AtlK2B+7B>(#F+#FNU66&~c#@HJ@UkmQKY0oSm>Oq#D9S#WO_FTO zo-S`O#{zK&%2GlAP(O!=`P!~o7fG6M=TTY=WJ}?DjA89Q=bXw`528VX{{S^{X51gt zS4{6O*`GMx94iXS_bO#LT2R{B0pt58NrDf`XY!`_*&1z2qZUluo8oL|j@ff9W#6*L zip^c7=Ho57j3C@Cw!@xNt3-uDw*bK0aR#=?VWO7s+!HLPLs_7$Q1|>sJ<9Ox%wPn6SRXahtqFNN(2B*=`?H z7Z)23&MBXXw;Nn`TAmwOYrn#jwF^Uf;%-*(*de5zs_E9V{4Kp2l)9sF{5e(~iCyNL zO8K{OI}2A%AePp4TL?+hGu1>2IN`3taksJsWrEpe+~IwkaYp|D`KbyBKv0ypM!u`T zCIC7Sx3MSW)Rq{i(qKapB~7N$77en~=TK@l?^$uh-p5JOq|K1<+S1<#!fdbDZByiW zl&{`B{{T6pWP3ACO|xdQBGmb5$JBtQlw~vT`d04^+u5E`Zd7ca-P>-(kV00titIxd zvm~J_q*oc1-1#M>x2omU2GWpb0Wd#}KFo8qrfX-7*lRehEqP>6q*~cqH)xQPJEb6O zc#>!Htl6cyG+>3RW{G2#Hh5>8kdjn)6Z@jF%Ga}III9@o&7sHA2klcNjpJ$Jf<2CF z(YIb2;7%{@cMFiED`7o36`~lEB$A4?{{SaVJQd4|aW<+_R!{(g)9FuGsKb}Za_s4T zL&A#|%`GWfK-viFTX8ngf_;`oBX}+CloDbS`BAZLF4;V8sNHgz67A-nqhL)K15LG*EPO!td z?Y#t>PeSD_XkfQ=YC9$j0p64@+XlSqQ>beo{C^54)fL5pUwlXbLu1ydu%jCWy8fc0 z_)HD^(3&y6J+M{7-~v#k1IhQOU&t|f;3%2cp0UM3)4fnV$5H~EDgj+OZ{DGN5y?gt zs5>iY2Ysu;##Va&0F4GM-Y@|rJ3u|FL|bB|gW6%17D-72c8LvPv(glKBZ&iwjIomDB&SFNtca)~s&q73L=vH(?l`4Q?4h%$3LzjEI|J60 zC|PPYAR1WVVn@H}N}!w=@s|>W>XoTRDpC#*euu2Mq!f@rPW^eNLHZu!pv}6{3<2to z(wdcslc2K-NR#i!N~tO&U9FNUWe^f$etT65l_$_{+@DA(5(Lbh>5!M8Lo5>@1^nys8#T%OR zMuB&aEvT1DP&wOw&Z)O9h=|TRj9KAWYq*8MP0K)fbt{#2`KiP>W4E(Hd}8tM6v8ZV zTf8dEFQ(D7D3n|yQQMdzvgOFvv!{;)8>4`~YLB(zKK%0+8Ogl0h@(=pSvcyvx&Hu0 z$pnb&T*>8>ogukActd?0fX_c`Z0U&NPFsK7n2sTbl|X&ug0yqKk=|=WF~#avW(S%7 z0HkA-e$5^)c;$)VS%V0^e&;CNpW5FxxN6x``|5)q9M@mR@mKn~GtN!3x_@PVun&kC zLkhB8wg-_sMoLnUhcVlxZjG^-^fwZNyp74C%`Q4lkQgyV%l`m&Hg;dbyazvJEH#V+ z#P134tXC|QhMRW6)eHNu?IlF%p3pt3nJ6gqY{!XRLNEU1=Z0jgzjg)QOuM+sSi%6( zq)GtxT0aVhN?XR}t-YFW<9tkW3Gq7)Y1<6jV~1uNazdK8ZMf7YtaTmfa>tUWym_s* zhyxj(;gvOjT88Nrc=u%$JvD@*7}Q%(um6b|1N zhcAyc*|F_i6Ab?Vo)R$ooK>VehKf?6fFuQt&(nIZjn#>S)zc}o_`r+ID(c}kDn3%7 zMDGXlnHcDQQlLRDonh9ifT_P!s z*xTWcJe5LPa3r?A3Vwa6EX@?*eGvCAUu|~@C_+A$?K0Z%yB8O>`Ohw) z%`DuqA7wH7!=K|_Z|SYJ(TmGg)QF?(T|IE{VV4%;XoaaM^&}4T9%FKCS3{E3k_?RV ziW!RvQ>4D2G@;Hn6h1b1LOpDfdMeCg3$?Sxl)~1hEta(r2X@ui9+dw8la|q$?ZK{Wy9XXi(ICU|V~1mR7i}eA zDdOr#G8Mf406H7pnpB$Txw6-Z4zQZ<`mg@;jA1tY^M@>HT-UA^OEi;<< zlAX$l!|ubScMH^)Qla<&F$7jwNvGH{!qIYLsJOq%S!LU|*f+Px4I|VJq^crlIc!VQ zrfarqVf-w<+8$g0P^6Q&Beeuz_8elEu0dwv=~#n>0c95D!77j^`HpDu3^xyP^^#dVEbTO%96u53`IlwiKn*Q763<|weqxoqk`4mP;^I=yFt;W@(w@k7Im za|OP=z?Rd3;>|7+r(6w^3=Q}o$mY9BDoTz{X-+LoI&IOzFSKK-%J@1mous#hBM5KF z1rewPX*0l)5w&u2O{YlT8+_t_|vu)|HwRKi)6T~3%_2z>m z`z=b$vi1t6ZSFC732je?!W5{J$v*p3;j0><_H2$o*MFCB#_jZn87fMW6TY1zbKFV& zDP(xxq+dBc(-y{>!Eo#_ed6>6kqsYG8r>sq1ew_H)`u@A{22TmE=#s;E=tF485xfY zX((W+q*^K>JA$Lsa~||7BYI~+!KJ23t{TH|EHerWsY`h}op6Qq<|m;v-Ws$ic2(Bd zd04IDu^ZNzN*3y`E*{kZ49uki#}Bl7&Hn)AFVyz2vO57y#TLSr56IdKp^7T%%MNX()RvrwLP&s=4upH} zK^za4sJhueHkXx*`_`!;!i32n{*QG+pAK^ zAaYedprqxM{{WLt3B{vFbABCq?aP1z#>G9Ile|kd{NXN3Ua%4Y%rjJsRpf;ZDVj+7ks3RZe9c3$E*;%LHgYoTvGL`X3a z6lJRdigS(y`lb046{aJ8x7#)vMu38k5Z&Wm^>}yR=Fz9zKMrJ8(?a*iYEGVwpUMG;zqfA@h#`Ac9lxSMq%n(8b%8 zD`0fTy#sbqh{3v1YAm7TyUkEZn36vQW85(`zSN!X8_kF{3> zTWmjV!UqPeMv4vF?shtM@4XQMtrY~M0VkcR5s%V3@F%TAX6+fs9{uQDl}CrtlRJL2 zPFD04g70oa3l0SYjw+H4HCqPaH}>nYb#E*JiP#@e?EB;Va>`qT4#Sg%70`Z6TByL2foO@AmKPJR=9`n zY~E;GwD?kaeV5z{SRfcF0ym0xk>p|j0B~@4`KI^(0E4!f6k*r}sQ&=B?lPt!iUf^T z{y}A}QMd!tYlSZ+(@5(_2Ng{hMqKd^IHuWlw-`oDvb+2#Zrfl z6L&UaNOh}RO4`Q{Tb`kHZlpTFJ(SrppPJE%Qd$=tH?l`*oG*>5m`*ytx3>fKcP%el zN>6_2{uK7zSTadFMGNAlUbDyW=R+>EE|OGRSpZ1+5&6<`Lzh9rBKD11!}0$B5pcBJ z<(yTE?8k(pDBEHh+w<%P{{V*I1Svu`3LyN{agtSGywO`)C|t{ZopNo4Cw+usxTZaq zR2Jvmu3D39=H*&U@OSw3n$40fyCyu+eTjJs(>sacDKfuCiM?r>{{Z47yY5E*vHxJ%mZZhc&UACRO?M02ozaS@dq6dXuTi-VIjq|=;#*z@{ zI=aO@D4C??7qi^Xtss8ejP=~Im>(4oej$MvCibjcYOrf_@jIDS*ah*O%ae3eWc(qcbKZcKlQ zVMW(P7kz!A^6903rqp&MZiRN*hA_~XO^s~cCBUs}N`aJhnN2VbIlgF z15<6SVWq($HEd>`;^gBZvc}@kuy(j(xod20lqKk9M(HF}d4-F+tXk&bwT71I**#F_ zwK?I774l1`qA80l(_-U~AUAe}e$;R2J?JBb`*u>nC(tJtSDj&pT_PMwXo5%ZqW<0$ z&<_^+A&+fP-TWTtpu^rE^_gu z-6RDqq!2-fF%^@F=w~K9vRVU4N-lq6>Q;_~(&c>`F+vY*o6D0kO6;<}LdP&yR>j4o zz(a~cpoH(Yk%|q;L>e^{0>{w}*XFZSro7Kb8aKeS0! zprP1FHOulNPSZ3_E|P0!J+SLXpL)fFT(xSa07AM1sQ0Y=n_U$dKFj&bo4j|!OtY3O zE?NHoxoz_hCIBG_OGJ5xuT#A-PLc-Ho8_Xl&N+39?+-FIFKcc0RP-01I*buM4Dl^8u4p0YlW}>0L$4Pd#;3-3?VRs z2XiNIcrq(IqkA0(5Ap@N!YnQ9UB@vXRcy@ZLz`&_f_=>|v zRN*{+>U&Xma*S2WvzO$?QD(y7SgZK0($*YWEw|91t@PJd7EWCm@=noUUo_R0S#?Sd z`Ilgn4iA;$C26C2c(zJ*F3LxAw#)ew3bkx$zPjE@VT9Y!Q= zw+4b)l61$$Hh5f0iB9R>PT$U{&c-Mh`MZD>r`~uz^=e9~fa2`*JWvPXB>taTlH*!o zK|f;cItd${j6v%~iRh`vZLWiM&k_J6qz|PU{eaOZv{_P7B}9SwR=jdmNY5+jlN%S+ z=}9Dx{r0UG+p|29y%M_@bby&W_pR{BW@##0CKgZ5gbla)(}Xli?Osd-5R##|-aZOg(omB#zj z4Wd1A@*9XMCU}~F$tAyFhaOQTbr|2`puSCmop?&XQijn~-6HtD@BaXio3AEiTF8z` zq4_^Rsa}!G6sRPSppZeGtHg6hxC&dj>XmK&S>moQ+6HeyyH~wHs2wALTHE|lnm0!pPC^8qy5u%V)0F$?Fl&Lph#sfvCLI8*(el|3^ z7$C4ojknvqSxp$F3rm3N3QqlaG>O%N!}bwm@D7-s6nLwGwir#F&nYwXry{Kd?ezLY z1fILm@^7J5i4Bn&e+ppl*wylW$;arB+X#T3J~^fW9JdE$8IB^M0*y}4y`!~8QwSzu zGXr6?aa3osS1^5X^P|0J;Y*6o(aR1ULYa z-@OG_W1-PeW=wwL54K&+qpMq5N|}AHQ3J6Zs)i+LoZI_B{jst?hq!&t9pYvR_4XR- zRugq>${YZX-5{B4oxQ6zT#VJ@;)fnh(fPCcVR)_K7l{mC^*ibU10b{h9cr5c_n^HDgOX4CQ0}lP(LX?(SH;F03|hf z_JOf*6xm{rW!yk=)BgapK?9V}QB1|=I|fVBK`a~XC3M@C>AQBq`rLX}rrjQd{{X2V zg9p8Iae0z@?8!LAb{)h%(C%9`aeIQ{SaxEwC?#wQ&C{`vP(eRmrD%?MJ)|!i$Nr;L zv!~jh26pie+F)0>4fc;MK~j99{!n_3w5ev3?9m)h?yS}I{i$)>Cm+R-?a!TqU7>Bd z!>bxX{{YOHI}#~QZH!zNk**#n_?3qEfGzK^JL74IT51YxC?!HYx{5=#$Zf}bvt>YN335%_E>QiZP zy(>sC9Z5V9)`7^(Pdx`Qj_iTOpZ4w&=1Ibwon+Oj$2|{RCS|R z)K1j3eKCqj?33UQH*s))g*GhIs9HaHzi~r1=yWPN^j?C@DaX z-kr@NGjV!jr3CvL=JeSs7jYJM3s0JzK>q-&{{RZnA1+D#l<`OORoK=dRIsO8WxJx- zY2Y?Wh~ZoDPhMoYqSi`Oj1_A2z8PzL^6l4R>Puk((Wt@P>EsRht#iq*$VH`r;@Hb=tD!F=;CU@cxU+bdeu+FU=s&fTO^ zH_-JyDC#fS6UEFu?B{3Ut}k-7Y%eg!8h6Z(P0CE9C)~lSx^!!Yk@!+Z(qcL6S>&wQ zmhM)hs>Q=>rXG;ESu&~qRIGB9IWg{WZA+$Tr`kUSb2#Pfp@x*9DrH4d+F*phQn>bk z-igM>PJEH43ddNq!(75!ZK8!fmfJ#vsR-@*Qe1Un=`O-KmlN+ILjq8jZj7` zSi_R*ONF3<9E-w&n!uICHhFZC}wnMC!73q+7j^}^Uv_V?7 z9#oRpT{wO%n{vKN$`(#K%52)MzLaHOyjtk6jt(3 z;+klL!61JDS@_c_^`m6GImVRU0>X!vZczNIN`|64MO^eh4XwQvMb>A;E%M3A)-Jd# z*1$(q01f8HtOp#Tw@~Q-t8*Ga^jmUI;qm7G>$^!ncxoQi6-`fagScYxF3ja+GYIP zg<Wmk8bTE`!{wZCynvDRHvNitM{ zw?6*>!m!5#uT1GPp;s$AH?DXQKF6BGvQ0f0`8#a08@9W_Z&2N%o@L6wLRLut1GGgpGjU+Q%WT^p z39x7G)ZLxyicEl~RssE+W0StaitqSv)ts*@kNQJiBIZ>Kzbf1WTOBPjm4Eiz1_eJR zXBS2nioKOR?j9etao36zgn|htm3va3cBmzf4J-XG!x7#$dlv_Fr;eHjW<&>o>Eg~ao=y>o^==0uWo7ucM zUfnj#C2th1aXbG2O4ML`L+pDOOH8@6qz)!GsX2QsK%%jXK)-Of(jQ#|#W5-2glF91>p9_MN$Hi4Xd z1}xqO*E)&m6{{SZTNNnil-a&gK#)_(AHtmzJjrd7$3%%r!REK(k~8F6vQ=YpWgt%7 zPg>In*G6oRZ=zjd`~<;)TA?PzNobc?+!7Eq4gQq)#>}&eZqY2YaFr%V3Em*{S|Ql2 z*(9-i#FCx1lQT?UPF{&UyXq+$f=={Nn@Ceu8fEE$v6BX#jJaZy38B)J86+f~stO&U z@JS>9XQ8Gk`WUD7Wvl_Q1ohvVE@-}S89M1kwIpdzw^|}(S{ORym4c`Ped?68bSPrC z!a(@wd8$&j9yiz-`47d^3kPvMKia9u0_3`2TZcka zKv^Jw036V{{R(nR_=DWJ+DeeE_=>NPoZql|o-?u7bv-I`Ezea)G6^Xlfu!^jAXkEv zRi4yx%bSG|xhH+8u#)KzJ8Z4V2_TWZX@u)QO(wQTZI`} zgsYexYMZt|?Yf95KqSW?3TXq(11V7wB-9{biP&_KPqkAjU&ev}CN|^v)Iw6-Gc8c4 zfJmy4QpZZ!f|8Im00-BKa>%NIvL}u_18yZShYCqbx)a#af58;!(oYvLTw4XQ#BprC z)AtQFO75&ep(>7akKH?QL6N@Est`?GpPx^*-f_xV*9pJGSh!84#_4^BQc_!Us#H3B z^@`^#i<^{#mT0unKQ(?U+`85^b*|~>?SUZ>WeFeYJ*#Xd33SE0u~DRJv1QCo=-UJ+ zK2M~laX$5-JsA$D{gUz?Fy>oG#V{3LIMT|RS&!O{wg-`1Uq2_Lbo@wMj?MTfoNaJr z*o!PX7|X9Pkl0%fsRbnd>e0GXpN^HqgSXbtPXv-JKN7rA%oc^l?y}1(01y6sy2=W{ z>SJl8PsPaHtpyCw_GtEW@tYpQ?_78}h^pAHWTn*+AL=t&JZ}wG|qM?Epf-)x78|X)#@N`*QIKQj;~0?m-?jt0Kgp|Xad`gtvHp_)W^&r>wX-jYS$jHIk#@hj z;x7VKV{(j2 z*5SmtzOs`V`^c={+sXEZM>MLD1G&uTUMj`WCqv(}T2(MRnziG$`y+tE8N=>Va^tP9 zQWCE*BmF10wFXZXXo^XCEzG)r-Wt`)t($Sy0CQHrt+Tm-K;uYa_~h%}^f=+7+Nl@uFo zIfvqDcTBYg3OZB&0Lg_}aJsuJ$Cnhek#Cr-2B5M30QW5M@gkPule2ts)PEkz!Rz-L zSh9Gl%t+x~Qhli6Wd8srExsFJ&=Os4b;lZh2iA@_`4F6VcZ=HEW}AC!(&BK-r1>uI zv7QOb{}p~)6rU&c+QUcGQHQw=|?q9;f^pU#dcwCGg! z%HKNaw#6I7EP_zep(Gt&h!MFl-ii_Q$?|blLoqj8BHrostIRQX`{MrcRyC*ul@1lRZsN7$j}cSLeHf`gwu?rSI-2y!;L)XapJH!BS&PRLb}gQQ z(L5jAHHtEnS080!n!SXYv~$UQ4i!1;BoVw0wI-a_jae`$0~S!(LcFymHYPiFG@ph- zVdFIW6Z^|(d?>b~+I#c)Qz4DTc4%>5WsQ_`0K;!=oW+~aMUaJ$=!SDJASmjcH7%mZ25y$;6dojJv`Bf0w|+2@5JEjeQaPHvbf){ieJXw!pWD5(apaR@Y~D_ z#avGSVX?p<4w+o>AT4&V@WgWiS3f4JwBQP%IU4l#Ry__KS9T)yKgUJ-Vr5=9NIL$76(L56IoWwEfPn4_wT6b8fIMu{SmlpcFtdKBAq*R5u?O#_Z!>Z_G}4Y}#i34PKa5;@Y43HLEX>RK6!Nq&)k;&@}Xo)zPn zhUMVJ<=INuWgObDm4u-te|>6_eT6^csOZ~^QoGSmVmPtU4<#ThmNLM3EgP}srs6(a#}S)PD+_>eV9Bsy2tUHS2N>ld9b%gVWYgHZg)IH zb3(Flc7$h?W6`k+!x?)xhMHM_%5ns6xY`H5TDj-tq>SG^D)w$hA8yWD%j#uI4B~I0 zE?pGz(t0*eex|lUaf&khO8FFx({JW1X}f~opeaEehV*dqd1-?@X(KFggyGF1*r_iB zgCZnvPm)$=gd5r`hcL3@(h`L!^{j-XbrZ+(rMRD!zOKpzu(h zq<;!_J!sFD6uYx^d^$=n%Vtvdq5X=a^X>GmjB+R=pO+c2Sbk$+wh2RooyRjHx4kiC zRc2Q=5DqbmyLqizl$OU%2>oa>$P z47|-!xZ8e_LPIv)6S8-n^=X48VM}LHr6p28_UHa7(UNS>lUgLUcL`2{0+Y8jq|YfL zTW4@}z#~^2*3550TG1=Ac%-FWCwStY1=yJ?C6+fJkVukD{BK*a$jv!!$#sj#T1X_0 zoJBb^J9n~KWcVUhcR!^&n(WMpJ*CFO)JW&zw82s-l1qDlLQ^VAXKEn<)?Uzd)UW4G zhe9T={laLt+GOeD=7`KYOX&~+QhHP&k$ojZ5~6#|R3O>sf_IsyKx6kIB~VvB+|wap z#lJvjZqB7bzBl5S+AU4{1l(Pnz$Z`5CS8{1fY%p7Oo=>vRal@M#n6=kR5%-Tsvs%r zso=+QY8INNf$O;vARf_Bp^BdX#E_}unuIyYata|jLPTt4KoednQC*(k#f2!Ssb7Q< z({G`ng;`V{wQvT4S#dTPeq&&*R{?@jUP<592Vc^;&TzlX*$*B3 zcF)W2j93OMfn&FJ7frg9g^*-z+M2w0y}_7rVsR=wvtfv%9kF`Vzcop45}5o#dJ4&s zQiFEIQ?v9P_F>BQ_c&%9dxYW*VSZyNQk!`vN{*eI14>oryPU~$%2fAtpuS&rgP3av-+@6Y0#H`@u-W>IlINR=}uTGNeAE@i`T?{dm zZHw|8R*eG9*zLIs4#%(5R{koq zV91sBR=2msDWoCs6?J`AuZSlPh+%NaT{} zn>XSu=aQFLzFR61twBf9em^Q~r;)mqulo#+X)vwFiVotew#F==ZbD+QMQ8lN6~(C2g7_l6xTc%siLWQlyY!NsaX-| zeV3CLCuxsE>axpbtcq>vQ^k9ix`j0uwKY%PJ}Qt)lSWGho@f$3LIrD<5| zS7D}~Mg5s={{ZehwPTvRmQ!@k{{Ry42v4ahABBHj^`pp($-4#^(wkn2;|^|CL+JpI z!t6)<*DuJy$ERad5+=AFB8FSUu*aoZk{oMkg%66!!cAy3HiCE#EP;IPA9AFnhklz_P7`Bv;1 z9JISLJSp@G#qhB18mF0bD{Vh^ioE5 z39iu)#F7fwxC#YYw5mrW9<`e^?x_IUMU8{uU*ec*uB}t4#4c6=kVi2TQET3fs&THt z*O(>4?Ja=clC3i;fjey!teLSrSX_|-xn;yQwq005$T0?CMvoL?*3dGXS7sP}!tL~} zz@;Q8O#IQjk&nzFcq4UlbBnW>u=~_5#kYmR_YvkLToY3q8tb5P zW`cCltDZDkTHJV*ne&i#-Q>EpT_lfD3e-#wt!2)tR*eyQE9)H8)+K`CSbMH5tAYuI zsBAtD%_?)WTOQ^cYb0enBGD~{DGCc(z#ft(fA_61ljv4uYK?Hj?-1J~5e}CgcUU7< z<8U|j;+l+ZHPP*>&)Zsk_fcAi1OwC)&{a~qHsDmYbpz~YisIHoHR7m4w+^n!wi|HD zyrgd_j*>Q`Qf-HpPld$1yif5HF*}s7yKC}4!q~sKeb$x;FERuK%y;0`%56Fsjz9Gr zz05b4IHqO9Z%~rev!zN3adV+P1fERMS{u_>1ux&8R5hcgev>i@5@1O(?_X#|nBAt#F%gK$z+s_-Vo51`5 zUQfx6T{h@2(hoXGrA|_+XGauQYodTgFzb1; z#`^8Edx_!~4t~+VTv||MNFU~j9>S3Fxc>kl@SK0rPjNeZM=`X@!!IJ(K9((6aRdfh z8~{D!lk-RN4CTnTGNvDF)yqh{Q@DlN28{#+>QU%DfTU)XZ5kFfm9u5?{yMCsfxmQ( z7S~V08%kgX)7TH5w24i%W>D76*O>&_-7uW1KPTQUMtsX2B z{G?>g)Lk;z#B&A3>q}uT>RQhL@4qDXpL%v_C({oTYivK0?E{Y~!kr}ulN$r=G+r!f zHdarurg6gm01JUiFF2qgVAiD{p;DVmLRotPw!&Gx$8jdS)LVesQc0H;69eChd?Q<8 z9NP`$hg`hBcOS(_O0~lXBWWB!><3?AOvamIS0d=bb8-WSWiKR-!CTC8AKx_SJ&DT% zmdooa-8p{B7v?Ohl6nvKr_HGLb2TQ(!|i!i(z6HyQTO^*T(Z@gpptZm4gJsURD`IR z-`Jn)T%6e=bn&fNJiJOsAB(7+s~ppP4Wr?5fdMXPOvu>P^Ftel*_pUTl_y$BJ8X9~ zC6P5m;GaxUO9U*XT#ow+4t1nc$MkxKRU2s}ZO0TYPwcKNQ8x>M3esS09ewI@UG0iN}v9Gw9tqE}~eD1cItv5L_NIx}P?mX`p+RITH^Y=qSbl2l9VZWJJDBWM%S zwMFR5CG3}2zDxi?fJFDFM`%LEi8ZV6PU+ZjS}{o>Qbd~7{veG#H>QY^LAEXw2Iu(h zDUg1Q`JE*}R6VUaffUBy(2Qv@bUnntKISU*_FSNnvo*e7XB}Z4Qu&DAPd}fGW1M8AXdhK36B(JmC zDJBg-DLPC@jZ@d!lAq|k`avcZLFfkq+v`nI*3c49+9X!0NoG4ZvRWxFGN=L?!Ib*623E)={fKBbe(yHKsEb)v$sU=0E^PAR0fA3ZY0bv7ckL zMJp=I6p%)cf2|b(C|^To5K2iVN$Pn9tdWo3{0!8RM&u3p@j~T6vA5$PF%hvmR(9yO z8Za}$M*D3atqX1HiWf>CB%vxhNsZ~TRzboWlcd4lfy`4lrLvo?gj)%nk`wb&nh-v0 zdZW@Ho`jm5!{Eb~z=ZYONa+LGtw{hJWkn<;C!P7K=7<=#QT^$k;wY1{1zVZf2UJB$ zBMG#iN54_F)ft_tGEf7c6U`JQU6DzcE#yH5f9FDwSkV^8?d|a^H?7=H<4%w|f6Y@? zhe=Y`XDhzacwRq}E$;DbDchgBp<0MZFphr^9X;zVZinKZwyga1eW|=tzP`G>#qj(| z+#ehWA;qC&A;Uj}j@8PONztbyp^`TT(Zhcg^R^|J@k`I~L?!!zcUpSM4F^G?Hw%XN}*K}15gC-VI3tt@kEjnU4QM)XjbgB4Pi zwSa^q&XFL~B#|K>Wj&1IvZX6o^A6MRLu_dWcNlfG5?oLnK|7uMRgtsCai>zUlsHnd z2ngsIq9{@{B+ZSa*6AS;7P%M|-Hyov1|;n{;t-|ZX6SwwotckA+Ivg`7J2~pdJ09I)-!5{0`xX3F8Vh3jaAPi~$5XyxT9{7EZbjhgU#6KOXN;kV5j%o`DB$hvMP zLH*T%+*WVy@?Ae;azm1|Wt+0i#$3hTwtm)G~f zeRftVV)EHbX5pZ=T}Y5S5&G7+;*!%~W|X@qpS<09!RD5rq6$g>05SKZEZim0pC6GZ zy`b%`D3;rcgpV!)SGmNO+FUm-+byHF`IA@jNq-<^X$`M3 zqd0?ixRxB?RiIX-Hy)X=pY@B29=j1eX~v& z`!-($@a*QC7aGM`v2V?@N~2FifiQjJdQyvKwyLk$Uih8h?X`wl!E+8AH92&^duWn+ zgZyc*n~sY3cFjk*vU<|wvg%5AGJmCOgdpD}%uB~=MmCpgWzpogw3Q9VS~*EMabqWu zr%c&@4RK403nyGc)E9P-C1{fZIR1Z~V9O9^S4dOL*-~6Q zi@UoFA_#anqe@fACXL2PS`AJQ`8q8eGY?=}-dNtQ-KUV5N(ZRKz~84c^ra~7*{7O) z9bfwa4 zoI^ig3B0pi$Ci=;K?&Ak0F%b%hAI0-%n*ZB7IzQqec_{4cJ>&~IKjiMaja(PEwrE( zUJav5X&b?hQpooevkWa-R1cF53x0xLAb3}goX?){`|$eMvNs7*T+)`x3+hl-#v~;> z@4QhswkI5wDIBr!zX!O@NWz>cLk(ME4q?`f5}jUBLP$}Kp<9|;fH|GJD!gwPw864A z5rtd0tE@%G9$Ma7VJS*fQbT?B8=5B_QIF(mRQe!UJ=a~b#<3ff`PS?*uPq8tk1>AV ztt!nBsT*0~Q@2?^B<5Sj6duI!M5r`*EwqsZQ^?$!H6)cXIHdGRuvA{Ti)GteHZE>) zD}@VYh(@hzS&d}&N=f2{KeI+Gt-3CAYldaq@ppAbHN|1yVW$@wYUb+UXq(bAsQp!0_7TjKhp2 zSX)lFW92EuTsnUXX%eN6o|To&S5_y;^6y25d5LJj-^^F>b%e0D1*NP<_=}wr&;Brf z5$g~sIcDExNO=;vqFa=+J?)>*z@hmwu^4jmjYB0p)=6MYJ}Ap<~l|W<~4|GaWdLZUJ^gd zW{MdUodGLK!P%AD01b*(t9&NaKeSi?>QU@EsP^evSJ5E~{JoWaFPRjOqRVKuVJQu^ z+78Vpp!uFp%_A;ZrnsWBO4>-V{3^k5Ja*+5Pd4&dTDB1r^Z8b<8ZJ)cVac1EoLSHe zzk|1h*))RKLO|L;5^Jj{CbnXq;{N~ zOUdMDh}tR+r9z2&P&#)eAcIkqediOnabL=)9zU}%u#yQ}^;Z>P*^zK1K9EwW+;lYv z+43C#1p~)Z+Nh>wsHlQUx8RZbR4qDVhFsGmm4Oo<){B$-Gs-OmZEga+5Jubgr(tfv zdn61zpi-bfBuNAMR@EfB5YZyGco<0vJx{Rrr^03_t93-O#q$xVQ4_!Qtr3-ITgH(t zvUW7ck_^Q2*0kd@Wrxu&vbbC))&fY{c@?G|8QfDP_E!Kxx79ssOjd+WA4Hzc==xR$ zpspq<@aRR7OIx(9Nsu-Bb*JO#RMx}H+yxN;&&-N6#lN7EE>sK>K#r97%Jwc;qg@V@ za)={&JBg#SCcPdm;0;_)Q`)G5M;``E@^&5S5EXF#>K>sTLE@oW1KeDYOp(XsRNZzG zSJ582x#Xn42XYMy$b(p$0Ka(vfI^AyLCuX=Xbkn_f>L!K%9iqMIK^E8-Ma)tgr~g^ z$Ww>VIagk&N`XH$IoVtvu@&4ZM&uu3RHD6>;U8w8VhpUxeMJYU9eUTAluuO(paRS- zP)Jlyx&HuqOUBo*sB>)Kk=0~wdsJ$Iwn!}(r$UmYbF>Z3S^|H?(I>S5K?(~AksBBl zq8SV=hM6HMM8ZLdiLFq|o{D`0+fY!MQCCSHtu}-XQjj$O6Y>Wi&Y2n^;TRD6g?{ zeuYy6>Vi|)QxsAFcoFIfB$Uruf}bJUIRFzi5~8@V`x^p6l{`#sRcK^Xy@qX;6a?uh zfg949O(3%+DoG=6YPAqM{RLQ^B6bJ8H3Gt|EY6)$k+G{FNu_|0qDcevs0^T)lGYX! zK~NDNTBeFv=p5)O<8lB1b*l^z`8rlrra|f^p*c}N_`Q?t^G093VZhmSO(_th?6Dt& z^`LQGku=@e`84}<_$u~IzRWAOv05#Z;+5sAeTn=)_O5n(H`ar;m9CBgX4Y9}8Fs}< zC{a;>pktViYMwkYC8mYOZ@M;H?C+ME#Ip^9m}zqf#}K5X5XoQr? zc8ciyN`%L~n$4N-*2>-rK42Rd@5Nx6*yyjKo4>kSt5&V~>B*Xys#l~xuNkjTxBa(NMnP2jqEN~ z(vr10q&gNB+JO8db*DazX*DL9<~HhYUiUk_tULBlk|IwuVyTio}#}Fb5;zn3w^4J;v_s3jhQ^t8fS6{{VW8lF6o0 zy12qLskdEiV~65B9hnL`?RWlg(i;Vr(>zYD12gFzfhu0Y2hw#)Cr{JCS8Zt*9qR>QYX zB_)KNi9MpS$)@_FYRMR-NZ$Vd3@tA5)_%lt?kjH7I7TIgrEZ9kt~AO=cqe+LNN!oF zDnkA`_<4VaWGjYRv{+TELh8urkXx7_pKt-7$uF{CbLH8}``j%#gB7=Buh`rYQc@uA zzTU=%9)|fYE!CB-D_}7D_wCdOT4WjS3|8EG(aV<<=)1fgcwS=`n03RUt4%6&_Vj}T z>qDCqW3*a>T{EUXWlR#=GUg{RyhF*gv~eyv+n_*JiQDFBL$OLteH%gJ$AuV1UC9<+ zDm8~9;?!QhY;Dv`I8Xp2krOH>@~Oi1TF*4ws!hfY#sOmE#VS%ppx7sp zPVv1eQlj1mDQsHnD%s)~zHcnwGD}XWOsTOcayX>RBWBg&B)cdzS*B*;H5-)i!yd6+ocrM zJ(nD^lG{1qhFM%@oK!bx+t0fCRO?N_Qlpq1>nfGVx;jhYAKCKvFXo)3a;!e#$KAn> zBG~mMOuV5e1al%i>G5sIEIBK5cMl@r7Pw|d$oY#jvuN%imu+3Wx@B^Joo)J55+j8r zDW1F6QZcBjGi1u=H^7E?w9Wm#OY!f-Oluj#mM*Z1Y&Q>-xasnS%kN{Q+S{OQjdu16~>aSDC?V>~C!^ z?riVYl(wtABrT!U45nlVF(-acT0?@X=-H1XWUUUdz}3DZYlz{0e8e#ur8LcpcLQXA zB7CvFqIUrN(MBzFGN^f-Z*g^Cm=;#U$KNqEtfJ#mLK|(x9pC}dB+W6m>|&X^c`L(P zY_FAYn@2HVEpFNUxGD*9;i&v5PehY4s$az(!j3*nvK`8}UMXnZ{vmwN-7T6+Humi# z5ZY2W0Cui^dzbqRj3S*CrZDob@aVB~%V>ImJb*YJ_0HsIo*qTT;H|yJDz>hl3R+ZT z?*IyXCZwr|jwf_)HWzNo%%LqS_9^tp9G=3q<6egEV-c7T>ty)%=TTuK(Mt`whj~+Vg;pIv${gQ0M zm>6j;G|G}tHV}6^QoM!V#ExR>C5702PQrMkWNo0nG{ zgS{E@$4r&k+!N&zvXA9jQ_+#dlH5JzCJ*vQ88M{e$kQ9vr@VAMmFh~>@5I|V5n zNudH#`T@Ukvp%i39ZetwcVj0mm%$=WaZzk=&2IuDS)ZP2+9{&|=cM}f9VU}0zd-O_ zjcLTt4xkcMBan7K9lo{1$l7*#TpbZtnuP@@5CUR5)>+B+JugOVAH$a7(9dcp%7}ca9WE(9KqI&Tk&Wx5I zq3Iw&G(1u*D?IEJldHL_q+5$Z=^Fw8Bp#Jw=C9-^BEg7E03)wT9&CYD zNiazy&XG+>gVd1<5D&)!tb)r?2{IBv?be|ND|BgD5zlSv5RTux5*8D>hR``R0F)cq zUFIvlGSSfEOC(756;upUvyC5aUk+?@Mq9++C{T1Zs8*REgE3eP){(Q(JVRzMBH3d&NH%y35Y-{O%hYF&4y7t_I}l(*ZYX53xA^p2BGb5n+!~xI{i0HO^GnLI`$F<^ZsZ@s zFsIy6N>G$N%3%IKiaee|sz7?tdt?k*{3g*>SDM#or5$KIqE9};x$={5W{fWTFZ{V~ z%I?}a!)~l;TynJZSIt?k9yczGv6tVmxKb{Y`w*zr{&B?r01Bo|n4DcQhs|#(7y5!i zWXV+VJw+;Ag&v6Q+e)}$F0$U4Munzie1St@GzMzimQa#Vtup|tbKh#WJJ2fwYTFmJ zD8#~T!Wu>3kdzS`$7(c^R>dW{2HxTCHiFZ|R<|t}O1TOhjXUIvT?fF9U)iWWlxtEi zQjnx**emPTnz+e5Bn*`p;g6RbQj!$S%2m1CPq-9o$84mm*gU+ON9}EGv1~DrvYl#q zl0yFgE)*-Dk~=y$veFDG`;4!OTH;xI6t_~_UbISKE~IavY3F)8FN3&?@?_?!OJwTr zF0r0%SgWiR25 zA!S2KeF{)J?eAFQIbAbsym+O_KE`=_7dNQc_+K}Aeq1ZAnWr1ai zCc^r`)uc>=9KiRcaeQeGl|3NNA(yQ)yO)jOt_E`m3Ub}G7#B$bNF6nHpq25aDOzEV z3*W>r>`M(x4nJ#%HFVJd8!06!m_IeiZ)T`hZ0tq_gkjmT>dOPZaYRkHTzU48^V!bBtlBb(WRFTx^0+g&t_}wAReIUl~+=oU?1fw$+$Z zdxo(Lmwf#vVwDAYl6~sZ*tY4k(L{K!lvze+#ICH{Q*4QHHs5{s{OHz3og$o7S_NcB zTFWntP1d~IfOMszc}WpI)H9Q1#ujuh?8Tq$u*dTC&BIM0EnGYt1Mwg#c0IwOPgH`8 zk~a4-`1Nm&_-Mve$CGV!f~NB2WyL`$QB=t6HUnxX&XBp&m7L+tEF%;m=|M)y1-v$E7?$*po^4n(SszAxrpzvi?}av21+> zHZDBj1>)!skOy?@9CoBTHo%vgo!O|xYxQz1u`>f{4Va3nH2FHZ)p zF*}T}Z-?QDDND~GEiD@<GnfhwLJQuyp zxx2zUoIfp;VXnJ!o0m#70dA(G`jPm3Y2fd@b)Gk=N7$UXVv}|i&;A|e7cpNE{{X}d z-WcoHWxK4lgv(k``E5uLbd-c7ACtV$=kebwGI-h2gk$ZRhxX+0N6YXVFy7&qa~Nh6 z?l#L-Osyd*zf*0Hg&`^265%_mfG2IMG}fr-;*ZAMr0o3L<~+%a*kIVE7K9-p$wjM-iP0E4!_ zErcxVQ9TNV(t45Jk-@Ib@y#fzI$4miZdY#(#Iqx+Z#JuyMh*e@U(!nkr0HS z5F`mC81G#SSmM^jPEEVBTQOso^7YBgIMSm7b#5;Ou~(wv{2@?ZayLV2RFOWSHl?`5 zEt+8|RU*dlQx?aw-ZzTojBQD{vs+2E!`ok_4W%mJC!k2I?Z?rp7CBYfwb+f5jA3nA z;VG9isFxG?V|gIeQ>I)aCo46l8fNV)xncFGV5le5J^uiS;}q)IZN0q(@U-KOWNj zk(zlEU?*|+Gae$_477`EHG)e`r9=;PE8O!nQps;x8;+p0*iHN$oItjclCnKRV;`Rt zTrB~U$Yqz1u*-ZN;VHIh8=cfg0=m8|BNLJ2MYmn12>hyur6ja0hs+=Y>X<30TFCp5vK|spq7^;+(I-P= zB>EjT@lPw@Pt6jUQqOy#@^0b)AD{QNFk79f3ff&1k`{F*@o61R6kRc7veEeo1v_!K zUF)NbiIVimHG|F#QbA8cTI11^ENGY5-A0)N4oL>IK~~K2=$Bc(Oc<4QHK{QYR;ZI% z+`&u$I#bgz&NNGG?g&aiBfN^y9)wN$BrHCn1c5&^$aX9(Zt|0)?2+?LjXir6DS8Vx zbdZ?}Gr=^-UDE(`E;uqjtuTk*dekJZNgrA@Iz?I=IdYK->V5b5pe!46bEuG01Z)J= z+vo{Gz?Tl0Br9|JQZ3nWjS>5+iJ2a*yVd?d5xbR1Py~}P#Z;wbQUX5V1jsw{6eWyS z=_hlfaC=f-nL}kdp()fkjrfYSCPinSZqS|&9ftKBTXtT`BM?eZwFKxYJB{MFnJ0Z7 ziw=<%xJUrUsLTl8tz~M_vJqa!ND2xuJxSh8D}4>9{f4c`B|nKHZNVJ>0C7%iOxLs< zwOW8ljYD(rXyYmrAG2{VHJ}1`R{Q)@W09?h%%t9e$Z!z=?ekipHq5h!*!iW;sE|5? zI~sVYB!?QeFruN)914J+5M--S1C7LVsTJuEL?vNGQ#~k>Wr;YL01+gaKQ&t_k5G^S zlj`76c1e$~dT(}dcq>NVun4WpRx@ z-x)MZKM6e=E#h^90jC3KaVj!9 z0Bg688f#`5Cc88@I1_Dl`&ves{obOo=7lh!8rfDGlm}E)=93aakLg)6Nu;Q`zi39{ z=|BD^{EzSSteG7D0F{F-ORyTAZN^v<+AO{8ELF*4t3@f+HodQ4wJE3NAD-U0%kf4|3R0v>*Mk#?NyQE{zM__Ylaygk?LJcpZbtpxzKR(Tu{X)y^+cSFq2e%>=;<2u840VJS< zu-mbqmW`6h33O68i*DR9Emjt*qzOqolAhET_5_tW0ony6hpoveToI->KipJ6+w=y* z9ZT0Qhl~U$9fU$@EWgygTpMGnY0^wCF;$c}fRXp8C6q;)NyH%+lR^ z24tLd{JDuYa?_U!vm_?vl^rCfueAHqu;t^m(UZx<vxxr3j!`Nc)3b{JN zsswM??*U%bt2c>JQ%p__iCh~sP3sr%=Uc=u)h6QDC@wUKZC>=OGhKxymZUb$ZMTRu zYm2QKS-5Z32MxL+W-F|^v}S30Di)TjJA{>>s@`^i`q8|X&=F{`AGmDWVb8V#+fWC7 zQv^_4o}PyCU85{k_VW$AV(P}}OkA>|a>~+w3HJQ>pp;Tx*e-fDFT&+Bn6Z4Nnrze- zb~cVJg0hly5TYP_#aAtiP;pev zJj_=qw9S8ZvvEkbLW@9-HrSucRq2Us*|7c^W=1faHApVHUQ3E_LD-TzP(`Hag(&?6 zvj%R(-ovd}w<=AjZO8}!PNTU!`Kp_Dpz$at`2#ZcKBi5*sS7O;q=E@g9Q@Lhq`Nl7 z!RZff1-1TSbsu`TSyDhlX&;0RWC|rKXiiK?CdarYA&q66dj!Od$v8QAV6+6KQgUZMOqB zrM=^dPWvc>w2!R}tI@B=FaH3vK7X{%89&2JITkOQ`&?OW-MEyEI&`FIPf~vo{HR=& z2ZNkjaylvh08G4%mho&;8_z9Tyv{9akAH?X$Zk~A53*F32e?u|_$Igbi3Q}wUm8d0 zE5S<_Fr2A%ZdUdwe}%lQ2^)m#f>IAn=W6QXjW5y7&Z8Hig8NM?9?7|<3r(G?_>Lco zTcM}zEznf7q_51<4H z)k{={{fZla4@ou4@+YfDQw|3t+w1=TlZ6=N<*q5>P10IZ3$bST!c-M0X@>VH2dDsk zF7(e5a+htSar~)qZ6djH`P}1-U*;S|rTxjJmjF>Zbm}@&?oSoF;!MTO{gRBMZtif* zmMX-bC(U^*vd@@GihCoXQjx#XvgYxxaSI+vRU>sX(Ek9tGae0LhM}AnEa8?`_Dz#M zTPQ+ecZnpDsN~INmI?hEJX?;Lx?gAC4e(rh5yGFjX6)fDEGEscgXUZ)a_RcXA0E|M za5+6QUVN0S-@H=}O`a8FXLQS0UK}17zTlEpqbgBat9$Y3U85!`ad$^J z^X3JJ_?zOsA#laWMi$zQy9)&QZ8V-p{deS=<@pPgj2(*;fO$vU#h9mYe&xR1(w= zONY2mBnkSORy<9JYk_kA06LZr;hEqcrrT4p#=nZQG+JRy zw`FZ%W|QTqZW$`o{$ua?&_OED#jj1BY5IjeM@ckm6?gy&*wy@)`h$( z&r^1dG75@Gi2neJB__%6AvIkf5EZMh(ycf4Pl)k1I+DG~o+N*9Q-gi7z7qiYTPJX& znIb3q_N#d0y@wneze1?Fl#Wzm<8NxXPwk9eKkQi-i6uHpAdxe)^H!x}7BmoU;Y9h; z6rXYoRiQcBT_Mv?@MlK@fCU#N^ki~hNGRK>)B=lxZMOEKPeCUd46@^E2?z-hw*1HS zqF-V0LF+eo0(65COw;jAt(oT zIZ06|u)0iy>M}YLTA?9Cs@mZyDUCyOGyE%5dNSl+M4Hav0GLq+ywhOBG@oRW*5XtI zq@;AGMQjg`_83LfB!wwyAWV(uw;hR+NP6AEl3*;yX{N(1fhw&IQ+2C#DN)n4F;4U< zNK`+}A7j{2C={{Sfw&%`PW2z-*hx^y=f;pv#R|z_)37tH$t0LRH5#pk2fBqF%n|gV zgtxK)ZX|;wli%K%#SjYe!a?2vJA+u{-LeB+TA|NT5@FPfN&~2Kti;{!H^GATshI&!kG_z5LBInDEhkAOqY5(Fz6nwK}b@y z6v3L$MX;r^q=f49h$c?+MCLA5AGc5-%7Tpba={(syE92P#v94Ug2(iejYd1j&QfinQp4WEqeG`Q%Z2 zfJ#jWIFhBrN#-crY&7j31f&E(0bcyjN)@s==x~s&j3Hb6MM%cbJP@)q0%QX_4#KAb z_@Ppu2@ofKlyOC*J3@geDo*_kRQe?kn!9jL1Zf+^M*=BHc4+sCd8v4FHwsaC z#!`}{f%~5IhbBGtHdA$H6n@ee^`1Pd_K}HdL?~$>%1--l^dDMN@*IB@GC7o?M=~4A zR@jC(e(G(LeXJ1Li1q$;Avm{E_G4Hr-JNIqEoECPOI9_ZcDF^a4uu^mR0GEyDLG)d zSEHffV^Ecw{f_09?l5(wNwK(AfMrSP+!)x^@Pbx!)%9t5dIwOj`bUHzk0E4_prnuO)#flc{K|xUl z2Q;oKGU$Yd4SM0HThs%JNeYhQlao43(Fv%nm)2Kz7-hQ~>m|&QrA?@8dsOFpMa4U` zT$d_+*2}Lli+7(8?%Pj7J5-i#D}9Jo1pgwEE8pAOpU)Y(qSdxyh z+^e!>?LVXpx~n z9VB#6_NK}WyIl!?qED7CicQ0AENDq3KuOi{S#m*}d`ZQ2T{&wMyKPLd=33raoyrQN z>Fc#FEu%!#XS7LO%Q$1NEyk9FG~g#e2T#Q-BU@G2#Rsp^CBkuhH!WdTxpxq^PGQQo zqszHv$qQl6^CPhx>!;&+4iVz|IlgC(oVj~7=RRchf8!QUVxtinh;z*lfO zK(35ZlKf2kT$M5$7&z_~bB85Tk_wrXf8$?c>}iWgOkou&XrQm$ddBH?ZzoEdF$aYi zqiqPv({_WXeJutfKrJbA%pShg8YH$(AfcTDXbReHl4%C>p7%MN1e3cYOJ zB|Mg%NP{Zw4@%DQyME~C^OPi%l_$|E`#ieVZo|Aq%lLvAABpQn7IsR3nBRD$;+30n z~&nhQiC$AvZ{{R>AxU-l2MRAg8bZGW=@GkQN z$T{~kH)(N&wsR7&{bhgoR2HMC{-2!$@#(*zm^_t}Bx7G^6g*GMw>SnQmA|jdedQ@6 zCt^Y7i^h*PM9BrqL#(NK`cMiKq&nGquv16yJ2xoX-P3r)&YW+#35n$DNl)TAkcTP){XQsU80n|7NaAw&cC zcjw-vs~ITHNVT&TUU?Zt&mD5v%VzD{)d`YT4)gUQic$_3-BghodmO=YmPKhyp_F4* zx2*-Fq=hN6G=fhCsZR7%@U<#IOj9CUWh)imxY|)>mlVBX29*#9tCV$UtTJiwWVgdi zJ?!` z!A_{HGL*k;;*u8Jb<-wmtKwthxfwjHt?2ESgg7d&)^jqhq1G=gnt7#%b$NT60eniLWm4jgKqJxxbuqy%j($v==w#9^@f3_6&6P82tSP_@ z2MFSO$4ac3E6^V&>3`VRF9^6>}MY%uhc>e85(UIVgI3HK`YrsB7@ zhQlLf&E?FUiDpb*&ifc<=MxuKX>Q96XJ>De6aYd%{0)H`oL0l8^ir*od1dKY(!8sW zoP~69J`ixsb2_aEMdGXwRE#%mt!>xPCw)unxUOth7sW8wCaOlyXFR!%f7_RwFhwioy#PzOR>gp)pk2l*lN5LF3{5t8TaK@i{-9!f$GF*H2l%;S2c#14`m~(DS zySzxm?Uq|_?Hq^ts+p}ps}`| z$xbbbSm5?3LSarA8yKZdbf{~V?4dJ8cMLahh95|GQ6o_h3{k>1tThJx8he>@Ez{VW zt|jF?Cz7cM_xYyEO(FPjwJ*?)1B*Cr0+y8xM`i7|z^qwYHqE5;jg`qbh@21fK>&9%OpX?e=4!jpB$5@! zxBSp^h*5)POuAiJUxMxn9V2j^AE5X4<3 zK_&q^Pg7HxB360#!VGKxoyni2PDnV?GeyuT1uE1;?Mo4h8SFi+zSFn2a!m`q9UIXaTdY6@nzi6*NF|uEfA1J*h7JmXIdp z(g9SaXX`~JMW}(_QcvJeAdaxe3`~ca!`nOlrst zbt(l!sDO8o)}04vwJQ-)Py&bmZve#@MPZ3*0(6p+G|1o?uRA`D^dh|w*T4=EN|ZK< z>AfM((V=TYDFJD0fK2Ti3RI?;*Cf#Or6i~TN|rf0%>Mv75i?d4w;+^&K{L{u4u!NE zw^oo804K0KnmEa#tL!;!@?0Qs1Fu6)jIU-qkf*WwNJtwW%C+N@>6xc1(6G`1=4NNw zo5>4o%q)Yba-Opj^G2C=IgqF%h&}l+hzUW}Xa%C!iYo%>SR zIDW?nAxYUvJ$KqZD#^q4DIkg4-+F-~G$|?|fMb7yRqVQA?Z^bko;RjJ7eno7(j;xU z6vmNHq3e2#0V9J*Gsk@oT2X=u%1^Q8iY|+4hv;$yOqr7>iZ77940eUgY8w-=CTb~^ z;>GnOf)sb#b4AS*BN!-^p zyL$`Cr4*o!W8#?BBZcElyq__b&}KyK@%q-hSfIBi1};x$RX)gGFuQi<8-`*Hp$a2P zodyVq=~*&1-L8$8vsR9^+~RHGI2spep@&K$Q~hat^lXj#G>66vA&aK&P1U+fiz)#? z{{X-7tAv;tvGQ9vpW=2BEsNsZkldLG+tufsajVAI zylEvR9H)sN9b&UJZ$`Hy)ulvf4mEFh<-3ffO)GvNgZ^RCH>FQCIzTK@mfIdFl(h40 ztxF+8_hJ+|2A9sB%YHh0OlORQ-`llh^ND8hGL{@19!x9vR;#l!jWVZGF56!r3oAmw zI+OZs-kV9S2x_zkxC>SKnky-DPTNMWijiMrarQg55pJTCsY^_PINFS(D;C&VOAb5e z-${Zrk?}((?6|#`US7uVOlJ(V!Sixec7&tLZs97_w$nQu_uFGyu=z^3&!V0k++726 z7DhNt)s`=WT>`?lN|0p^0n&deuOk)yQ4THt0H}yHiriS@34PVMY*I)nY){kTu|CE& zSa?={XA8WyYZOSl!q&aqO!`6UK{YRX2A^q`_A`>O9D56I6u>h&E#Fdt+e@d?XWyXt zqi|KO%H<{59ksJo8;7}uX4c%r@Rf*prb1SgCwW?CAyF|-!;#OQh*9WX~Qd$u3?!_Cs7Z_Xi5&=rQ)Tgu!>XV_$mZ-xB z#eV2pL#_F`CrLd207}o1Q=~FF+Bc)@+vEDO!#BB85V=Lx4|0_{%Py#p&BQ^{Isy+K z)yvO@N!mJoFO$nsHy^|MtXBiVu{=uM($h{{7tCxzNZ5M{$e#9f-e*TeJO#`ctG4%- z>3Qdi_YEPo!7!~TNm91zcda<(^kmB}YT0}ErGjDE`@rO3xEdWr)z&_{hsqRnGNdGh z$oC`ocddyxk49KG42nNz5x&@-2PY@D;iHZrZQb0hNqH%WLyA!_N3b8QElI?zvR7-f zL~$ESyDQ84cJ--ZSKDpkf?2PlJn+U&(YZbv<$OmG%GhJq;Gwr01-(t~W1paJLQ8mm{yv}vZ&w@%T?8%+wYW~CZcLwr9BRpupwCdq{%cRG^t^oS)UNS}`N z9}zsJy?@ElpAUR7$~nuye9E_*eOI=YPB8gUBnLtXK}kCS{Af9#lbUqV%RH--Z!(5t z!m(Uu4k^obw+7iwIsgQPLFDtr3>vdbg{_-+o^b3t6!5=1;THDHrvCu^Ue#=^9-`YS zN#-^a&(gFunls18Pb%W{PdqcqEnt?OAK$(hwsGe1CV@**;?v}m>N{^FMFu3-XGbT9 z`BHj6ME?L|Y`=Ykqr>bicB1PJ!`nr&-ber`3rbX>r>9@ex;Rs_kDd{XT78{P#_%g_ z84j~!Y#36SEi$AS^3tVBWFEW4b>!pe9E^Dir#e}x&8uAB_ZyX^i$o*KGwL#VB0mXK zpMC2$kkn&n(H5F;e%_DB7u(AW&&+tSnsJOm?)J=u-dd{VmFN#MGbkf)Af+=i&h^d1 z2+mHkC$fx9Zdj63V9VlrY@cNO zr1k5_wzfkovjSaoKx}naz=BW346(*4)roi)*|K>X4?=$RnGvT8!dpSX@I^R*sc9R! z_)k@tJO2Q$+L`0zc4`%8sJ_80lLlRWOtS1f7#ACw-{#;ZRyz zCSNAywW1f8aNO6N8-EJ%M<2dnS5BAlD|;6Mb~tN8@UmQ(AZ#OYRXbK3^S4E)sV(Rk zfMyJV;nk(p?X9KGE2Ra1`AUd;Xi5@H6?^^=DQTpQoxTwiR~T)}UNzQdZDayL4OpU$;>YAf+Z z$Vo1WGa5_w%2R1c0D=m~Gq+mFle2a?Xp357A9uP0Eyd_Dr0hRaS+l2KiFq;dHk-q| z%WgvoDpr6-l9R#qu5*LsY^-T5KFz(#*vPoIK_fy(;e$mqlC%`@6W{R=LUg4-1IbiH zD<*vz{xjuXHc}Fl06^Yn)AX8GKiEw_v&3DX?+Z$%2U(FHO0Gzo9HQ+5(o#^qKqLA6 zXr0kc3HD&Cu#lCcf`Vo_gWjmQ!Y`o{epbCoLcjo!4*vk9S0r39qY-he1t>&`6H}5j zEJ-UCP2zz`Se|F41IW|RIU}u)7`sY@jZj3L`KBpavoglQZ9AwE6b{iN_{BYRQ^d#Y zK7S6VBWN{ZX0#k);Q$ZHnH-cUpsl^iQoSiygU9-7ZXAMVB>E)QwG`Q=*y8WM5fiylMy@!ovG_g$2j{XHg_PD zks5j)pRH=gy^Cm(GjIV&3sg_XdK#9&fS{59-UjtZr0B=VM@@e; zUn2|TDr`uNDg{$J$lAF6O06T%_|C{(;=oz;4PZ=HJ0yONr^1F|Nh;KnxZof6tT`hk z**H+?r(~y8m2M-wX~g{zBotvoND@Z##~&2sCW@Q(8MbjmB}NJUW}1vL>?FgbA`-F{ zGtXMI#my=Tw(@vZ$EhNn8KWGPIvfQkX#j}%=Cndc2NcZw&G!KB-YZ01gYk-`!8<}n zU+eKiQ-d=q1cd-hY+&zD7OSyTt6&b}sOeClWGOo;bp!3SLJkwC2tHbcL3bn7D1sDJ zJA759gO6Jk5`qrI{{X!o$cr7c@G+>8pm~leoX9(E$t5Rq-hHS6ak2Aj8x7!8DdR)r zx+7XhnCG9$tx~TbP5(kZ!&qB7`hsiUdod)I2~!!tw}m$5O%7b!-7egZQ`~cX7#)3Qr}WzVH+CD zHCGKSq8#bxZxp-+`Dt&JBp!IK{`7sR~Pj@d7#gwxr~r6>QPt;dfegb?+!w_qQXr)4H>b-k&U3($qe-*A8q%G4L4Kr;fDU?-Oj0vT3y#sQ7?vKQ;)?XC1HXDH z$u5yjs?h<(aDqu%5>mcE9ec%S$DOS{jFHQ-CWN_Q@n5MxY_y&Trpq&%q-T~*=(X?% zZLvmLYQ@ma;oLU0ZTi++ka2r7M-1e&!cSqh7OyQzLVzX~BZ^$57t$LXa$dvu9y0b0 zvXJQex{jUCDLoA*W`)rq4zKS4WoT8SppX!D6VjD@P3by5#VpEOP-5UINZcf*Ngci_ z`TmUX!K$zg<}lc`Y&rrK*3rj3J}5G_)u5qIJ-rnn1Ov_;X-U8!kxd5ql%TKKYdv>jP zJb2{%qQH!&bocuz(!14@V|!r5z)s2$1P^ZYk3Ja1UF?3z)?UP4z*$JQTg$X01+eic z(biIT6ufYhwtjVp*Zb&jdD@0|DX)>M|y_8Nc!fkJEl2VHcjYKZc?v?)l>PKI1)|#fi%sC;& zkXzE0u~a^dn0L^9!5hsNE7+O3=#N}B^^PR1Bw<3xzhC(g&Fu5fU>uje_BW^`j zR+1Q%B72e-a_#NA%$*J)LBMr>5j*{Bp7JS0-=gug$n7tJ*_PiE!Edmf$csR$oHV7i zgo#RkAQ9|#=DBYrc6V^eRU1e4ckwx_tAgZ=GZM6QH>Vyp&pc7FXL0rEOvOL5MB@tV z=q0`lahI}ZiCEqcQ+C_FW!@cXSL#*C+#{W*YTu4Zj&@Ys`Z@mq_VLTveC5vxaoj=W zTxMp}KJvx6)P^2$u&`8mo<#?dB|@=bP1(r%%(mt?m@X|7X6t%V6XQ{%572QBuEQJq>su? zD-KmwDqb~HPVDP{fu0B9815}+b8&BOqivRa));)rF7U5lNP)L{+lLgS>dMQOP>rT_ zi^04R{0&$ePF%BVbA5(dgrFVUxosdu+?X5JV-7AovxVg4pE|2I!xhACvk_A47v?_O zEGU3UkQO9Ku1iC( zHOX>)AD-W~zC+6xCEipRy|ts4*q#rFsaG!{1T%4@f8$I>l$ksGRtw_Q9c-Cm*Ch6j z&i*Nt??3Kb!i-5%b#41F;=M|7ME5)K6|vJ>7UrcC8n?mkST^}@3b$$8UlK-#h~LSz zOcDv`3<9IpAW5CAN<%3E&cU?-d)ag#0agIwAI9 z@Jl4z=4`#2b50kDU0hixT-u`TNJD;b0D>EjQQCc@ihN+2wr9%W6;HFIIgbUxQ+#nx zJX>OyC{ht{L3LK_kv>~#;UMlz2_)||b80Hgst#Qmft~U$J)1K%rUPM#Vt94}-|ZN+ zVF~-*Aa>NH&d5xV0zlfh`K2kn9ZwqqO5{1kJU&mQh@KU>?olNFOppw zjc1UoGR_W+)rh*ow;BSL79mTH0q6&?r?^(xP7;=^*FO`p5B=DOT*2_=T%kUNTsqVt zAO7rh?O3yI+BEpsoLc0{M#9q@!`QgQo?**tFiaH<*S}9{&%vDz57B*iQbD zi#KXQWT_+#k72j>y)`;Q(s9s9yQQ5V4TvM2CW&MxC-xM#z0#nPK{3AEh^EIifZ=@w z?d~*@r1XJ3KD5}h`WHNJrWs=8YAF%|j}m$O>s%8vJSpryZFIEh8kDKn9%7prNqZAK zZ4#>+g%s!_6eEK)_`5(7>nojLfT`?ffm-o1K3JvME3~@>DOyNL_K(W9M8lGqD7Cp% zBq>8r@U6JIGLk!IlmbS*B=ja`wBuknF2nY>Dk(|^fKJjq=*;;#47G3~N{<6#D3pxy zjgJuVQb8mh@;cK+abuKRbSeN${c6jmC>=08VJY5YtsEZcp-|}_piGkkdbN}6h5*Tu zNmTy;d(k-{T4G9dTNMP5dmrOOvV8)vjGbPhN|T^_E1D>)R!0iI6*JMwDu9U_>- z!Ad|Ni1*^Sd8B$Qdm%TfZ*4?GO#9YW@1v^`ia!wwZCrKQuw_j$+^Bfc`70_|07Q+& zQlHtLQ&-SQr3sY5l)>I>Y*vAjwV<7{;3N+$CQlo0OoG{#aA|~4;VKF!0Q7;+#Wz4S zK5f#Hf>5Ongc`RP)v;2;7ufN;iA)_uJ&g*J=*u`(kl`x|ol^kvI2Es(`xh9{uz3Om zNj)Q{YGhlw3~-f&olqt?9Y?ondcR^N8Z*?HB2o_>sEQOEq@?LR1k@nmDBr%8&C45#w|NAPh(^w47&x3rV_M)AwnnG4HoX#VL~hDW-zo_TsL!O>X6vtHXzfd zHrCL&#om!;;rPjV*)88C4lIo!XZN=2SoL}yx)5^@YUQ1F@|2E2JbZVkN6{k7R!_F) z_;u(DWzWE(=IK7vE>t@lXXuq&Q)gO*pd` zYH0@E;3M!85`VswSo65Ba>Dk?(=9)LhGK4EcMrC0RVdQ4wywr&MDX(37Y{0*78$%# zm<95lWuGebqM)YIs1Bs^kO>+g-DXQ(t)W$&(5KIvTev&{eAjebG%R zPBQMMV`LrFlRO$G4Vl^Et(Q^|ml$;fl#N>hQ7~NSm7IR%lv`dkaEp89Pod^lrBm4V zt68L_pq%-3OR$XFg65~#YZ^_yUd94IZt*CFo?rUF{3qVJII^j#mcdR*{*AlH85;}D z7WSB4A%-%W-6XYg#+3)Yy=QvRq3J3la=9iv%pL$?*6GAu%Of1ZF7#=B-4eFnP~?aP z3F0dFeUh>yYmO)3-~F+DVTw323jr!ob*E4ZYF}V>ip7!~A1EPG%`|H+a>E~X^5~_- zGQm26R-g)G@lS+e_Ry&x^oEVbrp0>oOcWN_Z#n9BCQH( zsaq&NwFUs*JL5H`S;QD0;rCc=z2%r95TKE}oDI5B=BCpo7}hq~tl7W7>ue(-z2Zny zOnv70tT?a`N{eYx3t9a*tgl@I<3E!p#=9?UqlQ`HIY&BV+{WvSBHqQNFzS688YmD>yRHi7xYB3Wb~jFjW}^lWxv%E->2WybJVtZz~<+-VnxbtwF6PzfNI z;A$h{wWrS((S<{XZ^e|KhQ1RwVVYBbizV5w?;*D#6ZpRifF8=)O-wLUqZLN{(2`C} z?3dZM!&}TD8G9SVY+SU(Z4mAoiRd7qY4ame5_S?#HQ4d|dhFnN9%nDbm&17W8HZ;} zdpl&Ir*QmT4HlB1N>ZlD0G^Ug^!|IKNaIawX4iOSkK4O?&EwY|Q>}p0>`(4$Q3svO zn5W{E7_+qCqL)F8>|45XEB)C?ZHMkvtu9GRi7Fr|K*>5z@Ha9koMG=4}0qi_9f#w`i9~pL2M$w!=UPBzK4q2OVlf zUX0(|es<31_(}GE7zKrvKbRV`%#NF2mI{(bmft#nFhEg_N<~O|$#PcDrP> z>2ZE)u!~+oRH673qq!3%v#e@8BV0041lf2)Zg8dH_=rXFt{pBurxpV72dD4@J0T~h z8*f7>r`R%+ZqYXI>n2-T-n{GA7SCO_qKABj%9~{X?1Ua7sbWYbTvs_V=P_H{3|iT4 zTA-gPq9bm959LKDSPvqPPMJmcmz0hjgAy>b+W@aZTM^TrddZUmPR)2coScnIcPwU% z&2p8$x#FO)1`@|28xe5;VHgKi_Rq| z8$?c_JPy=98xI~u6w);>J7rcB#Zg8nxmr?{r&$I{hcnuQ(51_zN6ER_OAuQe@6Y!%ML4ylD4VEU zxeJja+M`R@am2oaRez=+4Lql@>s4>jZA3uc5)@Rj0sYc{y{em_Za+pM^sOqBJ8uR6 z{Hos2&y9T!+rA5dtxjquosYKEDhU&eS78=!Ap=#!DFJE&aVO)Y zX^NvhNUE}3WpV&YNYpqR>}zZpgDg^Hp3U-9lm!#eA8Kq?%(9BBM4H;+UXVhFC#kKt zr0B@|4>10fB~oU0_^m0~RG(p%E;T^)C0z0<#Z4vB2qEw{Aye*W@~s6oV}!n#CTIBn z0DM$3wX-!`6ojZGDD@+HD8)X=e2ao-QkTCQaaQsD5LDfSr%FLl9Fx|CLv+X{T~3pz z&r&NwRILLi^kAnGzT_X8wF-Acvgd_*9X7ILr9vlh)YgxcBxZ4FdeVSMI?kdyP<+z8 z6gX|gdJ2?EdLGrJ87&JBR|lr^#X%-|)w$Sh8&n~XRH{^>3E!Qn5cn-YK8|_v>`W_`b5)Rz|0AisBDRh+TkY|6I zIHl}^gsCb@fO0iQw)8K(6)G?&Udhx6BayfrDkg-fHUzzCO4Kz-+)Wc|sTFR@!!ubA zCDm%x)6>YLsP5Ua67*^}h>aE+c=?KG8BY>^e_G9&F}p^bZnkrK#jHlzvvAeQwWdhi z@z9OAtZnaOBbg~|<$sK=Vb>pfU8{&$5_M1E`K3m7R(>)~q-sTuFZUcp4Ef1q?>04m4jQ%y6u;dwEZ&7{A)X6Fe~gUfV= z{{RxWK7_GteAidJk~xp3idFclyrC#`fbc@a>3 zLWv`DwRDzb`#CGemDQB}pX$X)`&s3 zre%a|AjT53+O+Df5RnoQ)}!(ypBoOE9JJ#}DH0k`GGpWYsWY6V+p^T?FvE!fN=CRN z)FYY&T?C1C5c6*(9#g49rg=LkcdYrXbZo-E5@hQZc#ayjE*SD|k|hqd4#)XccP2GD zF~hNZO5JT*-#G2k!2Oe?oySk%O0^--&BathZsPVhlC-5icEnPcR-#9mIqBAl{V{TO z?5*>z02{Gq7B;DR)zuJ}QMd|?(y0D)*k)@qm3$ zD@pg)~9j(<#=;+PH{necIm;eS7HNLIlwi-zG!C{gsLc>a-2g{Mqv zRogb>!p{=37F2H84+pU;28b!PatIvp9-w{=FZ;-+OjNPLT{>p)U>UOw&$eIUejj4? zIZr&c&ab&%B}|7jpWImmB$9R>)vF$8&!HS8ALY?Zc#NMJ9bLnD-zL6XN(i`kTS;4I zhZ3+#RoO0HNeezv zK9xqwsL6@P+X`CPJ}#Phf~MX|wStodNBmOx#!9SqJQ04*nRqdpF>4Hgb{uIpw@YQj zvZa|M5$Z`DqASk%a&eoZx8ueLBQ`kNyD;^Xb&_q zh68ADw-yeP^JO~$`5Mrr$~;8l$r#G2kpapWgL&`5O#79e!`7#;%t5x0;>`JLQ~>ip z48MXBdL5~5O3kzJUOcWzlbqd@Z1DUOIOmKlY}_!c63)T5=FvVO+7V-CN!@e4A!gtF7CdflRhHjoP@bwNCh&h=gdRW@nZS`?Y&`h`f(j2cFtf;lp+ zk}nRkBU#<=33HX32~Fl8kGkG8kO!EpLOosh=9!LdwImjJINVdw*^dn`@ccs2oF(!t zuT*Yu_mZ)*g-y$3MVDqOCOvdI+>$Fp}bDpiN)Y{`eN<(F8xvA21X_)^&b&i%+4*k(O*Xcc>FeCR?DpXkPtOqukK{{S^kHtm``T#60FpPhdjJTk;^{4+S;VU8SR zT3p+v;mD| zQIBKI3}%}-`8;^7+1AWH^ZW|c79Mq;J&ro1E6!Lg=p6!602HP_7aItsIknKM457?n z%XhCW-Lt`#fu`dby3!QBq%@vMiG#gA9~Q0lE=}DKv|~9_E{io`OyV~WUAUw+$P;sk zxOrDHfA%{M(xZ#%29>R_#t-4m&Sb!;J6;uSV%v|j=xJ*jRKG7$m;V5) zk7|F%T@>l|Y443zw^uJISC@=hu#JdPy;0f+(z0fYrpzwV+l45vS0+G6 z_p8Z?0goKH31N6r8hjK0kfNh8x%sXSo{{MMS1l8}7Sh8>jcM$3#;Wt4MAT8<$F=z$ zT)i>~Ds4k)`RngoIXia7{{U{^K*wJRKp=z=ciKA8Nxwkj#`#kd^VH%bIH{BPPfvQE zA~q^r2pgfPNb^*ZV}6_aReXrHw{#?{+Jf zN7&uV!k`Fn0Va15^r3S50X6hw&DOAhR*(tUaws_#r|O4H-YQb16e#{7A}He^ChuW3 zF3Pqpf}Ox0?M9|&*!jDJCrK`(M1m)BK08r_v9a@4zOXd_nfEb82eEUAa@z2v(5+wt zz?lc$2KB2P>F5bTBuXrtK~Akwpmh76_N~~Gdo$!ER73BO=(UY8RYa!ES@BSkQ6wRPK)|8Wr}E)TDqu7 zOQTli4Lv&O#N(4{(xQVG!HWkKAcdYg(Nh;GS7sr5X;i_^00Y6%%+aZ`(fDCMQF;#4aK4M8wnH|ag;;zVGwR%YkAoTXArtFQM1uJjDnA@xq zOyIi(C3a&91t~gKIS_fEnxaZnXCSL>ApFp)(J@G01)?wAv|svk7@9-qXe=?*|)wBW`tY@Ll-G= zN`e828-KlL&yD*=-xhIw8{dT8ed`Qpt>Ur<@dOwZ&rw&jcVUW7IyJw<%q`_DYiz9r zQlmY&rC~}gh3AZyW}4=E3$!}pYARbpr%LHcy_iu!<{L*)>c*0Ug+bCfQR7RqCVcW* zL=j$x%9N0$bSGh2QhhFr4YkmHo3t&oHnN#J0sSatf?b*-@3Yrgwkk^05|wHtesDGDR;gE8_uP)8lR4d#Q=i7vq`Sb4y0kjc3O6obQ`)YVQK z(A;@a)f3xC5>nepZEZY#FEH-KG1WcCwP2m5X#rl}+p_c6W9rgGt-hK_>J38FY+l;g zoPOQQI2PE-08>j!z$-q{%+bNe*={r?gWp~Gc(z-`7T?^S9fMVBJebSVsTUO4tos^m8J68BdM>j4_+>fz_*u`-4U0J%#(`h=Aph!}Eh@(xd zP`NwkZI^L7yc+2Xk{ggzlgfutMB_YwUmie@~LY0%k>zk2do zQW{}sSK;*y{{Y^b6srA`9!q5Y%OT<-#aM&bYTmX)1*s|ZB>RqI-i1z`rfN++7Is;= z!4!rOcXHK^Aecf+@PM(?*AYK8sy<3i(y&}qdN)tPT+RLpn`=w_2ICcFY0}NXag9xH z!Gw}WXrPagB`!!z@wq)6D#1sFsLS|0#%RW|1;3=Bh8{t=V?i7(NE+Mg6C3od#yqJj z_Gfq`yGD-q*WpKm7{(`Yi(z+a!E8uZobDdkUzVT=9%BkJK1bz8Ir0uOn(XF3iCz<3 z+KZfD1I4iX!-NHZF0B`+DJP9c{76@^6^}G>SK<`;_GazK+=@MV0z zF3jDKR|3M2M3KNB-xa$glB+1NGJVChwe_P{!M`QN1Qn4wX0UlH{*joK%Vzgv``2*X z8qM4`|otd!wOA~VLU3U(@!|>N$X?jQwsH}v?bF>PJ_8Oa{>qI{S&3KLl zfm!1B_X}y;w%c2wE1y~p=@oQVNZhD~w%GiE+!*6k1Ll9GoxJy5>gtUgv+;@sR4a4zcvZo}QEM#VuF}&%9VYb(;BFh~j z;3H{4fJ#Z|6~uee^JG$zNt&Y=C^zi2a~2_u<=n!IA-i@MWy>@;+BpbYWPp+F6`ME7 z9))A^V?WE;uDPGUyl=+e3G-eTgkngt)#kp28cEVz3)E1rVtB0{3}-E{o@il`auE9u z$lX<=cFqT<5;01L-%EpEezlGDgk11ExH9jmM3!8g&5&&wAi;`=&vgJRip0=u=u zF(L&*0yKZWUW%iG(}HJf)aTh|CGySR1r zq6V%Bkq`jbRxd6NTaJzL$&Gv2rrr|xHHv0D{{Uv3YY@?iGl@8qUfeb=Z9}Oe)-}(V zpm-)ij{>=vp>CMu^`pCf31z4JGr)!+iQ2!5-(M^?tX~s+uKM_bPL`5k4YW4&pb_~+ zc5&is(T~c?o{_O@dD}Y=@nZFrik=!5cIgXRM?tAXfBZamt&qolj($yTgWJm3_lQ?Z zHqGKU_GksQKXq}Xu#z{@6X{6q6DB#WUm9B$o0st=mN;%g@WE#pdkwwBakm0mUL$bA zgIWREwu<1C4#^OG=+rG}C`u2lzwk0+#%%4Ga~do%hCvrtG8G?vylkK^zJyN$zSW(= zNzw*$uSVeItUESbn>)OH`*5(IO`Vmt!1r3uN@Ot3?V(RK{{SFvZ^bWg4dYj<~a zl#mosbR*af0H*v;*-I|z9P06p5yf#wF79qp`_B~^K}2ag@m$X_(>k~P^}wQeiW*=3{8`;-!v5~8)v z;v@l69wg8bnyVEHw7GN5b&X2oZQiv*8cRYP<5oj6CLM13O9?5etS=_cqZ4{=#l#?^CP?27D&x59VFBvN&Ht#1vZ7L;wiQre6 z^6|EH`Wn7aLX@2)Q#{Ok*B>HiWOGRY+;FW5ONt=?#10Am#Vtsa&sWsfdlo%_`d1Gm5$hGjr=L zX>&j(Omyp49L>6D6^#$txedTfrZ=8R`qOW8E#vk+ZuL-*B}qTJcaM3aO@k~{ta#1V zqLisA(mHhBi<=WD(Ic{aAK9fTNjzy+J?Ns}V6=%vozsI#P>n~wQC%E!euPd7qGM>` z0R{v>pH!OY;+M0VmAj-$EfzwxaIQ@9f30hdM?zjXG)!$C3Lv9T)JUy3lI@C=D3)0) zl_0`|4fzpUmtrL^M7GUpAtZq_B!9JNinAQMB-ZPJ&aS|Arz9$G&}D}gw$QJdem&^R zHoXRzaZmz@<^-L%ttlDg!VSHpTL7R>Ggg}}D%bcOCFQ9=z>cG_rzXObP~Qf<_ z6eI#l(jfh6bAFIAR)t$wRFuMbfmWpc%8Y2uDjS0yzzyb`6vKa^cE}@Ikp^NTgWiTw zZ$hU13#B`gr_(SAKgyX1uV573BFG9^AxG)JuQfbwk57Xy(G0w{RFxzXw|&K8oEM{^ z$#w{Ff)q$0K#lrVIb)J~EMVg#K%Fz&lk}$Znp+@>nya7q8SB|0to_- z9yYrJnjSRZ5;g%Rr}C|7Ssar>-f&V%mFf69QN}bO#R~b6)jGNZ$m}S^KF29|Z@7r- z)9Y6r#m}MRcObx!2A_)28?!v8S_w4ds7c%oBvZw5wm)rrZlGhdMO_0;GhK2d3cEj2hWZrP=V;x=Mfm{V0nQ)O3{v4fX@6s&2MJ6sYhBFnjafgXAL? zZT%znhVjSosT_i(20KfzL@WY(^`>2bqQ}T|Y7pY1-=V6a576P#JwyoY%~>su(4rOT zTEdJO6#It#RijL{frAO)QP$;C{$mS-~8W!Hjau183$8S(Lz8gb=@O*4W%HCbI+ zVi(CvZlrIZK>$#!a*Ma29!pSknWgxmg6=e^CAEVe>NTPeP3XeXdp0k@M_WzHFQwHt z1Q^u>{{V4F@^Nw98$3uf_H?Hx;;UxNC+`m_dwNI^LEe4qg(){Gqt*EHf{wu1-G^^b zWCa2UBq~T8^Tk`kIJ;=9*`njKPjjvnaKo><*)AXxsU+|#M5nH{b9GuZ+a774>eS*C zm5~~H%@#bDqZU|h%J&j((X_edvf5+-2pwxyEb@;`<;_km&<(Y;g(MBpKZ~KQElVe{ z*z#Xt2b^uzLZ(D*9cw#-gV@}TgxO|*h@50?5(db<-7?pB$E{h?F!qLYzvHXq5s|73)a$p5MZ?@7YK!F|WFZR=2njpFK4a~U*1i-O> zBN4*TSy~ItJP{4L2pfPlJks)F<5n6?I&O<2FAoc?)nJSK;ND1dHWGr?99D)&;d+zm zBieyuUD>7&C!|g68UbMjwOME1`; zT;GzM>51XFnGCW}r!QIiv-%@#4*)fL2Q^lx`Lm9m&URc1Pn2|N&xyDO7UTH6)>k;* z8*bn#EiIJ!K=lc9Y){nBN+;$w*;30Trp+hJ*inbcbyA7*5~Rn}4*S)-vRmQ@$ooj9 z@jNZXBtFtsP`!d6lTY|S#gdL#t6nP;R*%LRHz&ttJz=v?_o3}2Q zQ;da#DhNqQ1exq2xt>H6Wutx-DMivd%itBZ50|irKvEgFLwIY7E@~~d*xP<00HETN zH7t^pYG}T5HV1`bmUzA|X>bvC?U1oUV2L2=2_v);CbT?p<6!*qU*P7x1iXI)$@e*K z=^lOMh0}>?1zNN#Q462%n#r{GYhFxV-(frxA66@u?cIHwj58Ky=}oDg3y3fP=ZO_< zwuzEyJ+dwKKE~ch+9x<+4|#T$iB;vmaYXtCjWQ2?=~0Sq{f~^(+BZkSdv|bLwc_Q~ z#pSA-4L;*K{c3Q8s3}9&&S$C`YTH_j8c25#?(_#P{XN7{M{5T;ICbI(1zqOpu-d*lk+n8L8`|3Q6LreQv5`+n|X^X zWlTRSV)sqrn1gpJl7c`>YgzRO-XwS0X_1b$HPd!jn5z%x+>3~0^*a6$ilX5zCDflR z=?ByR5};yzR8Ah463C;olb>q8v$jyY#O$*+ZO>TkqFYieY%MJ?vaE3&At|xF#O`gdFd?>BO9}GZ0CZA;ApF+sX;3rB)~rh(y~Xi6 zci6MeH@0{>j-vH}Qk;1I0F=06K--|F@QoQ|IXzhq%Q-&D7_uK&zsIheP=(wrcT*in zSv&j)rmQcp+@#jow7EkAzH0dooGq3VlL%TZ3u$dX2V?UT&yDsg=acpS00zon&RyY6 zD(dFt>!TA2X(Ml8QMn3vUGcjqpA-CHV-2#qMj?fkY!N=T&M?w7Si{!T^+1v5u6u!t_5sX+pZ2K%Fq+Lk`3EYF&n!`q~ zlO6QJ){J86aJt}iC{mLQ9i;g3y(Ipii*J8PZY>11D(XMEg4~DAz(}h zj-J)48W!b1Ov7Z_t(^!`c$2=seJPv~QJS+_b8~I}*|}0mdO-lzUm^(`e0J2SBD}Og zarA2uymTjT<13u|UPNGmi5LLeZ)R{=rTN*CoS^`r5gDEr3 z2PPjTF@EGqiIoWgXWxCes+7LL2d?2N93?>=0gW^5RKrnenEmZ%)#y@8L5>Al%`S#< z-IyW$)|D)omi3u9FJv)E3beCpa zkbRQNC4`YADDSm6%+V^dSWpWINKxNz)a5N1v$_p7undBE+=Dfz4ky`_#RVElr5k{) zh^-xi}q*a{>+Q20K$k+ z9Q2}bt+I^E%abH(;yIsxYNX;6Wm*z((31c{LD+%M$fiZFMaottUkN2eAcN9I)L;ss z)eZF#9_Md*rjzW0)}Q34k~_!nr8ujrAWgMu8o`9mUQJY^Lged6a)czNCI@eR^&mo@h0WVrhvCsDu$mF-8d}8QxQqn=jEeJ>7p7vMZs7zss_dn zH6s0sozOvt)FW{-!8Fxv{)IL661Qbrn z#^P!L%9!nya>=KGkdinP(xFaE z?5}fHQEL&lc^+6%QbzpI#d{^LtmiL|z5!lhtX+#GI?y1%3D}+K6M~k=rB0E-KeZRx zt1#iIzHt^0zUkJbC?|;N#U^p4qe+#LOSaA|XWWsC;P>yX>l>EUG582FD?}oek}+fQ zV%-SjEJqNre2sSv!QC= zj<<`RQ&nY~iDOpx7U~)SaYJL#QPQ$yoVjbGZzlUS(>mg)54sf52ZA>xUs`HSzt9;Q zN|CGin&pRGb|g5TNC)`S99Kpr%mz zc8;~FW3_MvCFmn==(tK7TGZU0pVPH1$*<(BwfhXWf!(D+%Uh%+ax{W@q{}7x7_r+d zj3W)hF(!)_j-w66noKN}OK*>3(9&Do8sP+$r?AKPPH4(6CgGbBtR=+DPk|_LC)`wU zOeL0U`4ZeSFj?MOn{00_sS1)5770V6xc994UWck^f@XZ5gIqe*{#m(p(MVpPg)35; zJ%n!*OUY|OCy70vcbAFWrMAIBu93k?3Pat&9S^--r0i7VFJx;Fx5R9((RlT}&9d7` zDOf}hdmi-Y$uUw*E1}aE))$DaFKKNUfKUzyDJ%G@l9!>lxIX(GEt7ZVmRnuAkEk!p z-2DYHNU7m+=?<`~Ca&K$%W1SakqZtlMxos&fNIih(=)s(FK9IDIllYVI4;q5VA*>I&p2BT+u?YYSAtfU>lt++DhTWZ6UAwHX5?sQMXY$GCgsg%X0Xz&2NZ#Y6Oql z7QtELmCV*``5_PVnsMN3PIvyszu4w{xpe*Qj#j~P$}NRO5sp9i$fRq^Y=w%xTiSat@+7k0T)!$~En>j(LJQQ(q~@-N4vnmMhD;Me#y^On~E z;-F5DQz2XaRkm3vYe32J(h&?<+o7b~VM_^cN1BC`A5JEbCzbgwgL4iGa!y@E^K)v*zX!~#V^lB`*>4`;yGsJ87C6N)`flH zwImdhrFyi0I`1N~#tl843CHBzS-N)@#}LEtFYwDdyCpR0lYEsoBsi5w8+=dJwJYfe zmMU9jlK7Gyz`R4o?A*5&_b)K>#g^w$QS}uovYBbSRZ;L?|6S zjDEBdg&~p3-CNnxj5iE#81VZbHW;-{q6~%Im<8G+>29|?eADA9*|Kww5WdZ{#4lE;#%@KVT>Qx;|9RZ#!1RqqT1oRmlJ** zyKO>AX=y1^l19P_8+G2bWBipBmQFdGS|xb{E~h5u7Vvkj9=E|0i6FiTNb>^sZNPtY z9fbQxx{+UW^$5bNG#$$`-$Pd#YdTNdQEXxEPy z{2$1xv1>EpcYk%ntlM=~tlYF8Wh;_Yw1o&naGB?>)SUi4KINdidCKZN9F_5F?Vpu$ zEvxLmYlGV17V9fzm#(Jj{d<7x<*+oT)3QVu9R+ayOP>|dyCi8`wsLnJ{{XA@CzZ1` z?ao`un0_yK*(hkC{{SN0wF%t~AQA-kQ74(AlrvxA%3lgsG!DA|0Ip|_52Z<7N5S5| zKu}@yzN7|8fg!jc{b{Qgko1{fH;$cg{{WJ0;otpj{?iyu(|6dN_6#hF=gPUm8dFLK zkhLWtN85R+$I6TBj(D2&{{VBQ{v3bR^TM3th2fXEgAQI*%-&dA&$WB4k1+Ku1ZxAV zif{h_mYjbXqda_WZuF7XzX1N#{vUXYhv9dP=lrgN#PGYu+z{LBJQk9BNHJYFc`$u547_K0DbE%1_FKd-d#ihk zvZqQ30HH9gx=z%`D7_h$H_E^8aSO-%%-4rlg~gs7WaBKVVa22!L+Q<7^1OTL8@ybt zx|WK+!*3RBk#LKLoN2|X6tb{D9r@z0tWuAor5UySO}xUqMX<$KX(P*Y?1|UXpExf_ zsH^Cl+Tz%H6dW$KF#-&eK^$JfaADSQ+fsclCB^iGY?=Dg)2@ZeHfM<9HpbCTDdZiv z28)w=DmeCQ{%LiWZeB=-0UA%Yy=Bh^bTLkymD*B7kfel?5(w2jWK*KKO485{8y}|e5~7ueNZaO} zIA5bPcIY>2de}&E3R5HqnH8fPE1_~;iA|g9){s=;KZ||8I@t+}aV8cwsxS-yBVs>= zbn#82J8cteIl@+w6ojm9ApVo}t?-&=dDpVR!xmMiSOr_egCu_{(HJg_IgvfX(5(;# zo;KpNBxT7jqG5)mdZ7e#kT%}5Vr26-{XTx}Wh z~a5C?l__=>f*q3ykJI3v(m7`U-crJaC@ z@4YT~(Acy`?kqx9K%G&%4k->h&}sbuZY@u!ENwILXc?;;rLr}5X9t0zBuDe5G{$p4 z7gD6Gq>%@Yr~KA;g*}s+`w|naT0oz3xub*>NzHwq7}QBRlng|BQP?t)XiO4GQdFdY z)3~NVnWkV|+><5`_cTG_&7D~*Jk zAwUR|8_AL?3Y05jv_T?gwA2bS`wZKd(tS`*Mu?7}D&ui8*v|!|fUW08cXE#BXr+2#`pY$D{%MYc_s&_=%T-qbDmk>7PE#_|8Pc z?sZ$KASjZ(F{sbC9V-mn)}$%Y(7su-a1`6Tl{WH!5fcWM$N2r|v7Bn@t97NtDa5Pr zf|2@GT#!qnxrNHVBvg6F?(Q(^R+1Jvk@`|;`x|Db=CruWiwSpO?l$dL1#Xc!CAL%- z*RMLIw!cb-^Y2?D8qv$knaSM@ZSP!Rz}oe#vm3hm?n1PD;}?OE(&g)3urpG(&Sp~dS@0zf14pq<^IvE$|b z3vVvt?;^FBeMEEf-jdi>m}NNXFIY{c zA%`@et)wWy`q4&o#mWR<6U$cV0`|=W+mSw6NK%vS(zZt;GGxIOv|()W?Hp-NTsoi! z4f3y=x$S5SZ7#yj-MeYw?HfmtyidxQ9r6DFxo~VdGuf=^b#`qc+U2kHC0~WeKNC@8 zLS_9s_H7Oe;&V^lSv%pza>@9<9dP%MZ1F;?JM1}q09wIqLO3!7J{eFy+e$ItM%d)s z2N2BGHy6Gv;rL!BYi|e_xSMP`ZDvfi>PZR%-bYI5V9yoVlOm7$8FFQx5AxPo4rBQv z3h?_ev;be;@Ujy4Q4{|FiKPSs19R_MvADOSTvVf}DzaVw0M$&si;Fboyq}NT*n}hh z0GVJArx`Q&i!KOQ_*CvG?rQA=I7w>L{{STGIp=!}TPe4Dh2_kxpYQ;Hlz-gVK~1|M zKfdD765Op@)#GDNS!DkJ$<7ZGaqP*6;t$?n3(NL40Y^g(+NRaU#PULr z4%}{Ql=)aWJZE&b{{V86Zye8gj{gAs9qU}*e|)uhB{t2M7+QbSOeAsKRq&h84&&Z| z*|+TFfLx_7-D38Pvtvt%O1mj@q${`t)}NQ-RVJVOfr~7g(ktAr;8qKBoUF3; zYPP`oKy*3$NE%YjQC6Y9@&8)P_caLWKtifjc#@6Q!V(!Bc2nAYH2R%U%2i}J? zc}nBaJa@%@U83~MS9pcKYreqmzWs9D{jzZ+fPV{!^qJm$;*|+B&9j7M9&58&{?K;! zIfFafV;CK)$a~8xzkG<41Zjxr#RgSlG2`N{$OCul7Hs2eIr|^kHnM>M)TKH^)eNN3 z3C{ND!QM-l5?w|VbX*4Fbg6u#{bqu3wV-}Tx3JHJ_^ti!1Bqhop(U$>a;-Xl6G`+K z9r>lGv}wnZD$S_ydlbfUx{5$0DM+oBQsqMPPWd=cmIE98c;c-o}kf$*$5V>b?lO<)a6bG>c5nJ)eaif_lhF$2|90|qZxqB-) ziJ{YUyEc>N6lp5d1dey!wJFl3Wt?O3TuVPF<<#R?b~}XMG}v;^?6R0#NF-0cZfVhJ z_KevlPSH8B$`?3Qm78`*7gqM|yKd}yl?74=AC)ylAbv}2u#Od#!rH;HDO-0e8>ZA$ zMxdoTDIq*bk=`khgS0By%1`>O{h%dRlje+9F@jb0(;jE9!3Z?P=Fi(R*7 z!WuzY)T0GZI}QE^wR$fD`aU_yDRglE0IGjjo(x=@cJ#mckJh$h{{Z%S{4nsV?C#EU z%)TJzoJTaK%?~U(;y^>CAe14o(5R3%uT_uwNA&ss0PTEjzq>e)^L)%${{Xnpl9$r& z{(t`fr#5p}{W1Jg@Y^Uko3T`0VK%EN`p|QCM_7()iRFLjs7_CXKhfU7{{XAv zqaTtEH`9Lq0ND}m1TgGdC+F-tEato?5lzF+hMIcC#UQB8#X&nO>t8WsZM} zXV82v>-go4p3l=i+3UkR<&>>#9>a0mLe~npN0@D2bw#z41d@am5P+p zcO4dQj6e5QK*6rD>)d-6yR<1M?#ppYOK>_#+#1;*6563(FAcVFGsXV^v=$kfZ*K7G ztSwEtlA?#u73v~Dl#{o}u8+k^nVtEuld7X#u#D_1u8XBtWS>@@&piMgDR0M5rW%v3 z&7R0UDP7#6*@jhcg--bapV#_BmQ1 zC1pOMqs;Bvxf$TmyB=>q+oqCGRVI3pBmvgBdDDFl`573y14NJtwmUx}s}FR(k#5&~qE zDEen{HH9gsZ4E;(@CICQN^&-tBp&qKP<**EtY*8$)P)eOA_n08m9kR>MxB`l0t$S^ zd4)g%spM)d8$Y{h%yhi*YfFIXyjAr zn6qTrVqwj!sD#XbHutTN$Mj{JWsQa~6sFF|+DI`qvlLxhGS7M}TL$5_^(2BoCvFVZ zh{YM4Yh=#Bg9Fnf#F5CYc%qEiow8YK%9H{od-bi+eyGPaWR}s86Q|Yr^Hj1gqa5O_ zGSU|S1gIW{X0>B#v@O@Lqilo$Af1IUOYC@-?iXpVwR zf@V|{WDUpZOcf=u?cJJAvjCVI#~)hb$$L*nZW6LM{fUiGIO)=XB=$1ER~AtT(v<<* zy;RrG+DHX+ViHUMPhsA&N-YGYMK3J0l}Lnx%<(|dVSJ=c^2Ex@KnJJ?ic=o4!hr5F zXM&+0h@MSF7RcR=meCSHDID|CqfDVUQbJTxqI(Far9$!zVM;h3QQ5XkELmi`v!BM#kQfKf~`>;)3lc(Eb=BCX;J&oV|}OftAwmd zmgs!iWNO&1M@}h=u$v#G7)gzB&q+P$ymw;OOBGR&6bO^jh-is#RFZd&z|B;nWj>D- z$T~m(eR%%>YNZ+z$%=qv0+~tMnj+NL{VkB9B^>tNpbq^HP@U!@w$ZggQf=sV(p595 zJB}xsgy6zV6C3a%2@^%2LTwdlL=*MtQ1KD8V`cq9$pGfkZ2F zG6x*hkZF3$FQIL%DIo2|R}>PHMH`-9JCMynH5{afb z+D5)&*ut$4wpP-F4gUbYrDT>XH^a(L`DoW%@tRv&E)bHGsUVT7l^R>ey^Nk{*W%4h z%y_wW;mvL-Nj#^uI~qqnK1Pc9>(s4e1j#3^z;*xtAd|r#E4RXTehOO~5Elfbrv_VpSYZ{be*|ssX zN3$n~%UM<_f!+lI2?shCU`$m}OgLGRB;Y{7IiFd-nuc*kNg7kGtL| zf|J-NZlO+ulj(u+$LK#{Z))Z8lG})9fLU$O8~7TG#W#z6FfwC;R?#=G$QL+(Tehv( zDXk|{Nl9-ckAs+tfKAob z8;e_};i>DQ(M0O@Kdo=a=FN7Bju=(Dzuv$3EWCsE#PG8>0fJ&#W5oPc=>RB}tlf1o zKm8)S$cfnLPkQQN^Pwe9A~JY0ljR1ey^-QCgjSeCciN5>1ZNBmm*TI7sF2X_PT-pczg;BF|PS+Ln1GDO80>>9r}ReU8I7R6}$6P2LTNF448Us?oCQG{8=&G7mE*l-|c;TV|eJ z-V6sUUD{kN#9Xy_(^^)TAu2P)19jMQN!(cT0kZ!98OLt0>(`R2c67erkse%tBe|Nm zQ)fO9)uMNjU&Hd{{gxc++t5*T!$}E{fVFWE1evOncSze9I!3|xeTLXEo>zk3w6eRr zE!M(8)1?~0k?sJcylz@GB-~D*_-k;6Fr2$(ZHCQ~uFGj8@Ph;SPiignE=|$VuM8~3 z<7&d+D0$0QlB6qC6ttp1k73PqJVxJVE6rS0mDh`&9a;?6meT7>l=pBqLScJ zPLfYTl8;O?fEwNlt`` zUX%J)iwvLpEBQUy;y9gY*KzEUxOmM_Hr^Qe_F+pJY~l$6~+ss{{U}${{R$H z{{U>y`h$I!Zhp+Teo`6hB;tN9d8o2~1Gc$J?i+myDR30;qyiN)Pw}H4AIX0$Q(t3z z&+5y~@i9Xjo6Q|MR<+sApR$H4fOw1ICMAm9;8U1SEGP}6bH#0)_jc}IA(2C5*)YT)?&avYO4h{LZu4a>W-$d zWQQ)z_-4^^VV8Gpp$K`8C=XH8de3UdpAxP%bUtR$ZDp&{6cS!ZZgif5j-#z(hB++_ zPgGe9TpuX~3siA4wQG!3QzA?ic<^aO4WBRr1Rv`{(CDgLAy=0xQ;L9sIuNagyw@u{ zbTMVGVm1LX-k<`xKI6S|@LCo@SSJ@V^U0xNIt~ZGd?R?HAf>uJBCbZAreRm z6TETKxp{FK@MW?uc*@dNqL2)LHrgh!;~vO%LO1rB|8nPbaAfCnIhiMZry?kR8o>U@5M0*YQl}6AKeKDs4!{^lxT9@ zx}rea+|1U12SJTQ0TCSP-l0-@GxCxMGGl|iL0p)ogo6-}N4;8$EyhjsH+tMiGo;J| z)SlGKkz8NVg4)y|>(UO}3a2KDY5N$u+LEYBToD~8)76xG7*dM1Bu?krtCAq?wv-j> zNm2RUt?d-#x*j$hlLJag*!HT7XbvbY%1B8`KeQapIXYG;{)f$_LjcY|F~33Br>Hc! zY^{?!izMy<1L$j;ENOOjc}R}j*q{{xkQ2Z?#Vw^;3NPCL-C3tfl>{E3@mc47$0;Y# z9=fs+NgVIbGy|hAL{|REQdE?CaaAQ_5@bs5(K?A!V2^G-4I=kML~;8~C1F7)uE75Q zeds2(YJ#*3U9zH4>Q@7-kLyFksbi;OMY6P|Ac97((wdNm5wT}T18`vdYQQo>dUqV3 znLm|65133S{`dgwe~i;$s2QNevKAr-$epQ?>{DqV%PoKsr0Y=FK{GV-Je{!14HXCh zU{6C&Skncxy9gnvNaaWJqEHs)^e7pW!Au^|b{|?L6h%L?GS^TP3`ZXHd=L+_5X9;_ zRG>KDiWxx?jDtiJ`bteLMu<3U3Du;`bmFA~<72d;AtZvWL#gRd7mw(6+Ms}-6SRZx zP&9%lOoW5E9cPMwJYfdY0%ZJ(f|8(vWhzQU5;-2#21-ewn=UB8Q4)6Ina@I<`U$p4 z03@H~LYoNjN)S@!sXXt+IS>Ph+Ih{Z%3N*m394nJja~6SB#cJg_g2ytNFS8bx#E zUq!`ljhac~5?CR}S$LI+AZp-J8>VTNE;>f4V|R;Y<L5$VO;rZ)#~fs&DIQ~FaCo7fbhf(-64jO+gEr2F)DDLVhLsK@ z*j7CLM5Ux@QnKaBtGKjmH0oWuu~FH^(i|;(fmme}_Qyg}T^5y%gDYEqdAd!NyPG!V zlcIV^=xRm@Z5lpB?9U$X!u9r%cKdDI+qjZa>uCfL*v8_5Q-A3su_xJAJ>k}0efI6! z#U8`2K`BvjgDF3j^dH=}*bm2tuE`b^lJkyTaSkUG!*QG~Vq0;iw@K&s-9a` zkjzkV-IC>~9A+j3LX zX;=fVs){PMXU&mItumIpy2fyaQnoJNxp68XTGuc=#`UEoFVWA*2`^zgFA$ryN>g^0 zRdxo+SFD12C>Z{AU)tNySp1Z<_C5aq>W%nPTR~yAhb1BmPu8|S7E4JB$(NRrqR+}+ zHs*XW=F@>X-Oj)kl!O&2Q`1);N~eN~9!DnS>k9bd)E}C^ErdoFrxHxUh4s@y18UFx7Vm<4p z(#saQeRprI4n`<%&QcB9Y!BJT|>?=y~oBl}w zgFNE+#!OGc-v>M&$QRbkJe8VS)Kesp;!q^y!pz^!r0lBk&8IJfyN9RBei$L!tWRw;Xb zi{>0%7VfN{DBe2Yj^3l%v&#hL`7=_=pt$4GD&w8;wi)s*@oV+6KMQMcsUUkNid4KN z%sV*u zFMXSE`EID`SJ`jJCE^#BxoKA{v3?MBCB;Xao#YPGxg{MoZ}BGN_Rg>PV|{3wJL~}( zKJ9Q9aNHkK76{aUdXc#maLCyF)#$X;<<-;pCFxW_2oOO1I!s5=~ec7ulpjEU%qvx>3SK0l)`1cc18>f; zNmpZ|jV_T`cxm^`{KIp0;uhO(*d(YeTZ5}_&{blU4siC%M=xM_hCQ2{wYF{B7wnmG z^{{8vq?4;}V@1l?G?PuD_Q<$yU{)`ZvlDl${p#tZ+Z7c`mKLZde|o-2Xwat?`a2`w zJ_B%at^~#XpuWZ}ljM2Dex;Eje_GK9wpLV@&Hl()M-j5cnRio-3yXA!fOkOeT^tyw z<#|$4S|r{l*kSmtA9-lMHs28~wR39&aJJXEN$5>(l&w=T;{0W_hz?ou>~AsF+)8ck z(Qt>GDsNYs+Qgne)u>XU(jS)^leMBvguP*%SjE?a-lE0e=t|M$=~7n_zt0rckv$A~+pTRnl#NM}Cr+d8KU&e_O_@BLbggu4o>yMGWVquEveU{8 z@McPS{22zfr}kr>IeH=4hRNFnT-vbMP)dV=Wd0Gv4~mJ_#wP3belGt2>d)amEr0f- z%|0ySHb&bft+p-NyS#l3{o&w%l(lSy5T{50sD{DPHzZeg`b*PG+06c-Cp53o`Q-aa zy#0-mKJLNtLy#0tA}hV;L-A6sj!q~iEfiOVIgbXmyF=L7hMR??M9CZ1J`+!DW?WKB zqom(v{{Z@e*?2FDTHrb0W?vON9=5o4?B#Ual-Vuy0S*?_bd>@-cdtSHJI&y}zh|2M zq5UToT#?C>AIO)fe->4l&+X^pqI^#A2gEM}G0aoIEIS=a?cA`yt_xaiRCZ{n57b8F z#cuLHs>*APa$mC^Kj^ZQq~y5YN;*k>8e*Kyh}~n1-8*@6b#&{c)x5U~mg0$(5=oLt zB+1;@FD!XJQg(LyU+MVqWBB1|f0Ohh{{T-c>veo09Fb${>ysmW=*XpD!bh z9#2NU3&gCdNc|A~it`KD-d4E3UW-&aiY?S2^Z2$S+P;66GoD7Id&dZHTG`tx8~b(T z)FDesmE{johqr1qGoIqp{TkWg4~F?KI4$oh3u5}`_uNxr2emReUF=M-;^oc9W}9cf z0orZ%(irk=!StXebq>@s$o&lQdR zm0GmBA97{3lQ9WT01i!C%NVViu|YnFMj3B)ZhZ-r0UC+pgI_^T2?)FB%j6cSh8X_VwJlhSB#x$ zQ7TM+P4A#b$Wozmf?% z8mirDK_N}0u)!vmTeHDK}TU#wf5CdeG0(P12(w&FK zliTRem-b1ltO}M;sBL0%QGi< zZXA%Lgf^lH197*_KOA?n245}oSh!7sm*uE8q)eDRR_NkL%JMc@cvYBAm`aL?gC?}X z6lI^0E{g*VvqDl6r5fb*=C#M66Uk)W#@NCM>CC72({c6$ldg%Kjk-#Z0!R_I`-;|Q zdL-8DMv_kla0dSXofH+bEb_ac{kvL|!BF_Ey^5UJX$%iQ(my(P1TJqu2AKc?6RU5^ zg~eEhD(raMB&g}!9ro+mkC033bN6|az)wxOneRjl`ZD{lQkI?0`^8h}NRhVzL=-3v zNlEACoyj5|c?l(7vw%9p#Ys!iD8tFpK^*>cltTv_1t(yk#8F4G4O?WPQlt<%{{XdW z_}DU5Jxe5l0G+#ys&HcXG0SX_K|i6Owdl156hlCR27j0P)vCRVZniuPlK?2hZ|_I= ziPn1lw#V9r zP;_WSX7a@qXRabQ3r(!WfN#2;^(&+xQ1 zIa&i;Sb&g_0y_iz>ee#;dh8gxAWFe03Yq@JUjzruAF&14DpmMF9lBG#Bu|wdCdW!Z zT2xD?36fs${~RjX|zB#=jFqiN8Pqjt*!QlNF_t}tW_ zTeOg%m>PK?s+wnVvHMLx8bC;iCV4bTHcA}^VKF0qI?Wtn(-NC!p^^YQAn52&`KagpU#aCjN%VE$RJ4(z%>a)7oKs_#k0yfg!BFJ zLn73lMW1SiYn6p*Eanhywq<}fvt{Cr2fABr|UZ|$=EKt7liqsuaxg_&jzqD0PMrq3S z0{haCQL%s~M)bAeZ&CpgEH@N&0SO^4_X?%u#GWJr$dbs%M zt?1tguF38TisF_RO}%4q^|{$Zr9dB;>sc~l;qJw}^1sB{T(RO>aYh-zvujotwq-t* zsi*{=i2TK8$sB%} zrZG>mYrHJ+L&V2!zW9tv;?=@}%3HLDmm zP7P~!cX4-qtM#b}w!;~=X)Z2dPF!A;C>Y~QV3{0_Yg|02rTM!Lj$YFZ=RdSYSn%9lc15~o56+uZuJrdvw7m2SS1TA?XRK*uKyG-xJo&$*iueb$)8E}L4xF1nSFR!QG} zwB_SB-h^e%WhHrTr%6e8y6jAoTCw=i^|POs%1ii}T46YY>Ii6^Bu@P+TzpA06Z2-B zl9sZ)(@AYlx{x^}9md^_GCmC3qJQ}(&~p1C<_555F-CCf*YJR#mE4>?zrgH2)N!}QPi1;8Rb=qDbSWTiBy_GOe+sm3jMM3s--cO+`v=FYFRZQ} zZS=a6AjFB@xSnT#lG(Gz@_0QR+512Era`f3=YH_@$CRc*h#FQmu0$ipNbJWnW!cbt z9};&H#@)l*n{+zG%Z#IGTF6SYkIU;?V4Q=RP>zXq8kcpog;}XK>QPItDF6i{Op-a< zkxqBB#BILsVRhx`xJ!D1Na#mT;a-9Z+2>^Vx?_fI zTE(#D*t=yHH;p>7!pQX<^=Y2J6vUesImMNt?TwacLk;RIy28+;=;g9@-1P*|t4um> z7DO<7G0eZ3ZLvFbEm(ddadl+yN`GdTQ3^r%+n%*3)Sjr_zX=m=tL%Qt=gV7f+cx@0 z{{ZnjpLr2muq~YIt+o0#Hw|sXHFJf%=xJ#VFtl=$*MFbmTFlawq79o;yQdgKE{lCk zxZbGQYKp&9U-65P`9%K!tKLz=aO`%|#GK)Jx3Jtj!-n9vf0#qCd)z zD}VI4{{Y$(3;zJPFb7>oZQGQeH%olM9RC0wE7o}_ymc$%!!e0*LP=ih^VOvGO017eAWEx?A4Cn@;iO@QpYlu36?Vj^|kX0 z%+GmvCJ|;tmFox1cfOQ}6YpH_>b`3DxXAQB(!6NOR?pJE*#7{-m9d89e7>8Imsmm_ zcS^TfyO1WlbXu3@y`7BnwM^`)?JY2@84cZ+9J?q3NHR~-twxMCx@AblEB7m>e)`&N zZNiF@fMrMKt^R^=y%mOW&e$#|c;&UTt+{o;Km?KVNtQ}`3mUgbsk0Uxfv*mIF1p&U zR+$I@82Rl;d0DC|-5mSzOAohZ>hY$0u%KWB^B>ryNw*6&;Kd|swbB)7XyIfiYE%$T z#ENz&q0cM2WNOIjc!lm{ld;;G4X>d7r`4sTfa&BAKM1O7%Y+-~BWq{qKvF`KV|DCF z?d@4*g|^%1(**s#gN)jhv#CK!1i<5t-1Au69hDaB$l6Lot^ovrGrZ7C9s4xGZ47Sh zbfrOQNIUV@wPv4@wtw`IBTLImo2v)5~iP>AvO{j;k)ZBOL=M|i+O|R-%=sVLJg~Psl))xVIuFsBQ(lR!m9&{r`R;2(WQ077lv*%G z$(iHkofz_Tgw47nwrqf*pmDdwYFJcRmT7h#VWh~|1de;t5U|q>l@Gv?w%uv5m5P`} zrbvK5jtHWlB~5I4hLyr}9p)wl60c%q8thbCI7($>+j*nrt3a6sAfGJ!gZ!%DE9`=S zweAxGegWI!ql#n@7RphAbnm|1D9AP~07(i_k~#`0#+9NNsgh+yWRuR@(WoMf6K$(t z8=2{~8Di;fRFk14ARcHQM4b}C3@|{{LKD32)9XN?eG8fiA%mpuO#c9V=#&ieL#FNh zBZ;5xDEOgey>n$Cq$hsE_}4AAk3a#rvq}6-l0XF1^<}9#qyo9Kf>cmrzcpQetOs#u z3`1dEX;O`c9?13Gl2i|(AoJdb<73F<_8wwL^1$9;!J*>FM=r470*FB>-VfG^LA7K6 zT-Y5#NC1-%c>2=k2Gt9A-GiL556sYGsP-i|V`GEEL!vshUQN@VbOiofzH%>>xBQncy> zPsa6WH?KfBHWF&k>HILBCY%IS4-sjx5CTMX;;gzA`?6FgK!Rhm{8TOe&l1F|QbE%^ znt<9pEr^{ulPBrDLb;(b%0h_JUuNq0tGSp>ubI(tyKFn&fZi*vwBiaSho zHB`&_2hFiFDLuLOssd86;uwMuQzNYtn<=5%T2MdbP~|W-6>yEMmYZD;(8*Bs0HAvi zKT0kL8P8iDp$1GrBbYpzB!K2WZ4yL)1VvbJb}yuW0T2(?p^MQbjyip&ukgmLZo`2MsuT!26skLQ70=G=vs^sIk4+z& z543~UE5+{{Z^~Asl>!Nc4Z3|R9Old!rEa3A=T>59ed* zq{m*g_vGa1^ibKPB)9{JZD^hAM04tr2}+P@{b<?}z zASbknTSF5h_Up$mH5VOAindUKlBr9a@zbqbWkjAWStqm2_+paUaVu8DfC`5C2giE1 zEl|u9nQP$~_FHX@R=Aa|@(2=@q@`#bwma5W7H#A$iDFrE5lUELp!3R;3SoK?^#*EF zEh3=IRyWozxXRvPhGSA&gC#vkl4+2O6PkQX{Sscem?t&lu+{{RiVS$_{ z)!o7h6!Jo~ypg~wJCy$br;6)%`2A7N%H?X=P}<_RIg07mT|hzz-+3o`>SOUQ=^URg zJB#BL*atI~>=0RL2o6kbRPajbj&u~|E!haPZM8TGh$ILyIIXzxaqOvMlzT+`3AZaN zZES?5WC;URYPdz+h?7m(vHk@3JjaV(CS@G2jbbRv`F8ISwX(j%R@quCTXobnUQ&9c z0eYZw9XYP2jW|iGR*b%Er3_M*C30W({{VCKfByhd`!58(z<*?Hm-bov8|2jZ$&;~^ zuLaGQkKm&evBd8Dy=%Hn*h+$~^-7_VLqGu{BE1vmJZ>;fm#a9KvSPzH!cx4l+mq>j zlRp$bB4t%!ScB?ao0g_^Xi`d4k<)MGUp@1Dc|uN7J)iXHx8BHRT*Vb{cG?uO92EIL*wn ziP~B%rGTje(l;G9tH!J(&4|eMEn46>OZSbu?jdyXFB1xIZ^ZQ4x8cPa*qY?@LUR6E zWUk{7#Wj^be|B6^fD*tY{R99$l!)Wewr%pGn)#&ScRAwX;iNd09lcr_A!LA!QULl^ z3AUx7@5gs*MbC4UY!ic6;!3>Jdj9~T;Glz`ZeX8^XYH31)22SdGgc>dyjJ${#jVR5 zFy*;&NpUFIAP=Cdd1BW7jo6xBkJ-@gv75NAXUI54XvD3M&L@cC4!oeH?55K0l+SIF zs@dXPTEAv5>RFR&KSz3S97(s$x)R!SG{RD(jt2bKq)$hh%)ci7%QrGuxnW~viP^O6 zvKxK1DM0!_R>prZTB(Y~j@=>^nH)|Nh+)nm)tj|>s!x~<02ZD1`3a?DPRBwm+Fbzd ztnM!wdfL*_R>&`X>9C~@Exa~6d(Bj(YemIzHYXstbBA79ULhebIcR{CPM}CTiQ;+u z=<&_3Lh?OSk+jxNqZ7gG?vO)QER_U~K7`iT zL@GU|q_Wn{3YyvY{r>>2em9Nbz9VGJ7WV%DPD;Zp&DyQQqHb@UR?a`s13-kKGPUkt zBu#fep{i}&GY9o4DJ5Qx3SroVrfg}(e8f1Vh#^UVr{kr1yg4G>HgKm)_?ngCmxLI; z1&ld*&8w-y9$uimFqEF6cs0!Ou+trn$*#)I(=R2J6x@QKB1hMH%`B-Rq|r3PUa-Pc zhY;Elw9e&QDw7{AzM?ORW%J=i5t#f*#O^I{Yj;KwYS?!6>=WhNqGCzneY(?Ue%D&7AXbeIC2U!;c;_ z^=bB6%a5gtd`;U6MlT{&r20?{Km>CX%sDxA(S~^<-J5}$G1l#n<7^_?$C3X4k!5FZ zpshBjOt`(#s`r`-S9$c@`{4w|F*GGIvw`%Yq_O7pQRA)nJ(;nyI zxz29(j*Kz4{83P5?-Q|9Ufx|T)^N)-CNzQ(iE~Z%DDz3VOS*;rL$}@>p)jn8l2Szb{p(f@7}O^Sl4L{ zS0Dx5salYAW~<1;)rD zVIz^x=}V3SLd>P45pKz0K`Ks@ASiRFd{MYpXiS~$k}F&_2}x3$N;d%;a$~&|Vu7XX zmRRAc)hkNDF$12JuN+s{Qj}UI))tCEK~fH|bdpCD=(fEW^2(7iw6P^ks3Achbnj1v z_H&$_6HGqHX$A(N{;924*RfwEdM0>%l&e$;pURqr%63fbtuz4*sUw)0c(&-5SlX%v zpmvfzX_0F5B2U>Tv~Ej?PPzHG3jtkhQE7(aE(vU z5fe*sp-xQA3<1It4^zRSgb=pc^f^tk6o8U|d4n|02q?BZZG$Ed04KiHZM)fWnE9p< z1jK={BvDiBTS<}Hc_ye9sJgCgXLJGYw#K<`4C>Gh=F?oL2>MYd>W4vS1pTPr zh>y;xs^}mc&5VKsOhD;N;>mOcxU)in!qdOS7X}~6`T@U(1FTFCXc!ES++pgHAoIDU z&RYgjNC|O<>QaJGsfd}Xigr?(1iOassbYBG#L?6HFHCN1fJ$~Jv<|dLBOmb6pa^aw zYL-)yJ^ug<2h;#bJ&!+1fXSg`SV@r}gUKAxsGwRy#;l59lO{Iyqe*swL*&_zc8x^L zcA?mZCOHGhLYWNE}ChYP6YE=tWks6DdC8r4o!4Y@@;BX^IoUBN>C0CbH;Hjmb_=JENN^W>V_R(?!=)Y%I&W!!fCH}*G{$U}qz zq@BdaHI;Ztu1Sl*61cFKjBlw?+dh#J! z1ZgP_gqYj4HW_~w$Pu>zDkUmZ#73=&u6|!7{{R&lAYHed2@J~rn_$`_@}(EdZE8A?44!2NmxzFTw2?>5u_#3Kq}jFy<^Ok(j6SBve2~5 zE))VTTn0Y~KAJ(Ly9hCu@WdpHO2Kyujfy=r68a@SvAbA~2DKG1MY@&1DkP-O&h>01 z72S`Kk6qiX4RWAsr6~24 za44bl(5Bb2DCNs{4=HY0G{XrxK~(yG-nK^y`vP1SvMr0^3^MAKYLx&)M%?!zt$5A9 z%cDN8OpjUO*FSnv&{TKdXr1duOc82>rgT5-&*8efNLvWRu9JndgRQdhN|3bm{hWe! zp0$@RjTr4QbvZgmLYMY)uvQACTH?4iCu|ZzP|FHHK;l${sd4gm6{E$-{{V@n9w|lC zk9!2bSbNXD`_1}O&e8OslwYv0`9J-#2Ez~AyCuP(ZR#^MAsQVy*j1cacK1kH zl$9V4-RgVM(Vu~__8u=_cy3c(7X7X*Zu_cjer2lkd5cd)C=fz+8&^vQke2?6_}sLa zwwW{juperV2|OLlJ_q;1p_j(cXTYY@!rD;36XpTuz&<=0$v%A8p;O1`#h$nE$!6rTon za|H1=;rtH_&1hGfguI6BoJOG`z?m`!Q(U;sHE8dD_~`weNbuhJ#}=}~aWLz8o3(Ay zh$J+npa>ra>s<^-8$1+cNb@?EZL%^(UsDa@t_9eoOM*cs)L?Hr8mYZ#emTpPvz%G) zCOen2U9*WUx%(YUNACsksy*wOC_A&LyqPu7R};fAYka+9f?9_ca^uY<2}snXtj46D zp{69>jPO!zvSQ|4xUk3Yj6TxMFI_(CcDD#vl9mK1VE64sIM7jxf0xm}z5?R53}H4{ z4WL#Xh@%n+YS|K)LKi2}Iz-9uOoNP_He~WJ%lXmP{{RJZix}Qu%@_(=TGM6ahaGTw z1jfR;m>argUn9i)dA`nuUfN+emJEz3-7U285}jRAV`YAVyGh(=^U-pQui7eXTMcQ~ zY^^0l#!ApYPySLj5_;`f+eq1uf0HBWv2pdh)soY0PTt#4yp|;@_FH*#8y1gVS~+m1tqCOuNz#=oatF6G*tK1OCCj8% zUN*SeaP(r9j-g9YQbG`YMG?YBazOoQlUMveSl#hIIR60kKl>nNue7dDPId6-K4q-W znJrveFLKT6R_xxoKoFZ1tm{&MAAo);>;C{w@^PicPNZS;yex^|qw-sb<=pS#ZaazK z&*fZa2*mAOA?ELxQZ86f{{Zx7@QL~PuD|y&i`%1zlM8-}M=xjmQu_@q;+EI<0e}6s zSu1T`%1VS0w_4V`h_y|b))yDD5a)rokBk`O_Squ`!|+^bz+IB!ZLH67tz;#?&L}eC z#`M_PTIpFf%fDb->nn!tJVWt6FW%atN|$4Rtlc`Z)dA2vv9~8y-u2JPiw-q$cFkBk zInQ#^H@Cu{v+h`LFk$#!UbDE$*-36CwrriaQq=mu8@jj}mQMUYovR0#<~FGA_+BJb z>ggTy`yhRna|Qu(ZI5D>mP}#)0R6N)*;ra9yl-46;EJ8z&bO1E32=_i+GUqc4VTc2 zI@z0M5}hhgY#<~@HMu0Ta%HB|X1nK1^rmkgYS$FF#BKtmO(5t(J(Quh=Sj;nx-J`Z zwrTH*dEdm;sq3s7&j7N2C zi0Sgn>H(%3kMf}#pPJ(2@+Hehe-b9ll|H0`VtMU7xvuU!RIKA? zY0LB#x5I-kpt^+sI4K()>s(ITb+U9=|JX- zX|98I_Jx${(g-FdI(v4ZA4V7*bl&Q@`0(Xtc@9|vxz9djYI3eFXZbXjC%!Lq;sYuft zNF9w@$7Fe&=zA{T_ z&W$HvlfOKQf-+-v9=EqWOedZw;+={KHqNbq5;{`=bEiY3utD_%`_9u=kP?-OhLRxZ zD&`DxMe()??~sCIq7PW&uZ+IP&kd>vs49C?VywAU=tSE900a_wJ*l+sMHmZpB2*Aa zH4=Wolx-P#K#-Y^^Fo!qiIiGqLfimA0MApkF)HYS$ze0e9pbDPW3*ch)JFX_+GwKa zT;ka67Udw1#6O)mG|-0$3#F0@WQ7hk6<|yDUbhyi-V-Od8w%qy(MPaL_N1mlHXTT) zGFAh)v>-1~P#t9RQiVA%L-r~M(wX0irW|LjfgZFUyqF~JKW?b$>|>S z&y5u1knt9z5KNBy0ToU^pgD@7*Z`tZK-iwOd=WX1(QLSoogi_v)Z&)Kj+?Sn`le4C zP<+UPq}sMfl!C7D6?|m&h-Ph4cP*=>Pl{cT4TxE%%1|j9PkI!$MW$=diFsbf6R^7v zTQc%g3D|CZs*<-s$V^jq8|s58DNi&=JXkKcxmd_V$C%;Y$T?lV-~k!+REn@c|>SswiKeZPXH!&sbwi_?yuPo zEMry;*tKoppZIO;B`bC35ZV%-^BrMR1CbJICTTY=DH}1j7~4Bfl6)o0n5ava8BZ=^ z>ugQMnAwUgf*B5#7ZgZOKzEvkspDyB4wZIR z*-0xJRk4_p@l?#nMZY=c8XAz{h+*crU${-ljpN*@rf>)!9rrqVQ)~PCP2qHeT5lxDkY0)gc&h|Nb0mD$kt1jL(<)kN;+yo8JJ!z^* zEtZpRsH}WK@iPc-4PxHmN?0gb6yR-3DMAmaP?*I5qR+2N}e_`Vq_04QA@o!fE>QV(kMUKUxjrr%zU z51lAN@#BB*{{Yl;x5uygI%b~=+r=;P4kG4e$;(g{&0IDWh&Ly7IzUQNk;EocdiSj! zRGZupj||q9M`oDezhjRVEprlZ*K+4ZFUs=ctz=1y}k;4mOLZMY_$F% zhBI@E0+l%J!{2#9P~k#&KNV5P{jsoZDoEeVk%#3B7SJ0dV$EBkOaze7iQyoaA4)YU zcFZ$|?5aFQ@y6o>7gqQJ(~CGKOHW)Wrq9g5KNLALzeBOc(azk@;-`(dlJfrm7QM_F zdoEca(pa-@?izI?s**P&>s)-NJ?52DXJ#0&(~~vt8pm11uNQPIu|^d5O4Ij~1P^qlVelwgv}uZqREIWL z1=bqx_`V`-?HD6c0UC7!!~$lCYhxo7(S7(}mvIj|=FPOJl$}ah+^p9}#JN43-!&-4 z*}qvADqr8(H*s>x14bb+w|PIEdU#4PRL?foEr#)I2TjShWrZ!s*hbM>BJZJcROlIP zhhD9~hZ}ITK`J1`dw!IxuvKFrlC)27{5-IPdKOevNF#5~usE|;H^`Bxf#vE@2>^q? zQQEFC`z(m#7r_KD(i0xZ>qC+HK`1)1zr*hcExuhx{gdkP7l3(_?$t&=-% z-lJ)&W}R{exYm^EA!BJHwPl-LjZ3goh)`P66bLeSkskG#<3_wr%u<9Dr%F=9 z03c4?_Z4l}iAmc*>uYdH(hL*98&O6}=tSjCgZAvI5DFAeZj{ksCYYFzk|qHiD3yCD zrQ05T(JD^CDF>K}CpG9)s`Pqn^rQkH4#%1_3G!`|CRqSXnX3*nu8)nV0O>-KnG+o< zqL{M}x;O!!Oqdh7ra4Hn&$_N>T6B-h8kZm(%#E2$KuP}l)viD{Y{eFl1j2_rQvnxC z0VZ?+IUOnjriUnF(vm_{o`#Asuw^fyaL5}3fF_$2NXtBq=?bNyPQ(M+YQXQaV4Y)P z0#vns8snaX4*j;H3QzY#9BDRFV$F>`YRr*gUVGW0n97Fs(DvnpJ~c!_f)~MEeS= zE1DS`IUt1;ojszfiY!4`c-bKAJ-DH8Ad#{&x%BZ@2-jq33Zl&;s0W>e7!r!6W-UO1 z2~uW14O&(xSXyzV3O@s_T8d?~sLSrFQIdoc(v3K+HYxX3c&josYT`Fc(<3M`i3$DH zutHRhIW#hb^u@}=KIEO?t5Mu<(u?6Mn-E=*)O9TB>q6o7i*nK7v<3l+iYasgbb2h> zPJ^e_+*E13Ak@cbw?dWN^qPu0{Fxls?G~ysAfv4sq%3xeXecMMG$hEWoXz*<9e=tL~K{?q=?vYwDha_1-y&UHvYwH zX=SwnqacrJidX13WJ_$Kv!)qx<4%+Ur+_20j^FP<;k_b5B2Q;C{?M3KBWZ1R@-5tG zZWKr)5$_zog(XTbdYO&CxTMECp52RiUv1dp=T?m= zc}WCJr-M$8OmEi4Lo6sC{vcUUYs@;JZ>p{M(QeUloES-*MP&q~)hN#+Z>1_;JXc~~ zXxM|dPm!%@L<7^BIAO=>>}s9#J7W=20cEt1@#DOn)Y&dO>>1CF$1b?6F$#X*wQ+j@ zq(~`j{{X9f&*&)=&u>C!ur!|yl(P_rBD zB7a)3k0mXQ8@9N*c_;~5mUiM|sIQSSeS~G9eQ{}I%F?BhHAhp}8Kq>)T3w5iv!PxA zcn^j>cV~#ZWpcui1x}C@6ZDX4B&Rp*JaePA9uMU=vg`O&+xA%IWy|FWWu`ALm2YlO zbiAL#*JDABl#QHZ{pjk?hxuOH8N)4KvAb~rw1lq@RxGQOG<$2*ttadBuB;~CMM7L1 z6rYcN4Pptvu}ny0RIQ!Xp<ca`Z=q4gI%Qdn+blRjkhGEMh&2cJ*;F6otQ&1=^NUMCmr3^=j`d9&rRPV|4l$Ko zQd0A-r74|~Hqt8W=48m_D?!^lI@=G0p|+N>I#&`&`qfx#4p}WCIgMPpuQUaP5=h^u zthwWRuzoiWB&1A_YRQ$yq-am}bp!0> zn{B_tGX0yE%Tvfe4kiR7a3ikO#?OIUk=OCFHyS%B_GHX9H}}tAw@drGZauBXO5sZa zOib1oc68q+Y;)P|tWO&96zFAew*0khT0$qE$W)(@y@l}m^isHPD|?$UXW6z>cPjhh zE#68D1R(}hxaN`0E!s9m9~V|^_62}iJBeCh*XjL|no@?*q!gIj=Cs2r=zOt7(`BoG z;K;(PnzL3K?fXxxB_*?^Ds3bfo}2G9$mVy^Qpf)QNwT>w2)AA=<}Br_j;+L%6)i-m zW_|bo0b3*a8S*B-lQugJ%lW$c@r&FuEj%pHfQ0_g1cdTTb(yUY!rRf2&l0sMKl>Z) z;Vx3W%+}v~b*w$7*<;9CNJNAVBiQX-UllH>;Q5U~{w>ojN3zy6hO$!L7iim?B`RCt z1t1TDC)&5lDLSh%;+$TaBe$3p_8{0z?X$M4TETfFZ0YEs(0*0U&jV&R^vdTLvbe$S zECsVAwINR+tR_7tVhQh9__T+p*3DJ%Cpe=nuP&ia-(1=;egcU6NkfVeKM;NeW6zt5 zO3j`=2};`N(SIC%(l}-ioX3Vgirrmes6)2w*;w4A3VCvU1$tGWLEL~(HI9B_Qgn2% z_*(s(FS@~#iFn}Cs>04zNq6swV+zMyNoddFTk1ek+$X69J*zX7+XgnWD9HU^eUS5I z<(6H`@2?%YU80&oU?rQD%D@{JQwmXzN$Xv256ZQ~<^KRt!s9NEq~TZi4q(I5-SKtB zxSv;;iAuf!n(JcEt(-iV{`OMY-@vSiiaBw6X@c4L@K5a6N)_@I8+=i6MZ+eIV$OeO zEF&9bNNqTdA9NF?4*l60nmsog(sC$CRFK6d+GRg!;qEcv*hRay))?)o4wB>0hX>FK zOG!V(*9li-2gHm?yNf6A{5v~a;I6oZ0?QJz;f@qR*a}`ul)DNzxw<*Eo^MlyV$K{} zFrxD52`#p!Eu1M#a#Xb_4PQU4ax-}p-PzHHi5z{D9xtBWyh5$UNxjCb5QU_^^C6{^ z+!X8wJ$J01+^K0JUOaJIG|wDp-sc;4aC|YmAw|h44*7*9cc17eUWdmLyF={5imNWT z&HiA;Z4Kch+gqfCIHEfvk?aN#}wWU5@uTqgcPfe+i zZOG;2@-J=C*FOaO7hSq+QFxZoV1SUMCUng8?rYI_xDrMTv*jHf5yJAlt&SL$?U-zU zkHiPz5&G82*RvNIBH#AwPQJByWzu(*dsCq{mW4|lyRnn`Wrl%SN&>oV%||x-W&C7r z^37Jd!9Yqzx8k;ksWi;2{&2j7~dG4f4%A$XBNTA-{ekYkz#?2((gA{S1y zLWwGv)Jlip0MNHX*C*%`?url$fwcTpPZBP@6D&U1 zx#g&x(yg|M`K5el7U-DS+Mh}lsY8xvqaQ{&U$SFkY*IZ*A${kdraX0|FO@P~0G~i$ zzlYkVT6KOYm^;xyG{BUJU8TANCt#E9Pl7Ya?3G#DB!E@{JtY3IPEc>4L)P};Qa~Xy z$=aNuLgyFgFwL-#cHgM0yDD#VgBJG0Eg+4%$29=#KW@M!DNF-L8ulr`G}}q^fwvoV zif92=o6-UkD;%F{H476z+Pph}JTXoP}QhR0|Q+i3# zkY}|LN%jn-^k?@{q>_^$btG1R5%1lIk;n&VJQ{$wu`tBM6&~AE7UI$9V9R{&I`yav zJX0y22Holu){K(G4y7ZSI4fdazmb|5)xcCoPPEj9PD(wBrIhLux$Dw5{{VWHB6#&; z!MW={9jXd89c@Z>kU6e7=mriltwib6ncVx)rDO)XXQ@U&O!e$?wEJl(6 zt8rm0h{-l8+!)o!9U`lPBgynUYQ-tsCsK~$dR3^U*bY`aO`$v{3FspPdi3*V$(hLNQEB07b!W6s07OorHXTw7Gb^ zw*i?v?705`2`fkD!^S+NjNrJH&9&vF&AQN~0t}ENo$HsE2I@sa%EvzYH9HZvC0??i zuCqZbDzvE6#uD#9q@bo$LR1F=deD3}skSaqkES{M!difxjB*c7)DOm|p>vH1d89e0 zO4GUA@5rrA5=wz)YQHJ-5|=cRA`KzGYwr9Bk;KLfJ0o?x-G#qC~s*1|)VND$B?l_e!IKtEI3u=7K(__wpHnFGPRxp{>) za=v}J#oE#3sg~@%@1&8*OS%=)og{nFrTZ>ec>e$*@5^}u#vCy#O_k;9a^qwn4h%_> zhGdRMtS5h9dm3}cChZz=I7L%N$7Czq--4(w9KbNk;0l-bn`OM~r*Q>A07;oM?M;e( zj+e&PnX{Qh<&5mgzWs)lo)hM|b#HPO*gZ*E5I;d%v82`g7&9qBs%35CXW6?7#4s~^ zmhUiU?i_q9w{GKPgQtSPBuV!_%AMoVmfnGeNk7I%7<^>=4`A7?c&0mrT|bwzg}FNL z^J)^O z$H|$uVJsg)Xv0mbFEYDer7!n_cL%7R+tO9DOmHXJdiX_)-(Wb_9_6~N*k!fqQFwrv z+heQdviUHTQa5akCn@$V)8syU7OwE79icaR8ef3SKL>s z2c_P`S6jrCpJxZl@%Z<%VsRXo?SquE^EWx<6Ti<^`x z;3s)N-U-+k=94J2_G*OGx@BRQtl7I&%MG<|-!3D}NFG@`8pD{`hAnrqog_UXRJA+YdhGEQgr!RxRAOa~u2Tl;iEI zsRWe*IV0=Ru)J^iv!~{HG^!@0_<7=6c*bzU@l1d3rARQR@84UDtwJ|cfPLfitAu%I z<>JWsa%}w`eTDp1!0Z)=;n;oGln4XM`|-F-@<**8&YpG#nG7xt;xjgQ=T`eie{z;* zcIwj6etp{vsR3SdYCur=A6n~T&gk>mF{JiRaa{3zgD#| zRO$%m5S2%G-jwq>cI@ckgkr9W;hzt4<%kxynO6z6!~FSa*VpE`5yDcfkT;o%bW@@^ zsUoBCI|#!pjp8v(*MwX73I71(wAH{_8*Vg>!R!F2(hX$dwsU7VXAD;q#BSU0>e}s_ zc9y1Ec`W&AaGs)fid>fTE^<$3$13=Dh+$ynoYG#!@rO)9=TsiU^QO~E*b&EjXF`6@ z`A-VN?f(GB@#}G99}*Cgx>F#C1A5=#K`pZ%k-aS)Ch)yu6}U~p92S^xAuKdRDMOix z>tdg@Wq4X$*|nn-!mTjm*|4;@;U29gV14I`(3i0?Z=y8a)xE>sOCf{2O!Lm*)im4C zB9}OBwp6G|PZ9m~qe@=LR(S2GXgHOWCuj*9Nve{v<0&VmRydojvfGJcOq9SQttv{L z3|Viow8Uh2(FO8Pw z$t8IGs~i7 zV8I$j(s@0H_GzL?eVbe)0jsGSNTQ5v39?OQ&5Zs)QzDues>@8Q>Qepqrp8tn!FHr71d|)h zM-(B!uEtK;n_25kPL~Y{3?NM`aVso zJfspQZMdS2G|&nx$grPRp+p_J)%-|}GDZ2~AU0 zT^^fqK?OQbZ}zL;1)xSHXs;<+3X)=~QFTbZNT9RL#v@?ci)?O@GC!py;cu~#m)WG5 z>&DbzPdwfGzjg$fSrC)+QAb0g<)rp$kBYu8WjxJj>L0nVcqtlE0>KI=xTU%M8h&Ly zjwSu6a!yplMgAdgV`TAhBq)Fif%0sIwTmuEMZK`8KF^(L zDUy{1ByG6k+NNO z@?g6ee?-394tDI9p0raAs2|=M74T>zl-JN|DuY&d3*KN|sssCOH3Cqtj?{;nhvN1e zB$s8Im$L3zQ;2Ibrt1%ck{4>(Qq*H%0PR2KJWzjp>V`uXEwbXZ#Ywic!gA-{u$(QJ zaVd4LILA^{2ou&wJ*zCI$=e#EM&0;jYl8+@zs;X>wYPDQhMv%E#mVSOM6G1c?ue}U zB)dAebsml7$l0GUUzvi_pdXM)RtN;_~McB72wB;hX6b!BY7nJ%&G z>{AW#TPfT$@;uitq$F8gv}gB%9V>zUl>Sww5x-@;uB(Z%xl=df%&yy3xt~4dTrsUW zpHar&dG#zzl*$j~Gqr2Skw;QzKPCyu{xP!QMsUhLAh4IR_ltQ|czZ)--rCx%x|rG$ z@{+JVM4Dr2TZ=@FCcA?ye4TrYS%qITypx#1hKAi`KX!3xkA(@R;%Y1MLNdWO zRYhZ;JUFt=7_HUa=w4rtpqDkQ{pm^|l!ls2sw4M}KNphX?koq232SDrXP*gZI4c&CBaID5{c%6aTH8iQn@gzA{*shzuQYYhCkdS=Xi zE$t*#8OOt`oUv$&%d2a9a-*^dK42ZlJWWOAw)+nz7MDdO{v%~$iLmnR%bu@F3Du-~ zn$tYZ#+PEC-$u<@XDm(p8xKP`t;^P}H|e)hfei@XPTPD}KP5+XWAIJ4QZAgC;xWuv zOISuQ`r5@%u->9JbtCZ4_tLY;-jUkzWV$*l_ISI;u-vxd9@O$y?6#GrNsa*PNtE1O zBfH~6j9Zb=-v?O5?k_QHRr|{;A$U|3ty2gI+5q30(}H#RH$~*&;*(ZxHblU2+q^j! zmpJAZn6U*YmeT696d)hMgmvvTr{#54V4h5If5n>{mlKHFy<>)5+OXP`K}_53J+*b9 zgr6l~HyNiWo2}udTeo%ATzQ*@nOV}YI|J-~mFRq589vSrmzuga6DncIv-`T%q^+c# z18so!u7*DuMB_?rn=6;EfN2)0Uzik`OrD<=(Z;E4!Im1(o+pK|aGR2psHH>@3E0I9 z@x}TE4*Dn@?SNg_Tq*V~*;7grsVO9nZ>MVI`8cT^ZyP7suKp%uagF6Ps`&_h;c6)< zTVh77qz;_dHc+**f6kPyC**_vq~B+od=EI|*{a&b=yvp4+oE+LBqR-egn>^cE#30%ELdeuCDrMjk;asWQ6`y!H13XEvb&^oE9}AI zLNY3?u?I0g&%l*8ewms$KZLV#)xmCTj&Ix5_gPBj7x9yd3 zrxP8LQUU4enmI+w(Ml`Xs~L;Kyvv$#OhXX8$L?9fhzdz&@Y}&X1P@5|lUZfq$@J*x zW6q-*NRDB?314MWF)T|G!?LCrw5>~5s_n(k@9Qc^GCD;Byf|ZfV%L|+{zx3Z9lSir ztt$n{c38G$#1jjC`8LdiD1*6E%U+N>0W~;5e*v(In&fNmi(WH$ql>k6-G$x(mavt# z<~;eAE?hwyr3%<~{3B|mW3WbzBmV#Ze?3`Z4rRQYTWzNlxA8l)1RJ+M%xBbob{^E& z;=Q7?N*DPR{uSY_AC#`&zsIp#Y)cezCB-trf*WtR5={!HVXwYSJ1_m4>Yip$YZ9zv3ix_NU`%lSypf{2tQR zCgAq%yLelBPpqHC+5~Z0Qa*P`dyGmVkz@3w+Ku;&$w8t&> zHOebeTQBU4?aD0Lyu{RnI8u@Wh6+b|*92wBH7E2(*mB!j$^#^3Wu4<1I@F|bSmrJ*HU z5IF?%O5(kmIU-YRkg|nDE+=zW1fIp@WRA&|1tCO0?Xz+LRFHQ)XrieJlv>*kvV^GV1Ae=EQ8Fxdu)9bn zVkC1h%|xuPjVS8sUooQEO1~0GJJl6&`Wc&a7%0?@;J`Hq)JDo= z%#Gt|J5;|y#J=pJNz#8ILeunJ4cxVDL_i7ew=_ItL8F#n9f?tn4@x-OVDUo**?NM8 z+s6FG6G07?VW@zZjjV$(54A$LBLizQsEDei*hv{C z(1Exr=V3&m-$ZVVzUlzvZS7aVg5~rsEo7JpBWj!&wl3YNDjGm1y;{b>lci&%S*VR9 z1MXj(?I_-D@c#f3z80?E+o2_DN##FI#=Pg1;>|boYJ#M5 z6Fd0rnH0C|uU&c2WGLz+pVqmJnj;@+nvQuDojQ8 zZU}`XwE?=PpRH`iHse7z9wbWU-3W7Kq)z4|;883$+XgrjR)m}iDM;9m2Iqx;O3fsb z+=VO;>|_FU8BD53pU#>6%jq#rEp{rF6rda^KmbGt+)*wQ_7aNw5jMroR**+xd8qKX zy)lu(>dZy5P$5VugW4ec)7+-?DZ!7JSwc1>B48`1rN_lfZI8!|X|hdWi8`iI+m5B} z^qqv!I6k6kafJ4nE5mU#TKQxWOm3;`@mVs(-B!fQ0+2-t+l(C3p+$Rgd@y$BiO5Ip-qti;1be`}xq_{Th)f|zE z*I-2}J7V_;#<6?*kd-Q1Qf*39q{kj)!oGKku=vhO(=KeEn{x(KPoAc(O}ShYUEHMz z^9b1O1|zBb>2t_C6gc+Hi^(5re7lF@)=cJH6DeUYGCY-CS>g(92s8MUPzu%8@Ti|- zMUO3-oVj~9r!IKB&Tzr59LxFh4K`0{Gl;h9_QgFsx38FOL%cx)p{=l+OTYOu&m>p! zLCY*}Jmm0QUA{uY7Pge)@e2$}+10ELH6VeedH^8ztL6R$zbW+_{{ZB(a;MstB(mL_ zGjEDnV%rf!qUPM=47GN+8vsGr{{W;!Q~pI&VqYmcYyJx(1@X@u%vV2q$=QD!#PZ-m zmW!)9!Rk*yx11{c(wQ_1GjB@9@W)?Fu=4kaIF4jO@0DqbVYkgTpxdrKwKHUQ^_3;C zHGim*X`dvU`V%ZLB3SNR!Lf^mF+9k;cO1q_JjA%=!-wxJh&z>%px+0854|P00FlK5$vLW3PRB83Pk#W5NoTC6HAw80&;qBWtEk2CE@ohVb|f-0)!<>R`Pp}qMMfkn(B=Z z%gIvg+20NFpuElYA9lV&>vaWf1V)!&9ia7@70Szv#ydJ56#oGC6|=J*1)HotFWIK@ z*f{cwfVBXW06Cw^xiZNwe0J)?VE8jm{Mb4E4PjD(m46!$=fg7w%e~; zd0~5$g=*Ewn%4{TW|tMFiz6>xUo`t6)e@u_24+WNR~WR#$wl;8P2Mi;#`Q{2c2au$ z(V3hT=oN_J);NmYws|_w;YlEE^GTc|R9qWdMOlwzm&v+sNJwQjq7}^!nMiNl+!#!PMcDpborNZ;3_P=sdX7gK78C zL}q`pJ;rv-Y~FZ%Wsl{&zi5Ck>jYn<`N@qbS#QcJ1nx_&FH*Tm5(L(jH_|fV@!mN8 zUd^lUZ^3UIFiYGc3CsAk%eGeQE;`-A!S-#GK=i5i2VP1>quMEo4XdzcD5P~uBxQ{M z0Eb()-Zg)RUIId#Zq-Zj#B(at5i`*yl--Do-(l>{f@Vvmt=qHB#|l%5C(A{!L+vO5 z04$Y+50ODQ*`hMm%BKP#gXkB_Mm5G&wwXRTLgPs_Uaq!`Xv5V{X`5_*a4A zc%gGicGYT2At3GM5K5IDj1JYF7-e*hnw(O*vd+z!a{DV~WMM17>>tN&QezLp@RaFF zf7Z2ZBmBxWx)F7=3-Y4p`6HkHDYtusTv^#+c{dHjapf!0sS9bP9yJlNi0mX%=Z0^j zR$Tnu!4+N&;T}JGk6Ys2A>u7NdQPM97O6E1wasPi(joN4NQpI4&U=gl#uvg zUA9!X?d&bjSW>R!klblf~zLjX8VH) zjkxB2T1?=9CRV%YNdS;KcBQ35AtZ@b90>scL7lhes&`r>r}RuP_O&Q4V;j$EUpMRq z?3!VX?%9X~Z=cS9qHTwy0yS?t#Yo}?Qqe85N2xtNl=TWSyq`px)i6>Cjt8c$iuoBS zwF(+|)O&QR337dhZO5nqJBi#>CSH(c-T?^&j?+zqiUy(p+$8T-nL!315j%Y~cYk3H*58@d^4g^Gg2 z0D?Omslbkr5CJ3OiiJti8~_XsN56k_Ra+G1*s@Wuo(~Xqr@}M{vQQN>`q2uMUFgA0 zX%VM-f~S$GY{0X=;A!Tda*rjpCZru(X(Oz1DhQS}9)whZ1g2DHcpTIONl7}S!RfyB z2y9N3I6W!SefEJ|uZ-_v9F?4Eb4C84vHozNh6-|JG#8!puo3P3+frxg1j$;%kwT6f=R z6{X;u#iGi`P2#Iy)oKtQVc+!e$@b_=x~c+kVd^WaakT%zlJpO#OwUxBwddmX+)ZPbMYsO+6PisX4dEMWRK;%!Em&dk@9?yMek z>2Rb;&RMN8>@fHu<+vcXZa8%*AkSdZ>Wv7nzv1va!Tc5cGqh2NJvphGIxpgt?$H-8%zRY zg*$6-e79|o7sP|p`|Cot3ue4hb)ru83YOU`K|;_*&}Z|k*z>08pyMX>A~^mSk2Pv+ zASia=pNiQyxvfh@WW?PAoVL(axJ!mYR0h&3D$1b5Tw~HOLhji}DM3hGu zW3l9aRvp7#w|VB zyfhZVR4p+hdc7e20G};NQoc=E%l5;KzeU%UGkzPGFBx7(!`aO^niP`Su~TbmSJqrh zn{%}7PlV%I6+CyQ=sAtz-ZA1X+gmw-+hyb>(p^oqCew^0bEPG{kHGxs`7)t~jkfS^ z{{Y0?UiqsWM;-AKG}|(O&AuMRt6$;lx&EgdaRnrGASlsCBk7eD+p_MwE_JwE@o6uj5y2$h@Y%fn!@`yqjPhMn$~KxLOjRZhV*0 z+bo~nD|EtCxQYBmiN-ap4~(ZS&|d-n0JHGh<=f!cW$t9eQdHuv4VgB`SsaBc*6E+} zfSRsxU8`c{ig#g5PW8(hd;80V-BsI#CC9JdLrG;kLu@vEKUp-q`MAVvF*fRsb$zmY zdBJk7Qnv5EjfmW1n*?t}bA zckw7mb+d(*H1o53&%vH6&Uv|~CgOE`Sh&qJb?3v!mw$xe_c$%O9llk$E+%B9e#7fr zMdQwGw9iu+sV%c)@Z5))F7Z6Kn9B;aTAA|SWDS%+00TQormq4=M;DP57aKSG!YsIq zIX3UyTisgUENRfPN_PDKuJ425aM{E2yq47+0LZu2$t*VIvRa6Og93k@dM_RpdHk_= zW#xd|DL2mt3X+BTnex2-Jc41WkMAjl#@-xuFiH?H?&(eN<(fo zy;^lDHmxRS`zMT-gRI>lNJ@+eCy_mB0c)xbsU_xA@*6>4UAFnAB$&EFYO`k$vUxX1 z^PW&CC!iHlg8Bu;r)#55yj$?X*~=_Z>svQhh+H2juQk)Q8 zxAjJ$;r;|-m-knTR$R8YmWv2l+tNI~eN(WLzi#tfjF?(F82p=cW1N}xYryblZd=5y z?k-ZL`G*g+CDbivl2SlQ$&J>%TMdAr$BTB+JdY{WEq?u%&I{oR8$ztDa8|4^(r3tR z9$FPW7P10}9?(6FJ;Uh79IO3K$t{yV_T>RjI%avXn{NzTXs?_^|df z=9BA4uCM$x$(U*`(PUY}TvnwOG}45UWRL-q@_W{KV2au_W6L)Cvbe^4Dzd!|J81fy zNR@ehO7u885J>sl)@S4LdScOl z48$=^KFuDRvWq1-twZ-#;a48OeAP}n2NHt2PR(NR2ICvNa?dYhJSQ|`IE#>lJ%`#M zy%V;}A^`UhwPv1KE{={E#;#1Ha{{o>3)ZoBdvTh4Ln#V2o_cN@vRRGZQhyr8-jHK$ z=~B#=+O`tsmi0^QKjEfW%zhzbNXGLrS9fx#IxYkcXh`686qu(s`40XoX8Gm(it{$@ z0NSmXN?`eD2nT5CT`Y8!7<1&=CI0}m(%5aQYecPQZADs%t@!4>oa~CpP9KuqWutL+ z5|#8sM&Cb5)d;T8z8WIAn4;LO)vX{*5}oL0t(A?W{{Uq*jodWL4ha$@l^v@yntD1I zT)n*%ej|P#yHQv!wh4j~cReDx+2s00hvTm72B%sjNK(*(Pg4``L5g+TBJtPx7q?+$ zK}kq)Aeq~rYS&{Ej7RDUN>l0xUnYM^6==-!Nq}x`U3F=3DI`xp`PEqLIg--}+AtbR zW>ivPCIOHm-i<3B<$EO7h*FeWNrE{gT<^^bD4Jo&OCT*lJM2$1o=xamwoLHVw7ok6 z>Xd>aJ?NYo6_#>TOzc@g(1WH-?Y{FtVLY#mvT27~!AVd81Z@NIqKdr$@{_ze(CxGW zdKw8qH?WiTO)RYzN_HhtulrJ9L-jkbUiP-m>ss3s-mY?xU!=o(T+{eQkHr5~YW zj?I*iHdM*$#Q_7>=_6#FJ%n-dP%dmWZNx%=CU~d~1{yj_Iqx+H5p7zOd6+Ut=A{eB zv=m`*Qkfs6J#;KC+KPaa>;)Vu6D+Gxmxi5{300F+e;D%hEnndo8!)G1Dei(t;BK^^_77xE03 zYCt4PNZz4MrZrPU5Mf_YP!xpJ*Wr*=)}caWp{N*%9eJoh1vUW#Ve?jjb4eJ6V1RV# z>9;j}E3kef1?%I z>PQlhdiDJ13L+VY32o+G)|9K$y!E1TZ$WaAq#iTmTq_o{y+h2ju%yQuP>#mbzZoB! zkGB`u`vFohJVlm})2T^1U8Fw|rAKf;=2tHu{_*bJwTp(360MgIU6 z3{v)4&0%&I7D>cV<3-e{X+uLmQ0wnM6uwB;2{oXrNW4aYHFrvYvJ9L}ezx4&7q-ejcyHlqF%s zLH__sf1FV`LB)xDTG9nQX<>%GmA>8XDADU7u&>b2sK&n@!bzoZLbo}oh8Qg2`C|;j zfKHXTqPJXFo~kB3fJGvB_f6RzM!kZDV8(9}66PTP0Nv9mODZsd>=HHndM3ZpOH{D$#xHOVD^E3h}{QM!U{FE zJ4a#hOPjHfWr>&7hFM+x;oIqHew6}(gzkIE+vzl^M@FnKX3OL}tClfFoW8Kda&`}h zv+GaaaVHpMTYfESL65Cxj8V2Nt&@zim#vWH!GAX7OH4^}m4AogkGi$b06NQK^Cztx zrR>v(%#H0EQI-5m&-r;6eh$tzm9s_SS|POFEf;qzByc(`f!NI^S*HI0iKbr^_Viwu zN7^3J$-5@Ab{CkKN&pPEgaUUE!PQLDJvfNqzz za)0+a5YG-gk6!_B zk#i0`boK9&g*Z%=AwVG`vUlFQ-aa&M15wN&!^Fye+Y7|nJG%Y^k zy=haO?87$R*|qr}0Zw3A@axu4-RjVMw;n(F&rsy-PrVLLH9ax-XId=l44I2zH|fJu zYT;~xl9dTccG!bl?CKJo#OwIEoowpw+4sX-Ldz{+IIYu-A;qZyD@x=jZ7@eqdRp+* zWu|p7=GPWt=RlrHea{oP{arI4stm?=H?tq`3Y?D1=)UpRHz*|}v%eF|kmR41p?iqNEETXjXF zm+`kPZkl`Va$7%yo=0zLJaTpvu&FJV#v6@``+a5AA^nIm_)ovJbUsH$7ltv>U|<-F z_ZBW2htQxG36I1DS2kvxYodK=cl$D?M+9x$R){@{oCC>ylBJN4%8Eda^m3B+W|lSv z#Vi`VxJrmiiQp%YH|3gDRs+dTMI)K8k!IPu zRrRg4vH>nF=d^-3l4cXXP3sn4AO4eEGkPgY`;AvgL-@NbAe96s%OH|?JBg3Vxw#XWaAX}_qcPLwzHv=0#63Gp6YkUMt}$tkVqMTrh_KOM$>kitb4YfIcalqYxY=>P2&jeV_8u z?G(z}xxIL(tRyGOB=aBwN#~MjEn{zb3Ou9k%1b?XSD2W?)qv%+UEp?(ptj?7izWBR z5Vv{{WY$dh?@{R6iKxj+U7F!#_FB2Zu~yxERxDhQRHV8B)Pj1FVzRFmwrh`)mXkL7 z!=Dc9^8JF>VU``oFT!_u#{9NYd(26#FkfQl%`J(Q<%mXPDh{Qw8^sO#IJp$*waW(Trcz_N_Rj}($YEn#2< zA7ZBkX3xW<&Dh~Iu8OkpuMb*MwPP8@WRjAkSTHyGyTvM8D`vIw-=U?ImxtFSC7feA zwn2~_!x&ti-}$L;1Xxmx{a5^wH!jqK-w|0#Z-1!NWqpOcvCV zdY#Q&oLL=7Q!E@cg=s)>Csd8Q?L);SW_iUfiyI8I{h&w(R>XT$aZI?$^iOd66>4k^ zBtblH^)-ADnRH8SY}S2RJw$E|5>zOW+FFu9Au&5|&02I?lSGEz*vb?=`cO(CDL-Kp zH2{Jj_KoI}Nl)k|!*Bo!le~8objBtSZ_)vfR4P#{ew7fRxSkH&dsMm=DG!=*0(StO zy{MzU!3nbQB$BO3=sMF9q6C{*?nc|uDKZZlQ3gFHq)i-U_C~@jsA)`orj*vq@3BI? z)MSGlY3f=h`wo!ykfX>kM+t949%|r?01ou>4$!bbAzF#)RM@G|?F1B$P$PZ2)0EH_ zDKG}yjwr1IBf>! zYCzk)j26Tm2tUH1Y0!~teZol|^$6L5n@HpztwM}^q!Lb$40Nbnu`RB>D6TJKihH+#tqqKFN)d((zb`uE|2rL^;{*ZR> zP=biJ8vv0Xok9zxf=0qWzLf|p85^YXH~FIC$SfKXeI%KUsFpnteA5Yp?X-6lIM+mJ z)s98FN8%IotGCfPGc+`%NJ~NmUl6!Ip-{u>BAqB|0@b#Z13*b8T{_ zH8!m#2YzXCuR^6Q*~Blk)6z-@eX|4yG9FhJg==kzec5^Q>;jdb_>OfdMK@k8&j~wN?Q>teuiS**MTNUB1qe6((qf-qdLJR!`7K;>$ION6>T1#l{i8#XlDq; z)R1!9C0shD(gNUYHElobS!XghLG;Tv3h>Jjb(F2Njl?A*tuN)5pz*_fhHbJH^KX`} zY+lk8rgZiGbxu<6*{)JY*Zvyf$Zf~%MZ%lXPJy|fVMPqB82%>P_CRkk)+U9y47}5+ z*tX(ef!>(>hg8r|$0ekYi+Gao^ref2Qs5tmBoYtI^rfs$T`|eH{{SF9C3T153i8>u zEUE;UI#11Nh8adYn+3}B&^b7DyDCZoNJ%@XJ02@M<;mGeCD8lstRy8Vb)}BFhaXxJ zz}FU`olXsv%#IJWK^Z1DMf1o(N}XFOlOZNPDhl}@p?gea=9I9vF4WG%kp?QLC}ojm z<*ylB%HB&@O^ZW9rC)hNZwF8MlC%+7-;eC-WAoZn%U=!gH!@4c%Za#W5i8Zua#-p|W03;I> z@NWri+l$rZ=WpLfE?zpNrK88;Pbce9M~_11In@wM(U7o9mzu*DgjwAMAQw`U7ScG_ z8Qz&3tLVX(#dGKdhGe`OEV!YBU^zMGNridnP*PLdQm6Ea*@wxdV4sI1TRBg_><>S* z8Dso60>&LsOKN7}wV}iR0J%_)f(2`rmCHyN!ilw~+0Qj(+%2XaYQ`smI6@TYC(X80azPu4ZYb{SM(kMQ6M1qD zTYCx1?O_;#t&QsnNkP;T#}GShT@ER`G^ktTjitcxP`o{iQ4spVN)`e2Ac5ENqcvm2 zdSNUl5f5Xjxl-6kLP0z74*PegbYX*3k+gYF6SiAPdHXnQaNr#{6ZunN(aZ9%HP>bB zg4`v5)y=!;b)|3=WKU{zEXT%AO%`q$aEC&ic_F9fBe<ipz_yjqT!mD(^kDLE`$gMpeA+-zg^pw&)YGxE4oq@x=sJtN zLP{H0J54%Lu~SZkQuA)OjS2z?kr6d52x-w|VIEm!D@saFT2GMKjejd2-4vyzt4Jrk zD-w1xb=yP_6bA82X-w=QCy`sY=ne>}b3RRD6Jf>NU5hw6ldx8U(13QHztWdHYo-(` zJ2g``cyDus+#9?r55{u^*;l2-p-!kM@}Q7X2W|KFipi75U8Ff?$t?%R-dDHovVwQ%1AVJJv9+o+L9*GwRcVgf2GZ6eV7F2UZPf#E+JDw$=|0;< zQv6*sMK7X1k7WA3Kg2!y8hr7jbToH%qJ7eJIpjS_0GTjyZpX;pIrOdeA}J zNR@3v@;BJX#U-LGjOMo*VNSUE7`Bt@m=sZ!glkT6@ddXF$+lXa5Jb-3ojMbs<1a?8 zW{k;kaCIqR9-*WHAjza}=3(S~n>sJljrB>@c-l<7HS|^Em z6P10I4W3=a?HfanVb1v^iCbVepZ@@fGCx|V_{r^n{DsmcI5n=KlC%&3=6I@j>!97W zWub)H1f>elM^QUe;>EU4@cSj51#N|cwDbB?IH6LNlM7oIGM2$tZK!7-p-oEk9=5a5 zFbN>-9Vuw9$THQLAnm080H|?Riu|63fq)4*K|d5Siepz)I&RrO0+eue6h)*iSSXMGzQV793{1BmYzggG!4SZ<4#327 zJJ5V=t41ZU{$PGZP7H~o!iWAtbhq2Uo`-n`3&4=@pT^kstSyk zp|aZtPznSe(x7~w*x$(;`e1Vv2;26|gI>XY{pu7c$~ zo=sYdWT)tGhCtYmlhfXbL6)M&No7Q+CRAf%R_PYfUF`KX&5;T!A4)&S5zB1^jVWzQ zJ>sQ5vea1RHpP1wK>YWplL-xu=}@OP z>6w<2U?plJw*sRAGMBUB(zetfcc>R9_IR`?fI%ycJ*pFv`vKxW=_&w$02;Y$Kjcxl z&ef+|c0hVty$uivrzP zd!h-lS(wtX!0#0p+)leBEaj{^?Y4_{%%~VCP*6}-{YOJpu;kaWHH`Rkhhna+Dz~>~ z$tenel22*tR>_W3tcSbyWxKjhooriMW=6;g9>PUMjrO!Rn<7`AW(-=^?7nd4muskM zQzwC1qvK?frt}U^A}dUfUj3e%O4c2^#O*gEBg)nSdIEN(&&QhUpwsmTTKC$!4a?*Y1LYFKr(sUxT$ z{#9v;_7eyky>3sgO2bl9aYj zXxxEKxTNXW>{#`*Y<>rgi|ZR)4#LAVUbE=|x3L{yZ5t&i5%E|WIv8aY9hbIB$}HN1 zk>TbjtB{y+cKCWO94Y?*+0{aRX$?E0Oj3OtG2!lEI7@$azp}<~>wS7fiz#Wa;%Ba~ zsQ6D`n#(^arfKov8o3uru^a~(#}SC(SY?34Qlz-*aVw(Qn@3G3Z9b`pk4--oRVQKP zcy~o`s>Us6nViEIe%o7Nn{+9*#2MK{>^OrpvTls9@*{OyBYqlYOyPH!lZU;D zClFx=$}Tl<-Lh7$k~9Y3cIK6i*x6-mbY3{#NW$?;<(zL6bvLan4NTo6q@H(Kga{p} zlY*eJWL3}~7x1Gk+Mr)%Rb65LN|X1m+9V|LvS(0%-j^7}C3pCfET7;Ut~`S^1X^a=)1t6-HZNv;UP6ZSN zPMx>-q|ST&9)rhT{=*8CFuZJg}hJLPn2u2ONQSVJr=#7WfLo<1v9Ia@hdrB7wMgQn`?(3c!7 zEdoKEjcJ9L=aMCvX?EicFsBr?D^ZQBOeOYaYA>SO%a6BkwpQAb6S0B&w97MQl8V`N zVfSSrwG_&FfN0=zCe@O5Z$v^CLQfrOqTW5&JmSB1eX#SXLiG*D%`RCSWE7*zMbnpY zHeF=^y`+)8+f80wtsLC2X_6OQw+SImDbXO1r^n|8Qs7WOKYij5S zzp^ig8)d0U2wIex+zp4;sia(7pG9k#FsCo=S8Zx3a{azPh}*ORgPDQV<%E(1fHDKI&4B#UgN5Y;P*)A#H$V%%X=a?Hsnj8*ya1 z`>qn}t0s3+i6oxGVOjD)H?$lwv^Kaew)dXf?>}r$rNjg39r)g{<;1ShqB(s5pT|OO zjk6Yaj-e{uPcmTp#}%EN? z5<&LqQREIc+hkuCyUSWshwmM{aQ@?xL7$3tIoj9>L)DaqXHANH)nV+}wE)J3(v$Tk zdP|44$48@9GmJ*sRQSFd@-OP-?Lux58l!qThAe}*eGvS z<+&OnpR#*_CASWMv8ZwY*jD@yzhsv5S(aAmAt_Fj2qFg`TG>=%oEv=xo3u#MfI_(& zpT+rA@~{?eJ)y1JX+uRIBT)uKM9|4-DQ2=J`cQ{t=_ja}C*HG857vWIlju>E9V#ga zn2F^707?kquVYi#QHD{u5S8--`G0+Bwdgk_`zE+$upuRFsDfk-Tkqe!E^&UCzwldm zal5;9q*}dmYzIDCihnRaoiSQfW@$Trk#=DBS1-2OFKz7c2|E{B6Ce8~4OuJwiz^GX z!Y)#js@427#@<@BpdW+1K~iMy#|6@qmY!zeKHCxWGz~t`4oUP#E$lQHT1rUfO$t&M z8?e>2s3idnOqiJ1(eOh#Aj3AQf=XwnS_j9XCZ9sa)TAU9_dP19eU^LVueVsDf{W~i zOJoV$^8<=pl`yT1)B!wB+xMs!B$m$tKp=qvV9hPKl_@4Dl@#n0XP=5LMaDm3thiFB z)U7<2t3mNWHeCnsol*V8M>`JRBn1tQ^%G319Hr0{cO)L8trfBa8F;Q`LPzWL zs&S&lIWmxu+zK@@a)!nH)g}oiR7`J1rDSSfV(E0M3PM0T(IzdaeGXE$Bmty|;%1NJ zWa9pei;IvYA%DuF$jji&QnSj5Ddr6fvND`m@{X<+U~kO|n+8dtFEL6Ur7BL_7>X`T zDAVoHysNiS17fk>Yoo!OhX?dCagZm{42eDJnxdRq>|~}v-9iU`wM2}lYPPy1B6?2M z2Q2RPgcQ&bsQ@ee>IAdINVf!RQ}pJbiA}S@+F-&!s8lNHpLqnRPT!nV803@EJq&*E zNDyiZz1i_+yqW1x9*jJIVhX5|{RY~5q+qLa-7{BTNRe;2p{m&_G679j7BR}zF`JDf zsQPseYN{6~*Z%;~i;Ru5f!OW6Tvo`EZm4GCM{-gp^QkD&93P<~!2lRYA2cONHQA4n z40=+b);d+w^imZJ#=yY-6(}bOeHjKp2`5Z@)Jn*p#n9Yrl!zP6HZh^Gg$_{GvZ*2x2VN>5 zZ9bWomO&{}gbsI_g84tORJKHt0={^tP`F4tgo1j-LJ9`e8i+`!L1Z@BlA>qdtwI=F zFhJL>3P|1t+f*SN#7s6|2q5l$Dy1qP7}6+w;^IPFDkN-DeW-c5B<>xBV=zMG{Ymq=);0kmIQsxAFKeEJb>{hnRo_Ykvy@>w+ zYGIgnahj}IKo8;0wBRIpjh*=Bf>w=qvb3m25Ahp8Dq|hHwIk93lcbM=Kb;3AHO?gF z%fxlvHXFIe7{3W1f*ghYXPPA6V%)KPY?V$wYKKMJ|PLe;RN*L@nFvRY8!3 zfJvTD*0e|ZhOMIxZwg85tZ)2L@WUHH3%53Ro20n%bfqV-Na^ePj(^2~vrZ54MFW|9C&Zp@Pg^i;+fs;;*Wj95yf+nT znlbr`UFfVXvIXuM+ky6+2pg$NIzqqVvNa{zG`Tsd62ov-ZLV4>ZAG;XW)c(pXeE+{ zV)0$=7gkxqF;uCWydw>HgrHBD+Rx?yi97MVWt83M>8uf5BYXTa$-ihTtTzn3!tg8; z4#I9$Lsxl%=lngF5BgHD7U};0(JHBqGrMRB&N0-D;mZC5=e)?bmyPF~HxbNCw2)iF zu)DiPfZ9{{w57!q^xd@VD?*1S{{Zl8vPJGGfiX`7JVC&*R-3oYP2qOV{{ZHPXROH5Y}&DTm-LkqyYg1bXQC9X2#@m-L6$I+{B%q* z%^ukKzXNif1%dtA!!zFIOB8w>YTTjyDC7ks?HvgcDG$X>b~Sl<9;AbI-Ui~gtzoAt zFy)Iu0U@BsI>hi&6jDdiYMyWGJU(m2bs1wPrj~mC+>18N$_>ZMC+!AdgiBJj&=i{xq7VTDW#^ zdCl8-4W#rcCMojCT^W~+71=k#Gg=B39Z)Gd6FYNMvI?Jz?j&mW7G5QeTd`#6b&#PX z9m>7xxmz?Z9Yzhw8xeqF9zzX z!U<4FD=8hoj((z*Cv0R>Wixq^Fbr-YOcbVFnQ86NgMVd*V`fH!x=ih~%`@XG(y%A- zbrdp<1GW)j(R&m&G!ET~+EolW?vQPt11pfdk2Mv-Dqt&sr02Dt{N5up;QzVa5 zX-d1AT%wl9H+hf}L{8j;%?gzkzJaRS(sZbF6UW6A(nx0nBxFQHeoh~kpW3NE81zX=!4WOm8LZ(+A7NIBHD}sOmF$pZ`nAZ%2ftb0gjYPZ4!msUYXn! z^{2{KTiETlRHYK4i9IMqNW1VXiGxrY7Y+l-5PwRDq0(L?ZL3c}DE>x6#XLb0 ztwW~uUnvg*rT_&+9@A6hzKDEZB~TSTIjiPIj1=MlfFSoBYPqtUQP4-3^y(j9YVIj) z>L+A-(UWU#$%!ntMpmAcPn(RSs$vf@tDyWvk ze1WKyNKAC9A?Mx4N#D0hx@0m8fG2VB(xo!gTRkiwKr=Ndm%*9&Naz3^DUpxZQG;EW zc_`*oD8|^D*-R2-jtm-vwl!N4Km;gqY7&^q#vp)4N`z|04mA=7s83CZq2evVw#I60 z3o0NGM>S~@El`J&M#O+4n5uF`^GAV!1MwN&tC}auk4t+@%z#7*im7D!0&>2Lf&fxw zLVGL1Z)UC-=#9m4cO%^fT#oW991+^N%k%fk+}gzW~USn1S}9HR0%yt zy;*J6#X>}lBYJ|TD|RlHl4fN@ezgG=NAy;Z7Dx(GM$t8CUql^1Z%I^YCuls= zX(g~+eb}%GfOLR6%?qJz{WH}mz7?eXCMaDIHZ-~N!b*ZietDq|Df=QA!=N|nk-7dA z8KNntvtBc`#+Kgx%?m|IM)u7O@naH0HrKo9*!9{ysdJt7G7^oZa98bpjd{&t2ntzA zNd+p~y>Yz9adrkdCpP^Y2hZ0?e-^|fp}A2ZJpr2Yc~X5IpTmEN2Wr7Cr84{RPYL31pSY_llfT>~v)}==FJJ>GLn1#RE_@tSie(kJgDR z6P6Ay?22Dyk`m*q#9QBFr0OIOk_3LWQjG~&H$*`y#qf)Q?iF>2so}ruWg>nB3YBbY zi)fKyUMpvuG1Rku$-lEZDK3If(nV>9nJ@Z`xjaPOHL~Ntvvx+!3i5IMJ=`YgT41?u zR*~GOjU$yN_76hdqb3MyFeFxOd=b8w1Dls(uZti?Q(Y zI5io?l6)aISs|tol5kOnVuiqj-IkQ&?hc_mnfC&+ye(<=b|IDz(Y4uQ5b;+BvchwI zJDZ%zt*x+>m0~V7>&pKCP#~K zPq>lYF03gt#QuV#Z|sm*;J=Uj3uT`cvjv6ww^+A`SyKN15K3jHZ16^|F3_pq`t$?P zm6Nqk^VqrNZBj*thN5)a1I=tq)lOL4~d*aHOnRflnga>5?VxjNY- z2VJ(d(uIP1B$7$@6z>{I%A{UgE46Is$AvhyKZsbgyhAkPjAsOOX>~8%gJ?+V0@OtQ zRq3$!u}M2QIsAynw9(LPwU#hf>~PE5yGK6mKnp@H{_w(ta+AK@XyxI?&UE~VrdjUg zTp0)v_D5Qx^qEFac46%`*@6#Fp8I zH~yc+lWFL(&;3cW&O32#yL2~gV<9OT$T8peQnLR5>J+qfJRkiN;_mFN zu~JIHpZs&>>Q<#mJCZ+zSf<$^VOFg+N>JXl0VmpyEqfOyW(r{sxTP&ZXhWDep?@{T_!CinE=KgHf&tnvTjqMAO*fc8$s_W5`LS~rxuM- zd)Y(cm`*En`mf)_t??y(B0wz$$3P@W`kLqYF>*uTs8@oQ{;D^EzIGcIhtPPDKIRK~cG&r0Uy%NV0a8$}10vD?2j_U`WkC0h`s{{SwZ z70$_#6^$|tWs2IZz!K}PxvCO(B9SJ&8sST_@XASg;b?Kz+ZzL?VnMCGGj=zcy)$9( zOLZkJN}^8jw0j?F>B1YZX7pJWw+L+tNGE6$Gg_c?^Fr7%;{FSTPb4RxJfDu$syr)T zyH2Qz-(oF=d2KFE!*B@r+OuV^MyxP>usD3Y@zSEB1Ok+wO<`=*+C--fX-X*6q?7y8 zw3=)tnxj0jr>ZU7yM!%jLeHpeBa=>xUd;I`sxQ0)1V{}+0#5{UQgr$OOu4XZ6-fyJ zz5B-%99bNbEIc<3LJ0&Y5J2Ot2$dxIC%Aor0ZzwqHt$l)Xqj2qqe>wv)3-fqL7fK} zw1EmifwuH6Yoh6(lPshV0aC|mT-x+pX4gZ|&{rc*2abPQ0@g?D^~8x$Aw!|6|DUuX8J?fe&QL!@F*d}}PK;p%GY){I9Av^RnI1_}ALqu#q-2PN?R5lT$ zdK=mTf_qh#d>iNbR3#Y(jC!ZqkKzf4U`YuJ;p9BnmfDG^)j z#M>nxY1~hFtK)hAA9HL;(v%qKOOz;}a@kaX0EzrO|8vqh#sEMd(8m+S%07UN; z4j({HA3`cj4MJmrD0nb9GZ2L+36$?URmueT? z8vsOre}zH{CPwMf2L_-Ll{ysNKtN25zG?v}Sh`z@Bqn{2^QZ{EzySmKiiAB#lOhkv zs75T1LbVm74`D=|0m=OeAy7ym1au@+a+{muAyGW+ zdQi1p3(B-`FYR-f8Y#XKg z>i!g|W0F*8Sz}g!mwCyACtH&->OxNE+=?i{`zz&%1jaL79e56;7KA{Z%{0fGJRG#j z;`Zv=>Cf4^Pfh;-omzA%Nq1vp;OWqp8dm!qNg&m^SeeQ-*izFAazSqC3UjbY3W{QJ zsuzzlUWqFf7c7ufb#Rq*Nl74lboxo0 z93K*fZQJu*bk75G9eIk5EMmvV}n@Ew{PEGr(7}WIznY4Poxrg=~TDa_~4aXnzKQ(?~FOG z!%SY&FlFpL%xej8MNK;Pr84?wbg2;#ed|ssD7&K%x;9nO~<)TEA(Q?+^z8#WoQ$!z4!`B>lKv~RcB-x5cKnC-qH;r>5&n)2=2 zpZvTs=IvLFx3=UoxKK{~fn6xh3aDORGd$HvRUNwUp63q4h8u|GCbK3K!+2!lCCI`fxYn_`MTiQA};VDN`&IOgno@NQm#nVzqB8Otmo_w`oUI=A-5AHPNXSd_nOV+;^hiQd-`AX8DpAh zpPXMEzRQ?~SjI6cdlcLuC{g{ONd$@gerv<|9xS6LT_0Eeot_zzoYAbfHU9vLz7buQ zvgPNPp+1$ON9Wj9Xv$DKU;Z}?_e6WdU$sYxS&h4VKQ`M~6d>|}3O_W-&n82k=6JEk z7L%ht4|5fUVY+A)2Apt>lz9DXK3pye^l$0#p%&&{HVA5E5#5mB6Cs#k*3gPA3 zFR?A}Y z>5N+4cCEO{3zW$dzqqfV%f*%$B{SvOyxcxsM;NX$UYWVR8se3Q|ckJ*!RD&Ns#RQef7z+8%T?{obCE5K;;Djflt@gaQNiXv+Ja9-O8xAn^F76w zLyXah=kiq2{sX*xX88qODdbhFdtT7t0GX1o~?ZJXY-;2a&Zza~aHcZKc4% ze)5nBoe5sv;%2reBMwPRv{4zaKH$hwnZ%cOVD#)-D{FtL+Nw?~v6%46Ud?9DS)U_1 zmlKQLXLJQjTw7bR@B_IeK>n20qg|8XmD<^?_@mw*-8vD4c&Kfbb_m3+6Kb!jl$}1@ z(jF+W%PWWS*ZURzJCQN$U8Osh@r+j=wsUOm>D2DUzdBb^k00`DRqg|VVz(+q zws^pubCQ)lP(k7js5OdS3VY;l#^lwg+ALhL;l+?ORX@*$r=)c0lh3POZ_CG-oP}Z z{t~T>j+Gf-C)p;nXrxSPR{KWPR8(Y_NG{VQQc6;o-i<-Ml_}Wm41_97Bz*q>8oo8y zCQ3xCl!R$B2emG8OQPbf(ADQOhawaX(s-eaeT|H06yu;uN`Mp7r7g*@fzBBlZ|~cB z64KZ;WU4?L10+>RKSPodlB9qn@BFE5{g!8^@Qu^HXUNuqh@YuaX+^p6fl*udOakb_>V!VpKs+1HdyqsslMSw0wk;di{2&Ey=Y^bP=Qi z0!K}cG)ip(d>c^QDKL4B>T_g12~p)_`$sfOArFcsK}t{at5a;LN`zF{5g@Ofl`*+( zB1ZnuW~gC_Z;(o+p$yW11dw2V3WOC1NYZvms7LmCKmd`~twC~{Xw4&V4&tD(!UTXM zrlAL|Au*)3r4B~@J5eh3L*x4*AQ|>MRCVZvDM*lcM@j2ckQ0%ST0kn)Qhlm0VA+SC z*HKXSHGG)SFtAc~AoYV$$+8Hz@PZN!qwPXK9sTG)T){}>&ou*t(nVRBaYTmPAw zh#TqcRE^6b`ZH~-LWKpk9Wf-4$JT;Tu;Y>q?jkPWHaDVMNF;*^NdS-csG;^VB(+dm zB3PbJLek>Z=Yj_0^r)0YD9QGS9rjJTDJyL&aDn^8O)HUK*^t%cTlBa>S#&BrKndEJ z8R%9|4nfNtv5GcZT5YciU=a!YTlT7ytYk3PqUy@oDeOh0ruSQAP-SQUf$dZdTxt3* z952EPdxn`y*pHq_grI2=+ErBYM2o|9W4uGbjMHwF8+)6lteZ$uSYRb0Kbz3qhf{9j zu1|1Wk~yhpb}WrOz}@_leTe3ZR-FF;v`eW`O3AoNQWeI?6Z6usxc*mGYsV-w{T5~S zh0DHm7Z2gLR;eOVp=vG*Vm}HJNJ@YH6IwY*_NZ zvX#8Vpba2zu{AEe4F2Xz(0>l_4=QE5Mx0Hh#g)3o%5A__{{H}oxV=kR-e{u;Exj^- zb0$ix{1mgqTSfX)iQ6#Z!)Z$KB%w~8;bbF7_Yy}*rp7V8#Y@bt%Q$_UvYn-;->)ul z{6_CV*Jog+meifcopW%xRC|yQV@2@6Z3vH(Da(Bo_H{>zc~a%J@a#34yg3caRt#aR z-mA8f;!csbuoW}roO)w%_?|XR{{ZBv@qGE3nQ0&5o*d-0-)JdPF-$!UxY+*yDo}+1 zGt-Jxf2hv(lMnv@#`xZ)FZO1zXTKG^SiLW)88^UO2Mc5=R@UpwDSi9JZ|hi6v?U{c zob;^`^V;1YrTs6)lv=rew2E^o_-o=vj5wn&=3Fkr5^3i_MjeJ=NNuMM{-7F2NJ#fI zGs`Tmbzk7;T(O19sORce@}0$kP+uCz|TwjUzm=f7FZX3&LJqvh1(jyKy^-ALaLoH#8!0U8GkT ztHVosyMn7cJgsxERDTY=D?UYT(X$q4*4YbpDdIRqy4<_8327w40RyK~NpPc9IYvya zE|Gk3Cq=#;Y~#cT3Q^h3IxQldZs z5$fuGE1N$P?H=#J{-&n1ayRWa;Z??8YwvbUINM=lENI$K@Tr0ki>ep>bIFs1qMPt` z+Um;ji>s$)K>A1Z6pud|lsKew{{W+TElZw9qi+spb(>>13P~Tm+i2Rn{%;Omx;}y8 ze^7UDdN#Yl&lT*j%re^0yxZ$h8x?K;05y{iImSwn+Rf%hc;E*Cw-tyKJP`sSl+gCB=Y9`9H7L zwBW##(cu38s(J4%+c#SYu)AW>q_pZCR*)4|j-_1hqb@{s8W=a}Svbg8dQGhXwq4DFS|oI+6` z5}isXNS@Wt&x-mVj&y6rJBk!Iu(x*v@FFR2kD&SNr}H*#e$|&ic}pXLu0=7bWNzM# zaLpbuV%U1#X~)~UV94^{Z7(E`g@Xg)h2>~9zXW_kb-RpTC9!Lpn?Nf~)>Xusx^VS}bB6xv} z?o`mlaLu&8Zm{!ir68``gNGnb$W8`h5=}88D4PPd-!;~Vw ziv(Z&%I{IPbxNIpAOp`@WuoNxZI%8dVRNm*+EkQ*Aw7r3=UMZ9fsR|!1Gk1g6kJnk zG9!Kf_Z{m!haM^ZiFOf(xJop%;T(~){&g&pTm2XAP{Nn{B2cnU@;ZBSPKQDpm!oU4 zo)@wd5KKou(wLQz&6@{+VVXR(5h~kB9X6|rr?D;`%TmI{ApmG8j)$cm$bfL&5>{;z zH2Pz;E>zyZaiHb12~6p1f_fgcO)oQ=1(bB!N#m>QoegKw67q zHM(@htvCu!ARq+ zG&#-K(LkmrPd!aRW(TPvckNJ#(?Xho+=%!!27HIbNisI~j%pY3Bkf0lv8V*4Vxb5I z3EX>8wV+U-LZp!&J?IE4TS@j+0iI{pPY2$T z(Ha<(Za3Uj7NpVV1eFo6`k_muL z=4uvrR-+t_pEU}z0<|Z7Lam_V8|Y_sbD=6BK}VCn6+tXy4;jRg(pEJmj`d{t{{UqP zoAU}#hskh&CzH7}9DiV}Z`q|@DQ4ueZ*WVg?gaGrsTowQl_gG&FMX$cR7I0F=tc5% z1RvgzeXEz{WNo%H4`%{=anE-crOnLVp=D+Yhida#=W;q&{91O6FvKx84Z_m3gFn1~ zj8=I%+BL=i<=>%c^d)NBNrS})CNbkxpp~WbV5BL~2mlEkedyyQ(*jYblT10}Eop@X zFMWxQ+f2jXg{ zH2Muej_vYwjkBp%A%`WB0N3h?8*ko}9C6FKCl*;xCf>Gz<%B0`5l5OjN;mL%e%y=$Wj8-BeCX~(&KE46mH9_4e-+<+q9Ewd5PS-3?Ed2d(tJ5F18cH z7Fw82S-@JiVF@cMNPwjYBzBWk^T?@3k3_o;!7!LDqYh@}Dg)F+6a3!l$=~JzX)ujy%VNL_6ari`1>d2<|eY7MF0QdPcYBBo`Ql-#B^TY2CS-ENaXB@;c1||V<3|iZe!wNs; z)N~blkVvcieXz0lnbxY8*c%$Ov%^_^%UlapxM+lh6r`y8>4JL_VzXq)DEcp)oT;4k z@i!9|x9%?L{{So62b5a3v9h;P7PXW9U`mvcT)fXC{F$LeC2d(lw}s%ASFT@X4A+BV zO*BfEY+pk*=_i1=1!_GYl!~l#e#J}3lhRaP8Cx{}0D%i9F1%pFvYngFB~4*iU{fhA zjseg=4@ouC@pB}*GyGQVLfLHEc#_N5(hbjxSbH|c5R@TTHwggqsHr-Bm9i32?UyeW zReV4AHsizWQwzgv*tl!NRpSgiPJqK{X)8bF^=@mc*bBx?pIc)_;e_2? zxZ7!hN|Z*_KOz+$9k)bd9eWGKt=8hM9bJgqZM6~1Qk!qHPCRm56&_>Fd0PUtT5OqO z*a4*_YZ{$C!N3Uk=emv*fDBQ=GuCXjJ>%g0QKE*_=IQrvP{{X5tu3l+3{t?*m zaHROHmG%>i;n|_bEIiAb*4l)+w1`0N031)fXT_B^bUcq8t&v>g;f@WArDR#D!mv_S zw3FqhxF470O`KG^9pibE#nH--wKv%Z5X|@jI>+qEeQ@`*_ix7K@pm76Dy(zDd~ zUVqIF5;#G9k}H;A$*@|)57Nc$0ZIcMRHK*1P& z_FcqQ&{fu`olp!%vHa`Xcvzfqqvv1xllq*pW#bj2q#1i3v1#?9(O$GjBbYwoYi|Ue zj}4a`rP*j$^C?ut&|>Y&6r*&)AlH3yhyjrh32}u8d7u4}&(G``Kkh;cuB2C(6n8r_Qq8L0)ahHSlfmY7~3T`ddq__{$ao2-a zA0|ofW{A#^L_?^2i$W7vlz1xKZixqR!1MYMQVrjT<}!7`Z4(! zG0odm{xn#426OP|G&qBud<)9MU~ ze-?Z%VHdWG#Vl}jsHi_|>TYaqC;dq(Y=iVQtwwR_*p5-|_D<8DGM;T{+2_2tiyP83 z{{V<#=#N)*H9x@96#X+cS2;T)*x!UNT-%&$Ct}u_j|u`uluoAomDC?&6dx74OgLtm zRMnNU7=9;jbf#~u-b0h6Nm5}zQY93&X^hh(jNt4#5=$ydj1mCY^qQ!(R5~t$n08sw za@k4(lQ3Yw`qlB0+Aeu{XudM82&NXvOJt$}llf_Iv=nA8_ubj zH3g5`BTx$1{^_U`RlSZjRFb5goJ~Q?S{pA?WN)N!M_NRkvZUUq6LRLQzYS4fr_(B!Z$0 zjyS3Y(2|u2Ael3`s%eKACFp3S1cFH?upECH4t|+UHtb1DD+K_8IW!WLhYfZ#E7?=D za}^T32gwQQMxdo1r0qrVzp#0ur|WqsNQfpY)}CMG8YyZgoxR0Da(3*)(hR6b`KVH_ zXNgiz;XQhafjKUau|NU`r+tjgKtz<1osSg=WRnC)nuHY_h?wbDWE~_DLDN_02P8W| zowUJ@^GcS1Ni!mtf(IOJKw64DBT;3X+ayMk&ZWQr2hCzylrR@DrQ8!^_NB!ll#(9euP z*V{(%>NQ0)m!Nz1s)ZALV8kVr|`ADYjVtEbr$Yi#`a{il3RxW9K0 z{{ZEvwh7cirZ?@yaeS{Pw2jzt^4yWh{MVROd2--d^{5#Je-QfD0#aVhsy>ld-?`?Q zNr9+!-YIR^_^L#GcP})hE6i|!H{Pm+X2#y)I<~}I)}gO%4DC^sjuQU>QDESAfl5ZF zbSIfA{#4k>7bwwrWw+Z2Le#d#+a7?`O$P`2E&B`GCEB50Ww$@Pclrv$K1pcn;dIA0 zHa6ITk`!A&14xL7tiL>#j)Y`qhhk>29hUoX`uD9~COIw9j#$;3SCp;>B9>KoX=!@t5<^4FZ5wvv*KZ8s z`VjH5_`;dOt!@7RX@gp!#R1B7l^=g<*Q*ySa(iTfs|K89lxuGevLn=xgtDiVJNx#c ziuxD9qDreAEgyEby12vIX#NC|y1r7FpRGwoH9)>g`~=&=tl3AJ8^ai7BUFZ^N8V1t zkko9r@7YCX`)jOL-TP}{XK#fjRJ6#}=X6f zrhkdx^fJYOM0`44dXn~YvtEvv^|VUV3D z6EHfOxW-=5GI=pit7J19@WHE#wYm4!*4lPSDIbfx{{Sk_mLHL?5A_Z!Xn+~WT{1Mdgq@5SkDBv7TXB3^J^ujypZ=Tj;d4>5uV3`_@Z!e7#AX|dL_2!o zf>>IUvU~1pul+7a==u0wJQVbPlYBIK;j3F#3Kq&#kfi8YDW9L#y?2X}HKXKT)o?{C zHje~owzN33t);BVRLCRw)}Ow%uVEh3PQvZI)HYONphr9pWH_{Rw(VY&_WQ|Ksyk0AMfUq88qz)&l`z!W&B(e zlIx3f6ZjNF`~$b^S|K&r%;No)mJf29r6D${ExZJJlMW~2p{EMV7^Q5qu!o-o1?4Sk zNPtR0N%~fUB-(34o%NMAm4JsJ?I|)SWw znrG|Q?vkut%`V~?R->ubiAB|l`f84wKs|fXCjFGL+p@8H7h@R>{qpwV{7Iz4c%7f@ zub3bHk-7b0tPrk~-#2ef_oH+~e7Yjx$fv?ccVZz!9NbTpgKM5URO%sD< zN>#c40Nm0q6Z{&)?{LeU%i-29Wt=kkI;P#tNypy#BTG_B z?uym>r=E}&qO;5%C#?M_U3wzP$p>%@DfiuN=G0TX$R}e$#={$C-eep#<%@LPGD?;B zln)-&vlckM#b<6Vk~Zfp;As1^YEpe9g?57-Yi=m0w?KTare0ZI{{R}xjtB4zPWuQ^ z9;7h1L#gbfZjwGht+30*HU>u-e$zpGEnv(_l6utP_C3u$j4nJfwsaee8s)poa|9-RL*#NPbC1wYe?tpQ zr*~%X^X$k3pYCZ~C3|4GHd~o%2!ys&)|u*ejj5?uMO_#EUBiG=YA6JV=W zxA4Xil!XTNnuRB5nA)Tj1rTHy8*xyMJFt^uaFuBw@l@Rk$lZ@p+LC8bKmM;YwUXTe zDupElA^{|rieoM=wq~`+^uRn4Xk3~PU@PH{)~Kt1F0YbFn8osa~hLtp~4W9lBfjmccp>w$##rf zf^>=g`_vr?aa1I`Wf~ zQ_=(+@H&;e4kE4{41!+4kARR=2v8rbN%Rz;t})3F{u)wW#{azwPcD4gGq zp)K4?fm6XJid^2x%WYYs-YaJDY{k)2;G_af9%}woMx1t)9CrIfc#^O&2Ge>&02v`b zZwHFvd6}PRIATw1;Mb11v3J+^iA&&#Dg`I6$gT|2?T)8(jV8pg4>9LUi|hVkO=WBB z-4q0R@t;{MNfQ7lL=WdtAi*~`XgKwk|l?|tIM{k<6i%gSYS6bXU zTyQ5$fyVtPW!8d<-7?C+?(S03HQYF{+J7o^EX^*V@u@0o zxUhR0_lqUlmR5ozWXJqgKaDqL)i)GNov?H-%+%78!HD|P6k2~}T)Sg+zk6)4rHyJz zb^vTXzs|CG807Yfk9r+p_qp#8eB0Tn#+ZY$Qf4}ItjWy|P?2@zjDeZ%9Yfb1Vv2x` zw?6*joU>2c31fHpBKN?uren8TZM4GNQWLkIZyG^8{{Wpf854HHnp!U$xsvgxN{#K3 ze4rpHvJwZ-(7dw0#hK>lo>^qv8HI)2yN$4vD4*Hfv;jS%PZV&Bf7Zvwa%)AamKefV zcp}Bz$8zxC5|gLvBWl$M#XrQ)lae+U2efJQBI8~2Zh{1-NhzP6wX+mina)eH$-}UF z7%sSkH0SRv#RV;0rAK-Airo=1mGsFSwhe>Zr8f}D5x7Z82B&zRQQoWLk7AmzZYrw~ zRH200z0RL8dcXewnzsb|B8?SpGk{#?guaHGMZLNNy5pxyEeQ7!KGl;h2PJ(PaOU9l zX?KeGLdww#w974FjkrRC_@(m-Qb7Lz{dNfepY^ZiI#(uGF~iZ+@$&O!HrLtXD&RR; z-1Xw#KXHa-ySKuUkeyff>V)ZH-6Qa%@>MV=egGSA__3~XdNFxEZRGg;c-{N-fL6Hv zApRkO;n_O?7zSBsfBXz8&^Qvx2<2)9Ty*~c_=+2E6!@$DD5+ynTxTu)o892}tZ?d0iGAt@a|Mg2lLPpgO=wo_g<0ssX5o9MaXB zrrP1qT!I342i^xtCno)s91GD9%sGw3u3I_D*Mr4U{!G_<>pWL6 zV$WUT{&(CtN(m&XKEt4_yltJxN-$hw*$Kz7Tcl1Kfnd+2$kLG7e*pgg*!B3Jl4#k7 z7y6{axF!y?;m>1Ww(yr|X%hNA$vw^h1Abm<{L zsB^gB)4!+Ee0`i>>)Ee6}eZI9F!uoKB0!VNt&}Izwtx;5tZfWX^CeGn$04q|UNfQMk zw3*y>Vwj#RmTkcoK@SlLSuj2iYJw)eBUJ{a2WM*O)}1)*Kp=;t%3Nl6rp%Otjq^@F?`k=Resoh+zxQIXzD`X3+-v z$RFBaZgf4$3E^MPv*yOyv`A!XRW6NvN7_3w%>1Jq)9 zn#GUGoMp2|_K}mg%ZUj4hEee|5qBK>F!+Ua;jfCId9P(WM&T`e{y7$|6Xm`+^qs&w zR@vlPRdjRbJsJp>P!5u{PfL0yYRO%<-5^okKnh~4@vw;I(Ft2!LL7` z!=5)%U+zD|&562i^7<`Isgw#FWIobB0!ZXX%^^qG+2e>nVf813uNG z9Wy-hC(*HZ6_OByBLqa>`dFibH7pe!WM zVi|DGbtltlRSgcv|){H0Xmk8iw$wx#!+XOY=%E-kqxcGrS^yV z9pwBfMQw}!0COvfPeX^YDqPilmTs4Jk?JfHq4xe$)O(7ONwR$PrhSL8a7s~#TL*OP zr6>To_n?%1hem0WdkhlE(%+KdN#+V*gF*g7XtA)YJMO`x8AzW`Z>>osdMP4(Y}jc5 zAQ}EOKu%vlw%pJFL6Ubnz^GJY$Bo^f5Ou*k$f1&L7OB0kn@iM?bsoG@dKNrswXblL zj=K&I)}LjlHY}@2k5>JNsMv2Edo%m7DH}MYPV~7FEiG6%>sd;QR6m^naguBt;|l~Q zb$+|h>)7SS`YRp#BKm?LU^Qx3Si9%jn5KgI?h^k4J zAnH>jkWSqyhzfLRk|*3nFP&(DmhCA-5H-%`MH9N4!MUN~n%43O4FwB&%0ICX@pl zg`|xs=ct&9f?Qf1rPu-te9*WQE9NS92yj=AA7X6dy?9H;*17i=&7kPq5)xH}6Y!!ki$T zA};OuUZ_+E;BooWvEz&WLb+~*h1!&og{#xVnb>^M$-!wLJcTEyj@Y;aB~iEo)vA{A z{R58_quV5Q7>1Wn+EATBB$E+KZNA5+PRnC2y5p%zi+hqe5>!4Zuwq(m=)N+lN)(b@ zIziq@AEhrQMOrjr!zAsOt{HU0cEQ93mIlI3+;90-cdeWFNywO4VojE}MYuc?q9#3! z95ScggWL)BUc)flP0;n-&Af>GCI|FC6;sJe@f!@6=)Ev&EVE=1;rp`Fw8?@`5<2yy zX3F?ndp2Wl*JZJWW?U}Wv?mT@&maVuI}u#z%2DhIOM50L$8RwNCsWQefHz8gG4-O1 zn-k49L8dXLZ5sjGlod|Wtx>L5gKxth5`Rnsb1 z+*Oul8X8MwZIa7k3W|yK2)6bMY_6jMtC9{ttf2aMnL$hf<{} zw4MnGI}jv|`t+q`@^VY29DH0*+g5DXhB!ZnR#-iy#y5`r?+|~~Tk_I8vC&Eq8jn8J zqXhDMVrM8e+BV-UzluF(t9yrwnh)(92Z{aNxjxm>jGFzyi{Y+|W^L`Rl+Tu(CrN^%8=qlU>=;R>Y;A;P%pVW7H#e``;ulVO zpejfa*Zt{ng$<#%b{_(+%`k#bZ(uAw z(aXm!9n?{12ujwyg1v{eQK8Nx;dzq}u(oQ+#aUWfTecMDq9mR^lziz3P;aA6e$ant zY(E0a_`V;4J`LNcaUs=kz>mZSQ%KF_sK$=Z^ndBkCPaQ+{8q~Cc#)s+EYo~0pSyA6 z{{WF%$pD!6>0Au6i+rSgi^T9{jtVHgzR$UjI(SW)F#CKK=J?^x6o(ov6$Z!ol9FO; zBs`R|Tt<05E#u=heun%o@v9JH0kOTrS7UJNtf492cT#y=PXn!bFB8bt&yxArCGx!+ zsggWQvBfZJVR+kicWFLa&Fivm=#t@hb*QV}lgpc0eW9}n|){wfzGWFr^FFr3u8b{NFhg5$6k zXtx&xD1Pp)6gqFcK}ox^iqDuE*{z&Fv2H9g#fo*_S;mockN*G>uIH%&mo;xjgxg$^ zrVsdyj^vC%c#VRP;?he`+gzhlcL*oc(~0VnKbfw3&f_X($l{daWh>)GR>SiiR=V*| z!r--KbgRq8FvTlX#$SJ!Qg-vN zWx|&mP~0de83c18vD=P~lZ0B?wf-G_uNo#iO4;6O6ep_zULmv$heJe(U0If|<(y04ZRXa_ycqh21UuHPT4* zI<${6-CYV^Ndu{^62iZhH$pPwoS}IgulYxc&zS9-cGwq>o*Y@@wr@h1#_;CRE~Y;b z(=EH)kU=!HnsNSXM!Zp!<57H)`_umbzt`%Aw!R8voXu*yQ^P!Z*5w6S)oMnU5I@RV zR^#clWzT~iM{z^^d1U@FfA=wOBjZ>Ki+9#a2~5h9zh0nqte@E>=+nin$yONJf>786 zO5Ox-@$FB?4N%{aS46hSw;(MmNm_ZHKe0rUY)s|!Te)H67MV)F^2q7OwJLCSW^+i` zY_(${E+{OM5CGVF)|9CcI{b@U4#JCrX3mqbBuvxc7A?)PPTpTBQ*X7YmlML0NGbTO z5r^0n_DY$-cenLLkq@Q(B?XYor2t%}FHaf((4sa7B&HwvtDd04KjRrwK1**oxT%X;M;t zO)0jEGCon3Tz#A!Pk3h-IX}f|;18K?fRAmDipo38+JVS#e;P+(g7ztBu*^$B1+) z29giB=9y@Nl&F$bF~EtUXk-|=RRr%o-RMGXHAu)T0zp(K@~GVd7=4%*gaAr?w~49A z0MOONgrulJAkQ>1rdpFjL3E->3X*!y@TJ**BQj0d8xn)odekDw$L+o(9c2A@rzoaW z>9OFrOb|@`ZTZkk8(J3eD$uH51|eg9{VJNS#W>KXoK^F~-F+wol|+7YGLSC)10A?QI~_x?=}PRS83Nu~R8)|lk=8m>6fd!= zEq>f5EE{u(Cqjn3!0Xnb3fC~=r3hIHF&l5a zE>ij_ru2<(&Up5a_)EG(Opde*U`rEP?V3m8esvbCT@N-O5KgI@43b?g#$#TY$iK8F ziRxQ7K{o+AFO&F>&2YT0DW^uLw{(s_c$=Elc;&z)a6*oy5>GYFpOELTM)en68bh0} zORqeHxu!vZHIiXQ2%@o7l(@91K?iSn+r11T+tA5fXojxfrAjgsnVBXh;$4kdD?{MH;=pdV6TA9}|u6MJJ`Hz%^>!ZO*m@{f?UojQi`y!EC< zaa3xIAi6BPBMu=toI;kAz(|1{(T-AtdMsA2aNISNp|+N#z$DJ(`wAS9Ov{pR_7k?w zHu_5}rMq%Ool61_=j}lVaP1k~;~k-+n2oFMgsSpM{nV0wUX`jjQ$epOmUdG{6KdGF zafdFzPRWuJ%#YTcjTJnzkziY6uHLOS*4E56(IO-j5x(G(XueooUc_*sfT~c!KrT2v!2Ca2(-iCSIrC|~7H%JkDJ%3O;^>xNMkZ+$RycAr`DPYivIohhPWS`PPhh+jfC@QqeV5FK2`| z_gp1SKYVso*-WLs{Ri`=YC1v}$tTI^izh2x<{Os@y}Dbj9Zo#0)P9FyQdnay(XDxL zghu$*34&#Y%NTXLIEFO@`HS2&w^RDka>6iQiV8VpnyvmN4Vtoj)z%cZu5T_J#BKtX zz>caSNNzA(pM!VN2ANy0W#Xo~rHA1#F9L=*=vA6LMpJUdJF@2gOlG5xcafITSldCNc zCfuJ|*D|fYK}HlasJ)Fb8#ftKEjs3#6eM|(umE)1y$h0EnsLcJM22Dta}c;HwFeKt zS&~8rs^rH7RE(K@BTgu!s$GE9ZD^ux{KnO)R<)HtKCg0MtG?TS(gs zqlsef-9K*a(YQmJR?8k^4mT0*TK05a+FE0gC32 zyR~lP?xFlG&_FJ4>FqrT{!}X8Lvg-eqPWi2csQ`OK)N=d{{Z7!&fLh~iZ94|n|%Us zeDiUNHD`h1Z&|sR7&@?wLBk$mhYTsi?k9jujpB!$b}J?}-&9aOEM&GkR<*~mjFWEm z3E~bOtvJqJc|bT7{{Z4Nb_z-8U<#Q$XiZNec`#d7E5f6{c;HR%`s0E9XB zI(R>cF8eBCWi}Tn(|?9sC(W_M2O3^zm^(<+Aw#`hFE=7-8FP3^zG-aS{G@z7@mAIL zvH~o!ZgFuca`z@;ZfnD_HFZ^!ia)bal5~hr>|(tPGxO2T$q6U<73Lw~!Z4g^%RCm+ z{{SjxcFeB|x;kA-hgKZeIG=5m9V<3Wbt^$XCCya!NwBXFF?&>hhGvT;Vkt+VMbzkZ zxcBR~Lss&{b~~$wM1`C?0mjmAa95G%87gmur2hcxGzr1<5_4z}{iW5Tfh7(W_enZ< z0;6$VBK|pjmL5!L^*GX$nUV~Vu&CO4p;<8-d6Y1<9V$Rt(sb?b9qRmb{{T?9N%U+U z4TBFUwP^&#;ww%#i+L-ud1Zlxqy-?E<~TIc-0cR~zz}#uD1BS{SHxy`&RyO;ajQ%8rBV(;5L8MUR&qF?>fRph& z)Ur7vG~4S^kKuzgPes^D-GUb>1fD*%6S5KuWJZYICyKFo6(U7$$p9#lM?6eW>gZYw z+uP~@tss1Msl^h7mu8(Sk?9|$UlnBEpdIENA!-3cp1@G6OgfkiR&mG*0L=q+>}bK( z3WzbJo@08JpJWnSI(11=p7aheqT=Xg^GPWn> zjGG$PlpUmrqz)uj?COOQttM&fT0-(5%M6W%tEWrR0 z0Wr8dRVpN-^usMQfFzQyjiQMOlKVY%Ac9g9qp%zCP^ttvHc%j*l>$*>MJ6T`ka#gl znqmBC7jVccQiOna*b0gPBsB7%b012M471>ZJv+eWfubIkbm|)()7GI4H(*=`vll6e(CHa9Qnm<^~N{VK~+qXTjk0K#Bx(xr?^NeOxCNtqEfLgcB@nl2QQ z2s77lR-FTAblxCRKu{6iwI4F9YybbzIN z8V5h3y9B)PCLB;tSnEI^8va1{E`m@>G?B>%y+M&mv!Y~ zJoKTIsJTy%K*upH$pjwLL-GRh$&8nYuVn`}?M2N2@;|Y&n4^$Y=I%Y}xuTrd-~30J zUakknYL6$;f0wfpiAhnAW_LT)b1$Fh!C0UWkW!wb-ls6WMhV0*a)#D*1J|uwXLgws z+hs?YalM`)ex5)FdR%tsd}DjFRrB^?EHv`Vz$knF06H1Vi=Z4IE3=wjHfNMu+TN{K z1gNC%ABcc`{i~gpZ973h@%@}s@wY#_h+o_`Zb51cqzRArt{0J+N>+`2GFN7ZX8c`u z3w1@w077?(KNXg!-#pWP&2G$VTaG%V07w!@JW}RXH7?ms;>aayc60-`&fRK4R2!8m zAva8euR=*6aWfwL)`yy2*oP@UW-Piby-p=F$tHQC#-}IPr;1YTlI%YpLnuO0+(xaW z@BHaGu(+^gfyLS;_M&E{yx#o+<$!rjPD%}47DWX`H(G?-3_lGuCjIB+fYX|WNk_UPm zkX5uslhq61*+$8c=N45720`C`pYckIibcl-X$NiD#jY+}x3srg2!J%8ep~#|xXJX5 zGQ}jn{+l0@{62oswy_+2_VC+P0JvBxb!TG)%pE-NFq1+x5^sO;zI*2P3yKiLgFJRX=qv>t7-f>FZMD7XWf6BE(8swLu0o5gL!h zHw-xKig_h^4A|hM)wUiDICX3W<8%K2Jkt`nXll(!v>&p!!!2wql2TBR7O@?Fvs)fF z6|oY?`C9_Nb9s0BGVr&y)(JyO<~Ry8iAkn9Sru!t6`0+7Q-Mye$P+0hJkMk8LpQTt zIjSq%cKtS%cBS{w%K!j`$OBRADGoZZ_~ze5PnfexZBi9(=}ov-mXbMi{{Ts)w?_O} zud`Vj#It5>$MH*WlWm2vi1U}RaYvAy{pm2w+uA#e95KO4J&}9+3*1*8Ll(BT$1Y** zB|dl(yQ{Sc(%L$ZCQlR+a&rA02sDzF?1^Ie9qZgv15Oi#G~OQ8wZ7uq^B%Za9;r~; zcoWBJ8A8qYysj~FlO%Tj9IoFsEpJ;{t=3Z8XhxCcvJ7xK#QjL3ihT=yT5-^G0r0C3 z!*LwTVRFAV)%O+|OLCdoM#dm*#Z=(#nI+~$tM*Q^Uxw~m=)S})l=4HwID#N81Z^X* zHF)qPx-ofPeyM2KOdrF`OUo7FI4|BUt`brmw^4xSV;mj2^`}b`XA>ux>P4xSGI4g@ z2)b>j5L6^Bu`wM$=B;5?WXqbgi)RAx>dw`~IcaQwf+wAUnfg=Vje18bCy>*k^UL@a zgtmg(QbxzqAl96C{?2Y}&dWy+!_#Ehc_T@I6I~2xRh-{tr?lk zzQ|?XC3$anm(rqJN~L4C?@WwrWG=pn$2Huc7w&|w$_q$!1ReqHNs_RwC$b#wEpdI8 zvD*h!7OQfX(X{Ck1pRiSgc&kaI`&mLpE5U!<Yt#GSBt5h+59{KpijOu`{yi-)Z-_2Q4ynsKnWUFF1$wmXi7x)^-L6->wEVom-%66|v=EBrdw6uWgf&nrE(zAPYH<1MLAejhm^N%`;Aoe3mdl3f?xRLj=aUPIRELeUUP3`YG$5|Vl|WL=w2lklaq z%Sjr#2_l%1Mi@(G#9&xtA*7Uoe@b*?MM~c2oLboEIyCGLN+3xsz8|Op0f^e62kXLu zoBSjb8_fQ72uCmQ{{SvPNE`FskktgO5%o6f4$CGd_j(#if(|Xd$85J^v8v@SvhVrY zGAG?NQjC3|>3Sa{2zKECRxjJ#nb`$eS3mli2|_-Gb8n$E+T1d-mzZ^xkMjtsN{~)z zb{MomNDu^#;L_4-vY{PWC1DzpWN95t(;^hHs<6u;u#lKc_cduTE;K$$60shb90{um z3)t1`eO&=j>)N2u70r>{gzwe`FXJE;>ryrYuKROB;6Ovn5KIFTG1OHw*JKB}g9_$; zC|PL{oA%V1;l8z-F7|1I7+R%DR>_b~-Dx9IB{t2dHrSF?*P3)CVr1+jkP|wT5+~*> zL|%pP`x1FUTMg4YcQsB_5>z)tg@ZoAhA(A?gNI1S0MxToc?y zUoWzjPqDj^_>ZJ}^{cdKj2r0OMs5KB1t~l8UXb%rO{zglYm%88l4F`Ez3fX>*#7|U zNR5awOy-Crx7yxRM42LKa(2Q|i|?_kkEUh4MLzr0Bm~_$LuI_KHwr(cP*IC&(A92< z2T`5oqIb~9!|Y4%DOai^+A8R`OJYj9RQ?@E=4v!o$i9!2dPb9@PtMgu`D@YgZw~sB z2&>R8N$!l3e2@UrLHVjG)9*s5y=)|?l2tq(PJ&hioU^)zDOZT zCMSB0(8)jgfzG}+(x3r7Pc#yq^je%~6LES$Fta~9)QtYZwb&No_B9e!97pzQN=kr~ z(^P`xz0lz%#``?#zpp?o`q5T9`H!ftK z)*7}<^%F+)fJ8;()AX?O1mhTk7|)o_RSHJlI)3GCgBQDDME(?PvPdY zs6pvS2|-XTOqC5W1fNdvSCJ_DDW)bEbSVdA_84gJc1WCnG}f%#RNFy;Ftc9?zsAe5!YKv_GGVAZI< zL9B?fa6E%^bb{sCZqmR(arGETGt;^Ft6n@`V9PQ{nzL<$VCT!gm_nT%TPUVTaH#l9%!eVD{LCCvpNppL02%96}N{nn|vDGR>|YdKZw??ts@eJyJMCx*KZuu=bGx&PNI1~ zS{@R68_h(U;kYw4DNDBik~aW}Bifse32a=l-p5x9d1=@X2p|AB6xOsK#~(vmY#mn) zl&93Q`^S&=p-}q+B$`_6b#rLkrqQV^H`X_CT~$%R3yiC5FKc8ln>Q~CfBEjB8U%mi zN##-Bx7L}$kU1yG=mTMvRf*yap~NW-k`$#L!>uYft?YZ8R4D~>E+rR;!z@x;vS0?m z@7(=qxisl|6NxY6#cup0HXVUBqL5ojFeJg^nO0_$-({VG;9&?#11d;6$^Q7KV}mkJCW+;x zqgLP~r6*5rmC=f&M=E(8j?}a%rx2G22X1JA`5)O6#2a(Va7Lrh?@drIf+9GIoL#z< zpG)X4NbOeQyACi#Tbx5zm~Df}SVhoE(byO}N4-;zq(-_c93J84laC_d4kaelXo#hfarq%EJsaO_6k6vA$i+(v$sczcx}2Zvz`VL1-@#-<9n2&{NPAEL7w&2!#oott<608`NW8fr=R*b~V(ceGvkS1-SZTof&W(zO6b5lrDiC!3Nszb07fX_BZ| z?;O)0gctS?VWlmkCwZPZrWHi77Dz4)T7l-FVY_>AFp;q4ski8XZz&;?QY6PTw>RvB zUlO(pLgXD=nV^>Y3!5R&TLhIK(rGRXYBNQcSPCWtlQaRw7qc+KX#rc4(8m-rx(+a= zDsEp&0!!|xx%?_Rg;Zw4Xm@JsM2#)!S6_MyV0>sk!>A<5B|OB*2B@DJA0_tCAe8_r z<0>M89yfLZwla4cnm>>(E70|&g{OU$(kgt2u}3Y|p}G@HL&>#DGWu>f`jR zq0N#ePzeemNZWHWO^TsOj#iSAG^7OgrXt4AAb@#}lh&!EK_nPbPVw5Tfp&r3Qm%SY z##-4A2!%nSQbkdMxF>_uj?_hso!BX0gZxD*Z)6c{m8@|;r~J^U*$1U4DUJKd=}mNq z&^6$qR0ifcnp1l!kRIj9UVxDR4tL&_IlCDcC)u>N_rU=GC)3G|;=NZZ=2(vyq$+W=7LZwi}W%#ik(6ux#>eHp)Pl$1>QP+I{4-~QSe1^e@DN2Uf``gq*1WG zHX>h9CRSsfc&aOd`!F{u0VysHHj_|_3{YLGfZ`Rl(;L(+LHiMM_%3%yPhbT?xUaFV z-vYG>-?w2>(SL}7?$#6|%K|!ds1?Wm0H_x2;7J;l1ok{tpj=mW4|@C%Qj$TAMM@9k zLl;g4Uw`z;_ zGm5Js_gI34vbQ5>6;hHwalhh6?r}m00mzTxLGlfFbOC=Bl@X~a_wP~UKrDY_1>6t%Uv)s1;UQhReAUWL_6y3Tq^R^-B_>HKBYt|+a|=h~y$aq?v!@N5=X z#ag;kN(s{%b|-(x)hND(FCtG=U)TffzVZ~7{KZ732VZ!iO7u2zu8XS-e$N46HyDXw z+tsIAc6zr1nO{*oz3WUdIx$No!${4y*uBaS`haLhmeXTOP&)zq>gn`anthgTUdzwp zZZxof5_gq!?@h-I4Ebpn<_CviId!D8pDoL?9-{|I?=uOUdy)QQ+KLNc$q3!z zLh9y9lC?+zBh%aX)lS<2n%N<5%fjrPBmr`y%A|v&cJ}6)v9z`fXKsjVIC8JA+vNdg zQinc~xunK6Yxxpe4_mg?&M0m~k_pf!V3DwjYsULR8uo#0SSfg$&PZOcpn4uU&^GLD zDQjdm{5Q+E^8yk;R24)Bo#uqlsQGw81CNy?0D!HC2c9b4KcaGEPUkPBD{UxgDp~wW zGq?NFWdhT-FlQ*CcV*?YmmDG!Bk+%5L1vibX;6G+pwUCEp{*%Sl9HW(_!R>AK^TTr za_onkbho8NWhpRr8%gFm#X<1Q9m_dE1UYwbnOcmlK#hkL5IOv<79y~c`3)%$&d>qk zn<&_&?{(VBBan%@j<Uki z$>xGmr587t-{OypTNlNxfSe^HYys>dnHOQgP4+UmbxKLnz52=Kh`o@EMZ_gal%)Xd zuXKOEj%d-8xVGniexfz z*(Z;djmd2m7#bJiMpeTN--o!`gBbn@Os2x;g#bTv@}!>CyX3WK!r;@<634Qm898ab z!rVqN;kGC>wHx_U&fmJU@$XnCir3b0FATn|yaH%lT&XYqur}t=0R@FWn|U_NvW=OY(2Bl)utJ zZ*Ub`q=hxk~+mLr5%t>xBRsNl9Y~ir1L}xw|r7yEhc}B5@n=67itio zM2;wBA(4mJvsY>hB&d*g=b9goH5354Kt;dwNNlb_3H5%Q(Z)b&PanpR0_fw<1joiCQI<-eg2B16;k+~3~=_9!_P^SbWyS@k@ z6H>xSeFNRSStQQiF;KtoF>>Hal%k~w>C&mXDetk8?o%3)O!Sgy9IU4VhE81=Q6_io z6(uCVoa|uj)RlVon1j}q03Pb;DF<4N#CNDlBNumJDN$0DCu2~iM6a(UB!W-PCViUm z#V&|mBZ>K9HEJh)jFCwB81$@)Tw=te`pO4h^*OSo53nW9HRTnbFp(3nf+>GBf})7^ z#$*7iL!?22zURO2sq&f>Q53}UU_f;#xKJaxk26N?PLHyXbX5Ol$fx1gVrkZ{RPnaa-^{90PY;|O@E1eGcmx_zgubF=1c z+5&OqDrYdfLe9eK_TpBxY6SaFYR4)4nla%^qJzY-l|15<($bX}-?^nZ*!2WQUBr}> zlA=4r@$D1?7#+*>sY(+CBk~n!&zdQ%f=$8mh;V{}H-cdQ0KGP&M>bMkfzIml2}(9d z*eYO;dN&yHu;k*GE7^z}YeGpxN_$VwN(o98pd*^Lhpn^<(>l_iC!f-lL)V!q3|hVA z!h#6|Y6q=EY{!wczQYZ?vXrEyGa!#~+A8!ok=We1r6Db&pypy|xn7W|Ly0@W?`{b~ zKuQnc+pQYEU>25MdBdc>q7}e{RzmvA*X*?0a_SO6kU6NH%4t5!{{SZ9_gI7W));-e z*H;Tz3De0w!kndL#V(n(I96b`$}OVRhZ()c;CYTDf-O(^LEx|7fkZQxpyh@(-XcZC z%cWX~GQG(onLX%JZ_zDLeB{>KxOIY-!dXb2WN@BoxT9}qOs%R#?QNSZ@atym@YAWl zohozz`hHcV$s}BG%3sJehvVhNg{fsqP?IKS>q%0vu*R1~kA-5Zcq2)Hr-Ra+3l)}W z6Gn3*c3`!s1;PQD=jOC&2)i9y<}&h^bf;J3Bn?t`CU_M&qDu-(W2ELK+^Hce2to9Y zuqczVqppcEag|}{lHfPW5&-`I?N9Tf9r6yayO%E9Q?5E&w@j(UllVu^dVtDyhd732 zO45+g2)6@ED4u(%R1RpU#`YS^&NXdp_BDK^LQm|$G70wYO~9#Goa=Olc!pv`p}UoW z;fGw_Or3x=bI2AvUqZ>o&6XK)b`uV~qRSKhQTUboszOa{Hw$z+!EsA>9C1EiE_r0_ z@l^@6*fYn_Lkzo1_f0KCASuv+H5A>E3%_LA7Wz~S>+i?S7s!T2bSnND+O6AC8q{1e zqI!L3B-;XpM+ZXm5Q1l@f_p}%DN}W$d%?k*d|Cx2XE_9CY`X>HpqS_jCrV1nk8HapW#I2hQ=)soL3dGu)y!} z3+GanB_&$8k+n zqadj1RLA!>sr$-X7N-Un*VB>POD z`D#|AlU(Fa>?@$NPspU-qb4|*m9e#m6j!fHqMl` z2~Y!adr(gaQI(7u!w{b=sW90Tm5C;6C)g8Tb9uJ_DrGT()hOSy~e< ztAGyQ8&e|}+7r)vHg6?f08+xwn%bfy?hR;DVqPV7i>}dOqyB>sLFal1>DV;FhT%GO z88Bm-XC-z@VOv{?4X6X}?Mt3kgM!#qPbWbNI({aDAvbzadR16+IYPqmv?b$B2zmRopw$OR4QIZ!WVMB0*CP5za@l3I9ERSNCvo`BW z6bjU(Y3Gk~Q93RqaW(;!0KXmKS(5(wCIt7_2?9YBy^6>%MDZZtv5AP_*? zr`D)}X3&7#6>8&}bXfuKv=F6$0*COWOR@~s0!mV&sU-6?MaGfix>Bz$2~Aw{mY_^*ks_`I_SF!GPs&LRQ6oi*@l#)WEZ9}w7Yh!bG zrGEGa+MdSJ_9yqZ0g^(GGqq5^$oW@`oty)Hr<#qGaxqoZ%2cp=dr)&_ZT2-?%4U4U z9)fE56;-jiuU4Isp*#)hIiZo7_9Cm)!3D!KL5j9y-9 z234>TAk{F{^hIxOyg#&9SI`AYN!idLFg;uoNOE>l!dKXqYf=Kjoq`WzRPv-Y7+F^44DK09l84Av z@IJMkd63luT64#Vi($9Qo%2AHkue*4^GlzQsJDsLnhWBOiVm$e4Sn%DZ=+WOPelqnA)y{EYoi5K=X(hP%fQvdhH(Op9Z7+kk^teY(dOH zV@st-P?J0H+iH4*BoD_4e-Tt)t#Rv8RUqs+`Kdn@E!m!UBD)Ep;FiMmsKRHF>iSk} zk&5a60P<&WL*`zU9YBFGBupAytI;Boc885D5`qr=eP~XO2HLhrEZt~0mCk|$$>enY zwFmP^l3QG|(LnrX*m6xo%9?N3a^D(AaRC4TH=oid<0oR287{)HhxMgF#m@&ysg_Z8 z_1rF-lQRKsi~GTy*3rMy^h zNKXY{?OL(NdIKhArA3ac;?;^$&9cLKqgySj zgpP_M>$m$+Cq+r76vHmx#O@SS=`rhZWd0G?dc1OPu$zyfPP}OjG`1OWP2o%`6+0J| z{eOirObao>jm9^MG@WHFlOzrjk=lYim)fGizQjOTZ&*$pXq{?~98|(Z6y;qL79>I~ zUBofmX4c&+S#|eDqC`S}zu`cgx-GhFBbqVr?k>AqH6OWKg40k2;2wUaXmY?Wp(~t?1RHUg01V=MQ+kKJZ zeudyT*a1t9K55a%ANK{SJWDBUIweMW?KEyFb`r?P&0Q3rkl~r*np=wcBJv%NE$&R| z4<#p|DcXr+LHz75YFknB7P3g}cpnsT#*i;7TSUge=8_PUsCVaj)drF|`C{JDDYLw6 zAS5UQ9qF-1sKcUwO4#jaq5~(SG zNT?4hWn+uxMq3JLZjURW>YA!Sa78tlGdQ(cke4+TZU|I@DobdoX<8zeS=Edp)pxhI zt+Q;9ONB>)91nU_61{+@Cg~c><424yVtEDotTp9Z;lJV<(vZX$1YEp>zZWF^oixutr_6uc8Wc$(*51iWzeJp014l2^~#%VjcRjrS{Y*X z*VdK!feHt5qq1lgw$1)Oi$>g{>9w}++VX_^ELv8pILyB zw0mz=+7l`7L<{^qMZ~xJREd%C?OErH(+BMn3mXRuEvR{f@E~tWrR>$uRLgfKy0s-N zI;8ql>D>NRZmO)#;QKZMEUU^>Ml{ae)gqU&D=wQHK&2X7R-_&WV??qd$De)xBx}{y ziAgdA>@flY6Rj!){&bnm-FhH-S1Hh~{X>C6$q^A-=a#n8Nr*duXoFbT3AY#KgqIJ+ zRiL2XOf9H5%84gm8}y{gy#_>aW$E<=M0KpW9R~>PhPif0Q5)~n@kw%Tvs7SYi=Mom zW@@ZuGbCTE9VKIKgw-}mbQiV6$O$2E4{EyxNqY#U`Da)pEd23M7X%!$d2S^t3Il%p z8ijBqHrLQ}Y5@CjR-G3}B&=O13YCZ(9sQ`|Kd>Z~=&$jtRm+QucF`mi>f3sAlJo;s zNURs;v>aK02EuruqQoyBR22Dz35~@B-iVkL#}?aqgc&=YYDJ#DCZkuf5+)E*goF|mF~rj&(GQ(c&BKW*AqhwyC%rCqTy`!L6AJtz zic4%akLVyDNMyMtK#}e3R~dq!>}IDt#1}OruXFK6Uj{G^lX96V(jXBuJkSTNtxi1p ziisdVHEG!ac&RP6p(0d3_^C9gi34#3hON|~qLNbseoY|`Nm&kk?JDwRF)_s&oi2l- z#y3SE00}(zuS$5~X75&*8nzMEp$Bc^TPOt{vDTpnKjKh8O84t0iiO3~vozve0*`KX zrhJTN%>InO!~uvQLLix=QbBS;g6JLf9(&ZZ3~75jRm=mWN!2@5NvbW)P@3*kM#`R? z)$&Xqlk_O7fJ6lVdixr#NG@>_HwRY)LEsu5dtm&CYHm~rQ6v%XwFI5J22-&UcnrxO z18SfsZo9Y#)D^Wt#;UuG5vFdaoVZLAe39$0^Hx2Ae78*0i`_OLt&5Y5$mh%QbK_w zPSlA_vs6<0A{W={LY9I`l^gFv$&E=e35wpRA#!898bqgLP%1pbilr)eIT7w@Gm!X8 z(M#j_@nA2@AoS;o&hl?zztKeIT6#mb*r}=HC#M&~Xb|6rz|u zt^WXxX2_(1mR0E*m!AAWb;MjLPX+1)B=H{DSN&-@@2TB=sQiZE43)HO&A;YO=OarlsxFVGK zEfJf=LKP_hs1gM>6?Vb8>;ku);Zw-~^UW4Ur7lRrC%Z-|e{`g&!~6|0Ipnm1S(+SM z-2@p*Kplr#9Fml~MLdnW4BNa^P~b9VM3@9e{MJBQwn;5+2$G;wt^?)Mewz#yb{f{uYhf zkVxuCt0(s;m*E%X$C_!q+*~I}oyqM*3%WvQnO&PR{{VB^_+Nr62DK=2I$X95)4@=1 z=E(m5#0dTJ2$RU%R=G_@Q$~47xB39!nZe7Kn{iL5DE|PNQV;btooyQ7nN=GZk!~Et zE>KkLTY?m&bO3V{QSArK7vsJovtY==aGQl8fg0S~QjZbwPI5$o&~pXN&OWArQ6PvQ zY!6;3Ohjf+$j^eJ$9$!i(4~%l5a(?{{Ve6g)|utGTX7KDkqw3rkAnm zKlK=4+1Bd%<)+&!b@i`800gQ}`A1q@c}e|+Z6eLQ&8GpfIdawJ-o+jDUpmnQHyim$ zJwW8gC*q$K#ZazJU6uw{y%<%KS%Vt|OI(XPb(k*@KNNI8C+kIzCmpajw(32S%p(=V zGX@|R=c&@8sY)Yc$8*2}n5S%Hu(jD|*kY|e{{ZDUQ=vAm3?RW zQOX{LMm45PEnF9PO{&86J8q(dMlDF6s7x6;f*4gm-;_Yj7oEz^~DNv6p>B1Kg>=cnqj%6)2D90(qvVp{k1?!>kVP1kHGEB(y13go>0w#tkk)6fzDrT@( zl==^s>q*!H(v zQlZR|wLql=%LSKpB@#+hdXChKrY2T}P0C=UYnkiRQS>BIJaVQD^%taVLr<@JlX#pdFNRruTBpn`6)4cppH=ww*L-E%m zS%i}We!c59PP8&Dw?%&K!h@;-P(6)fQ)Z~a(662Nc!(fV!ghwQ-H$nGLVpO4lS-Qz z7V5&*PmLm0P$y~Tt`9{{y^OF8kv73K6xsLhjjNY6@yK86pAgM+Ho|Mz%?Q>RY#M zLBI?w)S!#8Xq0doELBejdEq)c`6a|n;jiYf>LGoq-P=ziDPXanpr)6?u01Dk! z`gh#SepC@wQIktUO+2#ftxJ(6cBVy9OXwGfy{!x{QetOvDD)a_bOOY$OU)&s5;xd< zQsouc*wfh>At_ODX&@3JOz-VW4l<&Cr&IwT1I>Eg2a@>E*uMx*`L;V6wGJ|M|N^j<1NDnF%H;tfQ|-f{|nJRY-EQ7WVMI8EwPGPMyLRN_?&rt%2|V2+}z zi!H&SX78YxP*2TA7E_B|nG4XPA;3=+RLZl{btD}`h=Uu|B9jtT(I1I@c$zK@E-&b8 zZuF`Yphq0k;#!a1gco_TK-8G`sNzbG*x7evKnf|^PV^+w{f!*Df}j-xihzt43!3Gui zo+w)mFrY2gB9e5K!RiNERFwv`(HOhLR!aQ0ibrF>p-d}Y(HXnN5Ei{k^?s8Snct$+ zTPyr)6-rRzLj8P*?Mmc_DKe4F7{E`Ozc7+yZgw9&)SQp#JbQM{Z_Rm!N*yY30WxGv zK&;Yc=wVFNY}=e$WluuMFnRsm_~}_?H)B7xk92D0ZO&}CUMpEldbxr5(q#RyIdLSp zD>aid<~DA;@TY)+t_a$NG?fw)hqGSuCMuhiDX{8PNSIggKS~(J$1Ko^N8`p# zfSM&56Q3t8x+(l>(FHDpsX|~*@k2H29D7A!h+8a42-O?_IUh7prdCGlL^l52-ANks zqm>^1)g>gfWR!KZMqF$mMMXrUgS8Z2q-JZ-$iCPh6@;cGAS?LO)(JhA!TS|ya)6)} z2XKGpmZ03IoI;kD1U43@iVyz0dy_?xD7xcs{EUlT5^EPyR@7-)cl8~kZR)b&rOB!* zE7h`E#*~BrbqJl0^sK9^0}SNWhrVJ#SExx6L7(m_jj_s-q=t_vNh+5Hp7XHwsNdMU z*|kU#_9~I-M3oR^&mZ3vX&DnPteJA&NXpLmm5#F7uGZq1!EKxyJm}@(Kgy5QRjbEw zP2RzrC8{eYGo9ukh`oDrcB`kJTAgu3pHhrW@9t@t;H0@Q)LL6DOqqFki(cAVvZpmE zK}u41N@)j1=l=j+!|PH`x*G}0*(k!X zCRU())hKRy!8AOXa#4Mo7lmE7fMs^ECsvg_qD8n@9$_1wa0lyMJZ(lcbKX0ZAXZ&V zIE~xbt|saK01dVU*Vom3hW$yb@QZD+nWV3Wux-{p?mL)SyKzWEK}s1NAk!weEx>N(-DHCbNgn&rL2PT+`7A7Ol;1Zh1O%l< z54SYwJ9-v5%XjGWFBpBzD0MmnnFU=cLDLtJKSOJW!%jJ=MG6Y*5i}@{EOTjz0D{Wg zgsoeX(A6!0zhlJWnpNegN(6NW@|r$Oq0@M}boyP>{$NJcYH!$aieP)}!0Sax3r7*R zS~n<{D6eE66wE71R=+g~BcUUTU&xaMD3F_s)>wH(Z)+rU6n{GDBAZ@;BR)H7v-@2q zOo=f}U0MQhZD`5Q6jlErlh?g)sKvfr&1ia2ue~8>Vr*=L?@Rc2Rv_O zg(*wDNC3$?x_>%y&kta@)`OU5j#hV??am<4N`!-|NI#u2GEYcSPuW>`rQ)irY~8$N z@Ztf54QG=S)TFx`Nh?j+pk5&O+REFyx_0>u1cC`G*bZi9mp>*k?9VHgMwMr8v=$|N z-O3xfb*o|_v84%Tm7n{Wrf7~g*F^6M z)r(yVo1gyxRL9^Q1pfe9AMPa03mjwFd0@CZep^kXYa~pQ1CA!2@_*DhW<;o3y4piv zt!XJc58+Yqky6Wk$#NTUSy`l^OA1B7M-w|uHDFz$uHR$)u-oijHs_e7fMn_58V+@& z7D}UZ{5ogvtRb+*IP2mb3MW@b1Qz7YEpns4mej5j5; z@UppEDlP`nlgB|6rkZvXB$s7{W0zaC2>}Gijp%=6Nv}bl@Ia>4kd2`2PK&ezohvJR zdnpG3;kg||bfKHrr8fF2Q<4>I;+;!k37?8s<)KEh=u3)}E_Ug)Dr&kk2COi|q4JVc zvpYcMfVjG3($d@wDcK`#w5h$0(F-2nK4Y_FN-fg%YP7YzQPBz&%Ax^ceTaIvNEefv`R4u)kob$Lt4nwb@vmB#r4) zVI&g{E6dVk9%*rx*yxcAeZmWcO9$VG_NC>j(AY)xRu@kwEnAe0K+JJm_H0sKjIAz& zDP_n|J5PF+{>vJv#eMI~DoTminW63WQ_?25b+VV`goP+~?ONf5`!h~#kp_!kbE}Yf zqLe5Pk)EdDHV%TIu962d1EDePwd%CK7NMvDBi@+=Cna8i&Xu8+JLN7(+hh6D6n=nJ z=rMo*F*^mQ=?YpvBc}AorVP+s=GN9Pb^(DK%8^;z!(%MFmKZ!$u?Ms{s zOpe>AId_hM%lFaX!ku&#Wr$4(8mZ_a_;rTAScxc z*vB;^9oPyjI}9oHr_Wl6K;a8_u)~f7VhV%q!E-Lx5l0-?Q$x{hZ z(Bl(Y5Yh^lDh4EVH9;i(2r|pAw3Dt=J4pOSsiFgkQ%w++YgYP?5@~XS^jvE847z*n z_N_Kop<1MZe~kl+_BJhg0pDCLO1DF0B)RDNFw%@UK zkSzskSaHQ`NZ>&g8ers_uf&{{sQw~J<9=(`Nzvxg5GykrM-joLIarsGvAc^XJpi8c zG%X-2zhtt9YC?=&)> z(Q6;rIowG>QWXRAtn;ye*YP3(h*(zeV}0m3F|o!9xWz~WkrBz}YI0+vih&mxl*=0s_5s^JM=5Df1Xo>D^=D$%RC*E1n$ zbp^mc)IB7CXQ$^`r8a5C{ThFq^Bb=Riqw*K3Q#9#?OEl0j)Jyp7G=a%${3M#4y-?VS1et*a_rUg>LDD%7Dn1J*lHC0zpyO=z$2 zJB?{|N&pEECviow^N$rxmHsA_tt%-BQiHrDCn`>6g9I+ISv2H)f( zG+bBXwncnS@gdCNj+NUt_Z$k@p=*a)0|;W>J0wT>h}@p0YpAhBbc%{`R{fC-1P}z$+w>3F+D^pO-E6jj_awr^3un4!i#V5Y2g+RLVwJAto|Z>{i*zUY9M2W z6@O;SWxU3_a^6kK?>BLaxPqJOpsg*ki1h-l0!JjBsN;rFLYy*kx6v_Qh!}nuYP`3W zZj*m(q=eq$5eEHW%nr>1!b#pF^rOjbwt%ANT#h&r{4|ARM1#1q)KG+D#bX^#TcT{w^F@H=^Ry{qb1NM62wZw z$!Mr8CsJhd?LylQO3KR=#mdW#scs(N9mOfVmBAJECyEpjQmIffs615{6+{~Q6m%`b z`gDYq13Y|FW0kIkIb2G!9L)DtY_Cg-)(I&`PkE(F$dI|>eu`%q@h1M*tc9!)NF<(< z+O8RsR>Zt*_EuP@jMuHD%{MDM9rY2EOJ zI}ep_@iR}yiY&Zy?FVkV=In8Y&~Q7p(tz(ql>#T=*7fAyY-+;>sTyVDZSFO1i9cu- zwAn_s)RIbF1Z;i5thw?h(EL6tzr@!&U-3L{{?5kPCHLGRvSy% zGiis}+A9pDxj|IZDie!aXNo6SM%YukoeFD`KOLD`vr9%{G*_q7vbaz}gS>p`M3EHmsE! zMwW#6Ercu{yLGF_Yh|d|R^2XJVArjrxBmc;FG)-e(mQ{>Z^z_%VzT0Ip~ejQR`Y9H z3rW;HLymd)rsS_idBRBEe+KN4a^^)&*c#(3gr&e51L-kB(+#p8f0s}epxQK<-jz1}j|Kk#f+e+;kOI1$Gz2hR zqV3c*ZkhI^&#{=_p+`~zKu93<+JreeRtj-yE&@_XnW%{uYRMI#3QVkmpNfuNikoR@ zk+EvGEKA98P}+(LPrl>nPRAPtIXAGnP#?5psFMO?v7_S4{BFRnvV}p?PTTDiwyjuW zWhkXY5hsCJCD||0633ED&LEPZ8=3~J(-zVjVt6Yp5ft=}Vw{W`+3?)S=6YapQ z&1#XFa^E&?qsD1_2`w1(eG=Jkk}`wMGdF zpJM5```ysB*9ss4JA4XYu3Ix?zHXU95J!};xG*Ma21_rSeHWf;!gP~5x|!=spJZr( zVw#1!K-Kzv8CJ!mBsTx0A3j$Jve0Z<_NQhsS>oPCbJ#1h4~-d|GE(gu)wd(;8; z2Y&q)?IFgsIAc^#H8t#_FN)$JP1~);oLN_>CO4WXH9^C%ox6%!OO7Q;B+94vO=WUT z=zZvOdh>U1hLn)XLS|3mH34eI_vvj8wuXRE(kFUkrkFescg+MzQ9sVTD`%3nAh)Ez z_~)-`qJ$J?OsONC%+w&+YbuFU@7JY54OZrmsp2MQ-k}Ty!a`D!tz>Kpk2MHno1i&` z5O&_742{rG-(kM~)d+aIqzMFp8}HVk2IBL5l_H@G6??HEN>Q4DMh%ELeq|$9dG@Mq zgIH)}yYOUcBYLiACCjfv2XP%K&{PEk@*tgqU&LU>qo2;35AB`VO=3VQh|+^uUeU>Xi=WF!Q+#NetH zke(!WrOIOn)!r_Y%95ZY@X)ZXTpt1(QD`QHV*x0H?F^pXo7FDPd z5xI&)azuD%+e8xarG65n1ElR7pL(e)=mwhXh+kTjEb2@WHu>U~T-=-dNR92P z%H2kVK<93>$V#>|8r{f(;#g`?sa}w0rEQ0r>7uerWCs1DGNbD%pY-ki)HsuyyD&=~ zk)^B&k+>U<(N2V8%A5ZHkv#-$9STW}B|;Y#c_j1goh4(y>NydUQ7& zTPC*GEw;)ERi!(~oq_hHX5}}1ndb>zp04!@*r~-KLr|VSIzvqZ#f&ZOuQ7|;d^*D2 z>$|s=<+Ow+a-w@ytTAnNYsTqzPJBYgaNMJok>Q?Qb+_MAlJ+-x+N52-(UhL8qkob~ zrnqHZg*mqD*6j#=(x)Xvz}k3@o7LlQxo2? zOUG(y-J+CI=-I#V+f1p35Z;y_2$@QcKJ-$`pebL0lnvD4&qO2wN%pL@B=%a9o28=P%o&(wOm714 zufvtSbCzr!Qw%J^P4nmf0439^OQm$7xv=7tAEb>z~g zn{=7C$CFB%4CUPHG_b;4FhKPcY-6PgY4m8cY$i#}4&yg=xP6)&xVm+~+E9ZkQ9s6= z3vP;(t8CqDy_s#WcbdsKOX+#`e{G6fg>1Km;jlscDVX;)yA)h?V*YMLpq$3uSi#@S z7okeNePydKc}()ZfzZ~8ClzgxK5vOuH<{ISa9(xg6))7OJMMe`06OI4ZAf#Ez%AYW(0bs>ku;>~kdxt9fb&aBP*V~#Afr4&MT9S=VA7fe;KJ;IdUl{UE}anpJ<*P)6Le#WX}ShU`YW7qhZL1M$X0@P1CXiWlQh1G1pSqEDzyNuVM!oN zkK`*dX}tzlxRvQLqdGu{B=H?;r=%1X%3C$!O(jM#sKH*}j7sjN+M*dRigPX-S&@6wm>tJpHfJ0D=UTZjo7 z6rv9BC^AV$YqC6R*>+`i9c|ZEvG!GMg!FrWCaWD4owp>?7+$ zpDv4>5-%Jb`*gO^g(=9}ZnWiwQtVt7!Cxdl*vGz3EUHVvG3`H><$>8PqKUb# z`VCy#rM5v(RPFVs2gxt7yB4KR5J^&cR1XvUjIkSZqTOX6Y8y>ce`c9qq7bWeDa}PH zDm#k8-`S~kVt1HJX=tlTO6O=bMWnh&g5ox1prBF#29-3&Mitm4*3+U!`^5l2(8`O# zQX+Tvsb0ZwM3&afr3o6&j=Sww#JI&LqD5fRl!u#1P%4GNI}$1Jid`9`orTzGL6Tch zfUPHfI{yGVwwZ2_HuBuIw_{2Z&``Z}GZU~4!%7^;+Ig(ff^2eRcM)M9d07feh6dxk zEyQ$XXe{bW*+S`+jhnbawRJOETh$?NvIy23T(?@!q^!rtq)G{)$mX>i~UfUXAdM3>Px$S&9@ zwnOPtq#-2iHjaXx)eCQQHLzJq)UXyECV1eU)Tup|;r^mQWu*-|r_?~#Cw@=QT9A7w z%g}Qe#1!fqHtE!bBx+arX^jhvzQ|jOOAkDm3vnnb0yY$;sf|lkk8m3lwQ%+OCL2}_M zaUg;TPWy^vVMNI7Xp)xQ3@!5^kVu2K*W#EaEqenC#Gr(-Q`=W_-hs-4Oo-o;b%_?- zSyL?uB=uLtB5k*!&{lz%#wOeC{{V+F;#&lbM0ED5oAd*U?F}yw<)x}Fbu2cd83v1k zqFs@}bmh{Ob#Ow^kU~U7Cdkl5gssNPmK1xFH!)ilsii+c|TkVMGU+p(`v!Jb!xF;&6TBV>`kzx&m!e_?!oV|CnW zl^$Yh_#)mkgnY>)k`GD;Lfc-3&M12Mf+B>WrH0NF@1yC`jME3!7x&^aXzxFl76k z`J}nBaA2o#w$&g!N{QeDG`E!p7%Ku^;wn;#yxj>N`_i1)?~IJ!;%Nm?Q*)krCB>**D69w&e+V6-hRTjwRN1ch)^$_vLR?CKGc);*jp!#n zBk|^aNUpJ5)|U%`YeuNpg>6Z8`ZO((E6iap$@63p20Qyuaci_nBA57@3RXPUhVV&^ zhkA~Fkx%x>ZXo+kDCu>lBVcA|;GeNiBzj$tTtP}vPPHRRI|KX2y&t12vShx;rKS>nW^bSm}N~A?D+mcd9n4i{{D9|{_o$aVPiifML9sdBm=td$LiLoJQSp|Dc z37WGnkr_UU(-UBlt+g2ZsN>Ozy6A;oAo+?=2>^EZ?OkscN~~TQX0Joi zwY)T-LUhj`hvu0aagOIe#wj~xti!{@EUKJQ#Fq2ECd!j)C)I~qtM|z0;`(+5deurb zxC1yQ?R0C!%GCR-F0WIH5~2t1cQia^_EL-ObXguAWLGhpw(susGl#VbQq&@2rE2kU zzF(h2Z7nxUka&lh8pIrH3b8Gs#@!_d3H|sy){K%;Z7zfH{8hOSoC^$9-Q#3x8oAmC zu0-8Rrt}QeGh?uoTi`ZIS#hxF6F&Vnt#Hc-uf-C+it8}um$5sNQnIGhU`acVn!}y8 z_D2Q*ZN;leQ<^~PHvoTPs~&kp=v-#*jfq{-{3-D1yfq3_9wFw2fpHQ0Og9TAQj^pz z;{=cLfI8OCjkR+$qBwL$=fA4Zr0NQ!!M1tD{q70&B8Hk!s<04rNNtfMDp|II8PI~0!4@UfF}b-Vd*BQ)olrdF+27?Z#LHQR&nFR}-v91ZuZ`FzFFGeaHq*y94t z|@l1@GMM{&PH=eex6p~3u_xex^ zmHH%BuAeaqPznQZCt>eQQf#E}vUh0ncb1AuRFL{3ZmLZ%IK$`{blUYPDpCvsF#?j{ z8^nfuAF`{>ID59?cPyzZWRoQR?%hDDaY<;YVx?sZj$$ddQE-H*UxXNlu6{?b@yS-r zcFow!dR=Z%fgDLCL!Oijsbot=q~_ddFDc@;Mv)O40lf<3qtOj;%($~&YmKGk^^H9b z_5QVrN?o)^t(8V8h&rcIN|ZqaY+?mSWUkSgS(DJy2*%&D#MpH{VbZW*aan=0ut)@35i!0bYtExg!iX@Ux76+Qjw4Z5ZrWYe@<7!DTkNJvB=CI;Id ziUk#8Wu8q_EzAbN){=s#fe-+gqA=ylzr?z-{fo~jpc_}10ACw>Zfjl#_5@Z(?48`@ zY(eHgX{8cDCMTZNzBTC8juNenFnpni+hQy)%6%<@3cWHtx2sUQGkg+ln_ZIdMLOF- z#Hq0(XxN%!Mu!&|*}UEsV2QRC>j+v1BVs?jsy1cf`#0YxC^W-FsQ~e{YUmk8i%!|V z?w!x|qf>Sd?3&@|DMM@BTg^Hw$tcS01@4ENr${>qKGey&DYxuO*^rd#)JT~kk~0=I zo!G+{SM1i30RH+=P3X}?F4@F|m6a7oaj^ER*u&)3m|@@?W>PetaZRhx=(^bk%oe2~ zN&t^;XL`w&Ep#?6(G^o@P$`d3Km{beNMq#^>QEA3tAn*sAKGNv-wPtxDC!E1Cbq^m z6eY>N$xdCvQtPA5OqeO$^gGQm5!k7^WBZE(Y`2pHG^K66^zH~3D+1zeCFkEmK`2T9 zCU+oKX{J9Gh{fYcNK#4k6A}#}e#h|?dd}I4JX!w$DX|QpNGGA7lu`mQc1Lj4F7qsA zR49|7)>NIj-i1sFDF|6K63{}RIRL1U_(x&yRA_CO+qP46<|rWpc#~0#k3%fUcKR&~ zXjYe0HU#nWNC2NeV86?B6(4s4MwXBnKqO))i#!_08SWt5R*jAkXg()t$$76r_@* z5xu)*fDpovrG&=+0J*&t>VS$}qBC&w_fjpL(tv$yh!O2bZLz9UNNgSqu#0w^amQ5v zYU$p6snGmL=K2pZ@k8ZBNKrrlkYE8v&4Lpc(Q&o2=EEduQkB6T)LhXBHrh<##(G;|}OV?6D!u4x2ur!sCHa|8y zk7WM<9w}B8gpjt5tw|v}$gQtv%0h1&Etbkgkvw#)vV|)xw$E*@9a@%vr6xak9nDBT zLmX0F8Qv*ceASXwAq39VQ&pjHjf(|`8(W369V603M?27b8RFh4BpD-}x>u>@&n@yZ z(Cxq;0LrR+HJYQ)Lp?h;J`nq-z1m7%iMQ~smG%@PvE&OA5-fO)7g7}UENI`p5! zO1Y1EjhZ8gE{1D;B71N*-iPH0%7*3mQ3XKl{q0G4EzvDK4PLlVN|mZe-=1oT!F>Z< zydXd&JM25sWg1~W(AeLJQPd-O-fFh}6t1=pdi;V^pHIBZQE~e$68-p;$&u|q~tc%k$aqZAd*%@ZX=1MN=d35q?bTj zoWubDtRYjzs#OLgB>;6jf2AgQt4M-B<2qHOtt1VPsk#xnXuE*7sN4UQWU2gNgx>Cnir9=iY%w|E;!&1B`%~A3`rt>PinW3(Y6az z&1BBmh@~zeDpJ!jN>AzWS>-466GoWl{M_?m;H^NA2+}_h_cfVw`8hs;o^2X^n)92A zTZ%42X(#ufE8?_rGE4I9l%^-1Rpu=TQ({vCQ62kLMjI|O;o6(r1_wRBWtDQzAr6)HeX$`U=5&q`02*w9SO%uw*QYf?#6mWX}#mP?5nk~kYvnsj56x3V#Guz{p+1HS2L%8^^c4(yQ*%~g74X~Rh-M!5?>q!}R3~V~`7Ek{GCCT(R9d#ak zs^OQ9pp>YA=A6Zd=4@*J02jnA7US zG5#RQQ?y48w;TPcLI@iX{AoA61w8Gg65Q~cFJYIswccpVcIvsxxH=PgcG27KN}t)W z^0h?&0Hhk%jj#1+WZKh3*_E>HKaOKpJ|r%D1v_{H>rE9m>BFx|3RGB-YUHiipL& zGji0WAx;865~tO@VV)Q__~=}t`X|^%JftZ*l>j70@H?Na1n|!SQZ`b~@Sk!jMhSl)UP)gSrdsy-?-S2?j^h@@)*r;K z9gQgvgr|g|0Bn?w0PHDzZd_5j4mA~LPjaR_--ccl+2B@gPC0&n{o;w;wDJ%~PUgGV zu}2;^`!MF0Iqad`%+6op3w>)UR<20eO>%DgI(KPTMVXgzP^BYH!hn!HkG(2s-IU~) zY}j0i5*&ccG4kf`P4Z6i;n!5$=N{T7@8O6{yomXboQ+8 zJ9;)ddS!iccnX~I)}l!xoq(nGX3Gi?YUuf?K4D1ZGD-UU)J#h)yt{PW<(s%;>OoKi zO%3PV593A6hXkIPX=O_lCgr##Dg*%p`i$*WDK_+Ji;7f@&&Zi&SIcGVmV(NHXKnre z0F^T2UN}nj&6UHlIviy>8B=Q5>C>@2DXLA5c=u_R=3VgFPTVHlR_0_u6UnZGaokMO zQM)#qD|kcZG}#vF^oa`6O#8>yosSAdK5@J2+FS5C|>GW+@L9s(fWjZuQ(G{nfaiLM$rfgmt zc$;v;NeUYc#~jp(*xZlNY~U+X&Lu{9FhQ*pB5|_ZwL)8CR1!jV9qG|}vpm!EdbNJW z2=#J*rCE)(`x9-@ohd2QPTxv{u_2ZEJk+TQC+WbUlCwz>Q(t#^LP-a3J5rjVywLMm z@`6>!I;JX#@*s9AZ{}MCl=_K~eW)iJ=(Q{8h1^-WZ0gF=5~>=hIg$tL^ z;X#=jbni!x8BLRxZCg^3&X5NiZ(E}p5}QPd&^KW zrx#|3Wwm5d_4T6$zbMwWic*ybh3CDpy*OONhoQhE%^X|@WT#G#tz9=a`j92CeMhx9WNpxz&|2+g?2Bfbab-p(e+@}R zkpiE6O}LiOL?>Y#O)aLFR2agL=xuMQ8iK!CH83SA7RK=fT`_Hiv{u`NWT+r;J53Co zfe*25X9f+n_Lp4p#+Kvop60G84ullD0fv)yr`ERgDoUt2yquHLQt|&K^q#DT=6Hch(hkvS!||4cA7W7 zfad!^>|NAh_6xW4I-;Q}9X=|u&XI7Na@k)tR#aVeD=ic06S}@TRy5moX)r^G`^JEi z<{oE&CW#dKCk_V28(`>kEQP^Itx)=gavan~!NRstFJ(4N^!L z)P1ecrpcTd}un7y54*dOST*k*462x&xLg8Qy!ngkRrAsvj@uIrKaignJ9SL$~ zPXqO&yp~Ue_K3sTjYx4uR!qc`{Qk9?SyJp%q0z>VRgaQo z4r)MA*l$YtqWzAFgY0O$#!yx~{ca8DT$N~aVH(j8#j_hhwfT<&Jvx0Ua>&Q<`YAlu znNm=&i;#4{-VA?x{&gNjTMcWoR)VP{a@(X{N~22i?qx%U;3@Kw zHzp%dKNY7&Y?-0djX%xU&ZnMjyN^tj5Dx>etD`H7eKL~8@t}n`viu-yBV$s*Nsx=o zZ0blZgvQ#3C;O2~a$%@_o?ByXAt7m2phPH$+xyz1lPyM_qElgy2M~a@1sUAV{{WQ+ zOnjEjG0yK~g{)DxK$WFQDg)XnZyc0<%}|_Vtux!JlCI3){J^yp5L3K>Ijf3($rQZ+o*_y)m865f;ZtLe>c|0G@rRF~>P=1mhz3V+w02 zVV+?c@dpGM5JfsGBv;Z493;T;T zJ?T3N5u1Hz>5qp00B5^Qzu}Gvnfye=FwC)(5(X)BtN#E(FJ4fTNFJvUgvX=;RHFhp zu8t28Rm^PW>x6qX=f#h-qb)gkg!o3@A%(ED=(x-mKnwfB5e+15ZrlL?dVuOEb7zYD zVuf*6ax|*y;^yJ!u5Mp>=Ui~DZY@P>StoK&B>SFgB=YK!biT%l8i^`amd8p6&P$-7 zCb|(yRptVh5`|0>2Tq&NypHUgx3cK)rzSs~v7*b*qYl8WQ}>)g_20p2!go@SbJ%q! z-kB9CY#gm5U0JKdX0t9MZH8cW?qRtr3{Ty#t5r;;5+%j|0QyCrQ9kj&6?4gIi5c&b z?AouhHU=-TC-X)some&;fbxROCC35ur`}CB43c)r%aUnQHlI0WyQ`$Q?Zc&H>N--d z(kc0To=frQ&w>(5^X#rLyl}1pfdtOypzT>xXx61&7fw>elnO|5P~=2G?^M%!U>iA; z@kKPIRjo#J^S|X=G4yQ0)f-QiaVHOwRG@+(KqPK?tr)UDWSrA2!+EfnIr4>yYfhTlVoCP5?m)GLY#+rHb#Q&denF`uR z<<^HRCG60mu9>abyBBe$-YvRNsgeg+6^|s{P>iuj=+>;^nlEncS8a0XeF>d9jH$n` zBz(}rGl&%Z8lReO-%{aDBqBBu1p68%nibZ=P?CE^F^H|=vnwg*+z+KC z$pCNpR#`wa%a1Qvi)NWn5Mn`!r6m%Uos&B^)NY$f3W=ESMF|Amn@9$b7sZp9)Qri%CsVNPqB_x8NW+Zp3GD%y|)e9le zQxF0C>J5W&>|Nm~)dD!EIyn;t+}Nq+R^a?Ye`==-*uXog7OU7z zn>1Wu*B487LYpZ_2ltO^xGM!@*%!s_Le!Ne6i(jMGuLCjL=nSn6xF&^jS~_5ie@&N z&=QbN*m-iY30|&f!3o?vwpj{7eL)2ANy!>bkObSIS1nx~PPT;VRPd@2N-YL3_E62; z&HE*=-;|;~lz0`QDI^ak{74&1yL%XR&E=^oS`>gt{6;@o$vd-bbqggqcLu_o!tpEI zSn6S-RHUn9m>f~V6o1qQk(;Fwx3Om4{Ns6k#{;>f$}iCDQlX|a<-Q+> zwQSPT>H=Z_vvL=p~>I#nzcllN$6dRw(Yfrl2kT;1P|*& zCW>t}`w+Oq7N(s_LP$S`dJ0sfLX;iY7{0ZoOt1>vJei34(77k0LW{d+mZ)n}U==!~ zpIV5K?-X%KbQ{{H9yptfs^JJABkgZ7o)1fDH!JDKF z#4c3fO}GX~5_<|>d3rA%w!MU`)>*b%N?{v8J^ui$5|f;dJ7AS z_DS%|Z!y-~4ka!m$Q|jp*fN?#DaWQg0QU8CuSj_}HuS_xzLFvU_uip#j4N+qD_m>{ z2cCATB$QW7XtzX2AOp=Is$s?bA(M|t)eu0PjV?}uO2Lmjc95c&=}J;ztbed8w8oMJGzxa$B*9Vd@j~R6MT{K2LO=keC^Nr1(&Z}&L4xkD3`tOeAohwxq{qfK zMsG1MFHw{zaklh4wXh`#SQ6(M-(|wN*u;G*?#1wIja}lBs478UAd^7e?9=hE1=cU> zg}PQCYC5SoB#^{IF)U|g6pd$t)@umZV{MhbDU1-JVJb8DK{PU&NYJq=*$2MNBtQ;; zM2H=06sH&1D-FE?9?Y(%K-7ucZg>=Nlt)Jb_A+xf4>2Wfj$pz5_TH0Wc@FuGDb%DS@AFTahZL7(Hk#8R__dOje9#JX z&ck`7q;sUH(`9pr*}MByB?|+rh??nmtsotGBJW!*1f(Fw-0xilF>`{KV-&LMU?vb0 zJBpT=D-!!Jq~XHh4O>m1%y-$k`u8x`S}Qf|SN<2TKZLQ2vWN2vDgOT*-}woj4!9%dI6i{3a( zY7J`MI3Co`o0_CHIhy_;>wLVVkWkyR(s-*?DB2EQQ)^@NW#XcQtqv6p_up={haz@m zK&S8^+pA>>aVOYG6>c-*zJsO{!m=hanJ-$ya7;bx>*WGrvFS>BsYL9Qfw@tNTZ?jFDbRCixs%oDk%qI_yi4637xmC7%)lxR58Yv71>99 zro3;>9x~?()wuJF<=bVc7B#JkLtQ81iG9I&*+oBPisI zy_4-!+U}hK{_#m8brG^j?j-G9b>pRviGk(b#@Mym?pNiNDM$fdO{<+KGjwO8%q_Q5 zr0F3%M`82ddR+%8Cb}*RqQkAagBt_9nUUM)iYUs3{{Vw%@^ghjprCZ50|#j0wLocO=)DdVM-&>2Wh91;~TFKK6<|%qD+a1{w^*p%_6(AJge>n;rvB%2;!UAD5;typ3S7Pe4U z)W`#I)2~rQ@Oos9ShrME_`QS5L&#HW2`QN9O*vyrNYcE7wM7k?@E2m?N<+I7(gx>m znndzY67o0Et~tX7c%j943nn1x+;$bn&bd26r#9KES+5Imr950hmPu4^205ktQW=d& z{*8Lf*gMV$30X4ZxY_zj{(lx)%sX z*}Fa*E=I(&7-cGOZ*6By(LDCgV~DEv-?rULWQ1!jwoliJ9h4&1k}$dNWP*Z59J+lrq$S zBn_jQ)eeLC5oF=^0Zh)39}`CCTa~>Gu}cK#a$AENZAzRG9s3|d4f3BZl#q2yip!P? zhNoo0)v%U8LRG7wq;wi|?386(G1ua}@EBT+j+s)gA`%w?-Jt&|lhK^-7L9~HM0 z9oVdr)e~1hPyiKqp)hu>RAI=|bj)v3E^V!giGU>=Y-$3sHPFVvDs4(Gq=wQUDE{~R z)Gg&~R4A3{;WOWgg!v@8*hQrWEyzifp1Z|C%PARB61$?oNgywnosB@(AnnDX8pBkD z2uXM-bdmkdLZY4Q0`;e!g@BkyGXklr7!kI$LTq+GOMn5+)e^3OcVjDSRl9MiGFVEb zTfm`=S}s%jF~x5ZeAXFHmxtQc)t*K+Av%zhLNfZmyO zwjsf{WESS>D_ThXs81X1^Gkx!rkc|SKX4u)AfO(mt)dHCw6~Szf+h*}id=TdLSYI@ zfk+D9NcpR9A@eA;w)I>UI<4U+iKQqgmu=_~dvtUuErF-3bQGyI=s9Eh1{dETCA5?S zy1nQ|SZfVQWu-W>rp*2xr|VY+kesT%#Ys~*##&a|a$pez)Qv`K)M*yRqE{aQrK13XdujGR}o zR{sEO@>HQ5YnUxB+3*)+I!IRLtL8vB!2G@DJzL0cO=K@ROW+8 zqAPcZt4#Tc26mcTAHVh@mw2&CzZn3Y1nxhbS0n_bL~8pRAZndZ02_ZQTc5G8L{8@# znI36L;z8z*kwC~T&Wt_f?OZHaSo-VWvTIWe4bJP1Zk2c-d z=s2xe0mLy>XwV&2vSa{v9@E;n^Hx1cK8QW$Ii#s5Qi+Ksc=iN}PszpDTx^HpS*+WK zL4R1^R95JDJcEo^Y^?E2_xE%uZ(V9~U=ES*??m&;^ag0P(M9I36rQ$A>P^B^sBTLC z00930iqi*cW=yV;ui1meryL3c5Z0L7mF`D+wwI$TlWT0IvHt)N5p%6*xe9QCD3Y{A zIWCHa8O?gG`W{dtrelj7~sMP2}hnNQde;T+rH*8$Ibhg-ocI(!VuSVOM{8ckJJ)tipDnXW3 zw4wuwK-iK$m1JWvLzc-Mv-(036gQE~fxq#nZ$WmJcUx*mNmP+NI@BPtA5l?I^9da~ z5ASM(Xu(Q(ZVf~v$>*W(+MpAYMnxWCl!eMu0CUzktNja(R+f-4+b=asAt^AK)K3TE zt}Xg8JG)?8yeyq%DUfypq|vMrC&I|SBbOGfN+C%EbQ>uD04mptE;?$#zATE}Wp~cy zqNIoh2Q|=L2>Ij7jRKXHt`Myy4h42RkxIT5`S8! zDia)OJ&!W3RZF+bmymQM>h*E+OV5!(Y6O2mb&YDdokVpdC#V=S%DoPnL2i z&iIqLV*|6e$^IH!fpLkr*3aD_9lYmxQq)F}kpN7_)XaGl`Xr}avP0qyEF8lzd%@7w;0$^ zW%>UAW~;(HsEafqNbv&{WA^Jo_2HI^-$?%e^otyxK>4jWWfZhj6O$?n9IJ5E!)jf* zP!OIdr{l%0R$Sq#_H9psJ{&i7i@A>8F{;kVvg($2C!&4#rg;7`PS|swDPL>UvWhFTkM?Msqmz$*C`;GJ3#oRENzX1n`e)q;-N*gUq@)T&2* zgi};q&|f1aR;VsQi7EZ)jj6H4e!!g5TMMSxxxIXcYjFS4n|vPg9c3PPFy#3&v2+j_}A8dCNg zQ|Q+W<&f2(;u4aAWk4tU+LpXM-H%wknw6Y9KT?a1l&?(w7>E^)YFOPPL|dw56Nz|f zeR%txU8q?_p4%#o0VgUu6eJf$7e+EFvhL{GJgb5aA(Z(ur(!|ow!&A?&zUrA23f)bO|(K1lO{*B@mjGfTQW{e zw`>>)Z5oq2aC%cxu7u@-mqm?+pm_-fBa;HI%$#Y8-P)JiAOz|?PXei{9ga@>0w)A^ z=?)>WrNoKpzqKKzbS*6pY;c#9ml9E>#0@(MgFxeY3hT1V%Nc!6siXnukhcIoiCv&k zLmFKR$&!oT47B^RNMw|Pk*jImv?WGYoiTf69Jsl-(5*=dfjjUh;~QeQ@_J*n*sZ2r z235EsY0DnA6M{T$)F#z`iVTn8y)I}RiFzaVt_D)CTD-+<4Du;$*JE(43k$H_i)Awe z1b{hL^r#fE#h76z)o}BLAxb7d98|M2#Uw~^ML4SjECi&IPpI*|ThbXAH`xzUmwLvR z8A4I5X|#k#5PF(i-l!ECb_Gi^ z^MPdvLb#p*rHVtfWL=oFrrcB~f3D>GP|8#gik^7g1UId{ zC#1opCjAVAEjt{$axKadot9P4B50?TB9=DQpcXB9garWanCxx=;MQE36ACIobiTJ4 zNF=AM_Z_KmpV-SBw)t&HNLHmpou;FjBW;T+^~hY1o#w0L7sdUJ8+~P4s1Y(pdXFo8 zm%$8f+zz@_gTRT8&{CSQ*xhLR%|lI?BhFCR{{WVvR7p+VfsS0mnqx$swPPfmXmrcE z%5J9E7izoD?`4&uKNDH9cMpnz9uSEvvHJS1`Ttj#7G zkr=(ZkiGYwyZ*J7QEYr>yGV>(-7iohncf90p~Pzb^r0k;Nm1KwYMY`m5s2c0N!`Mb zdvQPULGlWDDOm}`F$K!XfgMR51!s9F(VV{2mTPTdvoV>8&oP4Pu5@f_d{cC(NQWKjpXx3caoz&u=4Z5XvRGlZ{ zv_?8GWY4OJuXxsJaSK$H6`9{u#{5;i86CG}dv}>`N|Z|HQ9r%3N4L!fFG#uMNm2n^ zXoo9Q<-@lZ) zp+AIlA2qpoZ>P~&bG6XvypXquLAMH8hvDb-ru>Ru$FnrDwtBw~9C1VoZ73se^;0>d zwjxk&T!BmQ(d0O#uG}U-(gL`leoPjurx{(Q(g>#`+$zC`d6kVV5duP_&`*ogG~&k6*=k_7mg5LbO_Y>5JdJs*n82eYaBTxWkyzO+B`70e-FPN zQp&Z0WPT~$Yd&60T0_2R5ZkW_-X317FjO`qiI4Z7<0!|IbOV!pgHMFcI#zz@bpHUH z4n3<3X}e_ruKXo+358pzq^RmK1p8K;7#yX3h*-HB!OJYaXK~^VKV+MRtEvN3ptx5bKbGBo z{VB4+HmIpZnw z5pCxuKtfup+ z5W+)q1t)Po*P6BCsm@-ijX9KxzTx}Aq_XP9WDSrc9 zqSW7~VeC4=^g(g36gbuT%@d0m8O!LgFuMmFEtt|KN4K?3EGbJxfrnwB1dR|5=cM~l z#~T+KM7GlgLbS?3CPc>6-V86927kfOkV+7hrauq#qWpsS5gEnu#kIm#P?8-#x_i|> z+AT`niVrnp)ThpLwuFKs)%(?&OZ0EX&122EAub}|`6+Q8!n02Tdn#EGEb#vTz!q`b z5aJ8A)auj5nS(s-MT5bOTR_xbOa+=g%EI;KHoI2Npkr;*zcb#oe{CAjsq3ae@~_!Z z+gwnKj5$eIaH~*G+>dHha7jB6Zq3EZpJrS-E!LbdlC+2_&^Pw2a>kfR`X{gW9NnTz zM#&9`AOM&mgW(vY(A@Y|tUtlv@$qZjiek}z$FA}bSNZs1EnTP-6KqO**U}P z5Q~Rhb&%o|;+7K}nV-^yst$5bqGOlVhc2ISlqIWVt`x4Cx`9Onu~Lho%uCE$;pOJg zR;3faTGEPV?Ni!U8M>e_<&8M=yyM0ZN!ymL<$2~jNcRDpf+OkJz z!&ca84z-s_9P&@K7#8nBtiDj2l$OaQCwhTbv8~%s64K;q(&TokXe2ooaL<^e7f>XE zPaP`7PF|4%#4mjNk{i%dI+SOF+uD&X%@D@xVy+91xQnC|HnklCR`NUhP)X9T>0Ju0 z{R?C^*;;`>1V;o^g#DJ)IwQD_Dy6iWM4u~H;#6-PsdJck@vhkdVW6AG5@p6nKZk+y zNchI&m2?TlR;E?ur6Db-l0of5C9?3l?2e%c^VZ==LO&9>=i;bipQGESi=?QlNjndU zrc@b=Ng)YJy+^0LMQm-EIPaDS(v#M$fSs^okDI0KDgePW4pbVC(9-Vdw*LTR(m;>i z9cU#h8I80%wmK4*2_&7&)x;@r_6fVXLdw=86FqmVnWavOh4<(H0@U~I04?*s?@}82 z9nV9uw34nMa0eAsz#2O9jX64u5kEC6?1BzmEgDJOOvh@y5J4AC1gJ*PezimN`ZG<) zX|PqL3p=GCR4L2F;eu%~*!ksEitw)}e6OYiUeGr?=1H2L!xiylQ*kW?* zkGW)ALPAp#3GYJU`=ehM7112Muy75e%x_7Om#~&v?1kbsYHTbeI#zpbC>nG+4N2c+ zPmVH_7eMrlQWHF%?9wEwW`yaK#ya}Yr(8_Px)whL*`6fK`zM&c}OYd zC;Cxf!2bZi$TXF+Ub7ZAK7OUF@+Y-vu0M)0Wu3d|*F4XTKJk0ku#?3;3HvkUQEO(t z<}6LsDbNO(-U;0M(_7KZbgiPI#jhMno&|c5$9Sa5R%TgU*#x?}4TWkhY3a`Nc=0(p zMdVR`#q19K+o=HPQ0hTEk8mqq3@h6KM*11Ib_0)%99wb(_QWT^=yv#9I|>F@JbOwhcT^w347N)-SpP(UZJnu!gJqgo}Fm~xz4 z0wcNTDY04w(KW*GEoHXWb&^5j>%Coov`!exj=E$rr2sf4cQq0-%3!k`|uHMj4U=&{W2-L~cJRqEK(3vlBZEg9?SVohhG8OeQ(^G|0wF-5JS^pN9eB z-$X&U2BjHKVtDiWk zC(@2%-eA_aH-C`}!wSONwrDki+9ts((mcfpabhi=9Iw?td5gAP<(hw4UH>7-MD`7iKy1Q*800H;wOO`esHL_uc;i^e8 z04Wu5bg7a`SE5sGho4X48c2=#6k^#VYRv_*Gy&XED7VmDUtsI(C@nsaPq-C0jmK-U zvCJ45coeO&NcIMiEKJezsO+Kh21jw{oNXv^0ZM=Xoy}*I9rS0*mzPH2cunEyw7}W6 z`?9o#(=bd;Zo`dL6^AFX*jI*jSN84|S%kXUNDwPe7L^w)v2SRvZG1nsx5ip)?&?A} z26~z2+J(lXc?(!&Ad@gCWsm5e zBP+~jCNSCx6wp%AVsz4F1TE%7Qwzz-Q;w@bl0o17jVWPYV63g}6Z|&;OAj=Jw51sv zifY9b(0?b{XWQT|I@-~sf&|BUG_Rm%#;t6BX@RQUDJ$E5&ZSU>-?C|B!ippb9ZgHF zh?`vp(P|4L%Slv;o`R@2P1@P!1%SH#H)ilww6^B0&*Bsc8?#19rKVZ(TheMA^@G{Pf~s8lU|9FD~^Zwo+3*&tTaj`VF2;-6>dt! zVy5hwW#XXIueL}5CO;}<7|F#au)9HDca?!F*nla7S^#3YLI8=1+AHu8U3*w4)L|T1odP357;%QGK z4y-$g;%?rln{+QrXiP$Sp4Cq$rWXo6Vd9paKqw9rk^;FgRq`&GO+Ls?#qaHk6ri_H zKE|_Te?y?D3|qTpr9G)>FGL^tsmX&keGxoP=sff5C)2>GVZ)$G97ceYgD08q^H8%i zGLo>ewJHy2s6>aC7c8Z;Bhjuu2s;n0OCyQ^U0p)FrqmR6B%YKKm~o5rH-ePXZG%;aGuR<Q3&Lce@dq7VM36=+=oh}7@fU^S0o#f7ek{-OsF2Fe}xdCJxNiLOdaR2 zp>jiUy$gke69?Oks6Iv+lh2nze+&=qNuZWj(GM7KHU4Rs1GNgu%4+*Fy1OI*7Xy>h ziDfAyU=&u6bt_}qkDCZt52Yyz1dw+Jt$RO_9vWCbVFoUN1`M6K>sQGNaAs~S5}-lv z@m88GLRX+I)38iHgZk1W?9!BA?f$vFU;JpBzyh4JC z%C_5M%_dUxF|?T-yLhawHAhMdE;3J|H*yZ;B$e^ET1>kOV8u5pFn1fzb5u4q`x&at ztd*z|ou;nC1zllU(m>RDr*GD%zHAJ<5a|FXN`R7kiVK&}N@RNT13DByN{Ac*6cV;c zNiqkFU@#mS0u#9tzxT}pOXxViqLR$GBdQLMEg^hqPajIpmMIQdq`Ec7HCQbMbx2(J)NVwM@6=S8_G0GuvDjT|!c((>kIFGI}1= zd{xI#C%?w`EO@<@ekw1+`$vHj+r=ZL4RGidAp_ z0FjY$_9EU7c=CWH#STmgc2}>a9F&r<(|8N1AyDindWq^jD+A@}k~w6y!foMi2ucE$ zV~M8Y>GNY;p(n^CZDit4;ZcDE6G@wj(n2Ji*ly0z#g^f<014dED5QxEo)+_}X*vv! zfb;K77h`YkNCmsA`{ z4FrN?PfB~s$f)I)vi-p_p?xVnQd?-i1P*?b565eXjw+X@8+y%DyF zRvVB!l_$(>dQPpAw9#^X81iOv?6GkCoHaD@Xe4RegR%O4m1#)}EF3#0rD79qM8J)Y z)+x}9_B$O1(UO|{Dq%!~?;OQ$M$R0!5mfkW7Nx!|l0gSzBnjRkoAKmJvm;v= zE5nr_sG`{@LbreqG&wNNU665Wkrydeg(gJqHcehUPQNb5OE7$xStYe0M2Ve_-%sIA zf|b)Q%P$DaVV2U`k`?NSBk+U8YgqNPQ)J@D0Z4+B1b~mlHl$EpK8(ZB&`j`?QC3Rg?WKxk61edj%v6B@+GSz<0&_W*&9SQuRZuv z(H zmJ}UPjyR!lVEpWm;dvQ8dQ@6EfsQ79sG|hd!JcV8i@OBMh%GjB?E_ckTDTyT5(wVq zbcPqD2@}>gO%{ruL_N%`HIk-C91}8VR1lgBS>*QIkJ&Gt)oCO#K{aH7oSUsgY10Ho z+*Q&i#>dTM@JK>Jif4}BN{Jy((e2am((hET+td1$^ zAkMlV#7P|sTEEw^i&tJx4y{%rK?L}9mtv9l_<37 zjZ$ks)#aZoLeio@_@QKSXTt|eCgYTcHQ#^WWWYF4J=dhb-zp$>PZMlF0lZQNmyrWK&B zKC~+xgOQ}PZx%rC-G;E%m*u1@KoJ`X()8$h zIu2?US9r!>Y0_XFMDr2!s%bD>Qx%wOV7YSPK-08bX%0{maDpTEYZca<8o1;jFAoQ?pF1wCv^m$|v~UH#dLI>pG7E;PcxD`NY9T z-g+*=g6au0^r-JV6X@ltsN4nCm)F5k^Dd0v91{Dh)v5yuD9R7;iCu7LYG(jggpGrc zr0dKDl)#MT`Z)unl6S2Erp$gM0e^Xiqq1wqIq5+uz==i2w%WK)I(Ror9SC{Az#zIkUS%7-|`n-k~H*4f^1~?&Ty3(>5 zmGMJIsyNmyqe*_GuUWfg<2(an&Z?*V%lc*6am#O1yAH3tAxxS>W>o!SNWNc#gOA0T z4lv*b<<%|eWEY*T6x+L8G$BM)pi)M<<5n2qcMj@9!WYnmXK`Jj0;lCo|IcN3F;~Rw zWQBD-08_7;A3dLOon49^MnQpm?pWQUDq~98wjJs=k@b`J_ZVhk8C@oPv#MR4fzH{s zJviVj`I4uiTo@!az5U2?BgMD7`cKlk2stzFq6v(@j{k=lh4(+ja1L_rc-)=*D=&{F zJ|qr>_7~G(Q_6vtPMmB~XZUI?9{P-k5mgHGYcWh5mraY}E0qTq)ie}4A_$ZnQ1+)T z5*hRlFeaAxj_aO1CMWwKe0cv7m~mNfI0%EmBTFwl?xq?KkF@Hn zaASZt&)vnldgQkBZLei==j<98D$TQAC}VLuxYHt%?~TS81{1{jqJo$Sb~F8aj?bG` zd28npsxf~)qxmTnhJy3=zNMIH{UW4CxTsDQMvN$`S9_>F) zjf!;W`Q{a#MY5F3@a8_ADNiMu^m;6A7py$v7c~93R&vBZ;}ZZHUo-HC`5O>SMN>xB zz)wIa0?8R{$dqMr7#txG`D4X~laC-l_EvsQG?gTB>n3X~i4OT5q}TIW+LK6Qq-;*sFZ&hEpP~ zsTa7?3gxTRX5*mF?;%u8e06IdJt9!VLyKfb^h~N9c^Cv9#Qa7=S*+ zocB`VC7JKCUT+30z5HJDt0N5sp!etVeT(mcCsFXs0n2$F{%&pt+(t5uv>B2UHUWOW z)u?T`GEOkMjJb2M?qfyp4>SMDXM;sWC9GAE)u|$Ys9l{`W881o*gu_`KC|$#BE8wn z?y;qPHrJ88KIv@Bx7UJSSx~o|0M`+#hHU5?i0Yf+?-yU#us@{ld8e>DcmK+7&=}JN z+=~HIp0K z+-a$r-QPj`zfAvlJ_F;NmMYsP`ZOePtiLlk@D?NwE9-do616Tx86S8(C4uh+`#(Td z{0n6=A8wIgX=6BBpuB&Lpw{M-@oB#36Xy~JVJ&PvpBHzw+B3W)rKpzG(RNL@&T?d> z)(V^7SewtHg5aHbj?}5u3SO`rAFKDOcEflU_#Ln26qP|4ed1@es8&9+O5Ol{I-+|# zc+%!xGhcqwS?R;%F}CL&E|`fo0eXQYZ$43OS|TA)&o9k&x2wN=Zr;H6!q|7G9ODsb zVJc+pG-AsTMc!D@3+4)aLAqUy!2{6S`gO|Q4F3sk18Tn$rMUM*C)C96k=(iCK!f%T zOp?5O!-wXa^=vQk63ixw4TiiVpv_Q9zE|v~sJmdTYtvt@fJ~!$3P^xWm+rOQ9@6ie z5T%>vzvLRuJ=M|sv~6Ju%89L`YFVUz?`pFPOeRlDLYYc~@Llujx7c@Mk~gvX8T-0~ zz_lCY#=M!b>oP<_I(0-ipViwOw&ReNm^Ic@D^}uaOMxe3tOZ$MWb;2-#vq%Ga# z@8Ku48ZQ!=YY(_ZGz1^Ev*!Ik7VwB^8hS&D*cE@3x~Y+{KR1Hp(crSEgFX z);-Xv6|rmE$=7p(n{Zxnlil-hROgVM+qCa>*a;m8{lE-!LI`4ygMOFiYP!- z=M1u<1@FmZT)uv?qB)8pI6W0*4|l9&x6x|2>$oHNhy|(KO{XNk|_TGtSjwyJJXAgl;bWrZ}dog&Z)qK4$)sE^|C`C zcuQ1LME-TGorpnmg*OpI1lom{J05HM<#_U&?bLrdz=2W{AO#$N8@?8^TtprM+ZfF$ z|7+Oo*$q?nV%D4krWHPvtArE_N$udx=HI>N+0!ymv?dS;2uDZoHNpF+gz;NujSDO2^9W#4o{7I9r)*Xfu=lx z@yi`bwoCRpX25WgTQd(T?dTS-*jCHQg>?^!4t)~WfAMF~=RSB1etlr|EKLc>vNhd= zg{e?D6GlT|go9#Gi5tt~FK9rz?LPqLUHz`fAzfVu& z*>ooL532>?FjQc5lJa7X{?8VfYj>|?!5!gUI$@4pmqMSgD*A+R(7xJ)wcnd&(#y_|24v8}@EBfyq+Pt7wwdy& z8aI2YbvW32DA>=&s~V|!WA|@PiEuTFa1|-q0T=8~LCD7lkiJ{+$a8~1MXyD4cB;zO ze$6jzM2oQMiYzs8nY3LDw|pLtLOlc0)k8p>qg};+?BO= zb)7_BjJ#^GrU=^^shy=9$w@qRMcNXct%61xE?LnI*c*Ym z#eaiD#?>D7Qt*P5WN85%n0%e;1wjD23N860jO$0uDVy!r6A+3tB&v0hY-4iOps1Eb zt@805-i`#2FO}4AnQ(eLFh@OFeZoH~BoosnoYYjtb5Zy@r?pdpuQ&Pl@ytOl@b;U^H z@RFNVrXVX;)apz0+v>83Dn7X(gDWAdj@Cu&e|8RPZ=;WZ-_*9>JML zs*|kklpbEolqO&Af6yZS&4(${YVe18i=(Z}c4WXgnz!3ETo(D?CvyJIKj+j2=e-KZ zeoJp|)}Mas&F2}%OS&`!QDK6Kj?kSwxO`t@eyFu+ucnv%J>~2=mag78Ey3fMy+2$gb;m$wt-aBsO?SJqaWB}1pQ!C=l2$ykUMVEG z-TnH6)Hm)HT@Os#m1L3mZ@Q}0B3}H5#Tl&&~p7Prb|Q9X<4=dr8=15FL^k;U~39NpBM1)8sqyXP#q)*=1jMm@@B7=U0RyI4dA^`PlxLd|_KU=v4=M zHt>d`kxH`CuUkkCIXQ@Jzr3n8YTr841%X1UC@+$)r+VV8+#SUZ;V9b~`={aY++Dsj zVDZFu!0#5S5b2=U7&T2~+flw*u6^K(Eno2UDU26R58)hi0F}}WeXKGhZ({ID&>@zu z5wXh`$g;>Po3-vZl1Ueo0$e*byfCS%`hz>OpOR7LW-S0AGt z8RM;pl+#+ht4aQ~BWkJTJWW|5U$Z~+;ILsmSMpI7C(P{)RU!J-jM>?CH@hijZ((U^ z?};;zs7>OX6ZUI&4zwLP8+mxCBf7(P+SSdG2@lFFw# z+AI_>wf%TDuOiwY0_k?vvYGHo>|K}n6X31lUAvD{=|(58NLkh=oyB zhXIjCJU(Bcc|!rz?92JZW@9THXYb?}hnN8a10B<(p+(9^_Aky`Sd!FuJ^O(jBGL() z0mf&cDf;)HH&&X;gZQI%ECk2&pJ}_E2CwagN#7iW!{5cOb@W?Ld|)2TuW+siJtGFY z<*{05wc1I!eZXqH5j%bb9a66BTrYyU{6Qn_Ck+eJ9;ftMX-%HzV? zW1QIG^#`e*si!*yaq8r70= zKnogSKkwd~4)1+iMtyo8)_u-QPsTX~xL#(&g%U@$5!^Pgb*xu;pG)g<$|~8BLUH?4XNrEc69_;SuTu9 zqzMujO`x6DCk4=xBo2x+yDkw=L;C9q5<^UUES~nKi56?*w)=kza zN1FI4oZ9%UfMiYZ-1Hln7$-2ZedLyX$``rLLlwM!2{mr#kVwyRV!)jYdSu9bNT;KSA@5|dn?v(xUEuN_Gc}RjSR<8lJj2`547Q_ z6dF%<1L`r)FtHSPAFb#x$i}u-T6bukZk6HC&RsBfNB)9IP5;L_IG*PVraRf%qKUtm zxkscbXKoHe9Nco6y!|XmPv1d}H?7j+wJ3V%mi*{n;am5FPl13b&uVpZ99zjn<2|L! z4s5(5x8tqJv04wRm_>8jR=^!hu|jrE_Xp3yA+TqP#y2I$YW#Romatx}ZbRFr;a

      M1~Ho!YZ$QOY`IK zNb<77th(zN=q>;3^p98Byj*-Z6lDSI6Hb@x+A$+%mZbiRiyxQd6WjbK6xDHR_`aY1 zzyi;+Z#xzEH8V)V_jpUTmimb1ydQZ9BKJ>9+v*A$Vs0iyNgIv0oo--(J!Qge4F-wh=Li`ICrD`CZOLPP_g?$X{duB{ShG@T3^8#KxSek$A$T6g2 zUAp-0yet`tSiPvcYy%6I{BH!75dkR@96e;Ji)tj*){cF1U-aq&vr)d*2imtqtRy_O zuC^WF+K-$a3^!MUE^GJwx{Dni&`3$68>glA<^&Z5qUA61CKd1iCPuU)?{CnX1giR3 z(EEJ_fQG13-}6spkWzSK)ZR_oe>_w=3r|3zQXUDHD=OudzRMXxwke4fIn65A z>lkuP>`+Ibo1^vXUK%m_ztQX}VZtT~Wy+QfcF51g&c7@f6)~XY$Sg0BbXn1x`9D{K zIDRDvKZUO#9g<{KfN`RZYxljo!Wd$!3qhD^N?Nj(73D}nbu3Ie?7;#}IYME*A-7Hc zNNHYo6O-)191E3!&7@Uk6rE!SnZyYA^K@Ym)JBQB3q@9mJ=riPmG&~W8fMC#`iAP} zjZ#k!ajfl8D^qwjcbk!i!)Di2xB%+GGmmO7BQx-3-+A%m5v5Y9DQ&Vfln+&NJq|3@ zSo^^7vX+$5ITc!n>0|!QtvyNk@oZNb%y5B846- z3km(Ey6b4r5yExj6Cd?#_a$;S0H<7i?*-{vi4gHP}Iu?&NyDX(g%BNf+_B zb-JtldCYK!a2>BZ_i{rb;r#eK?rB7*JC}#2hgbE=UKRqE7KBT92_@>EI9>?-5FGNQ z>h68VbkXS)OwBdW);{tZQ)%+TZ5-(y{~EEHEql#iQO>pF&5}!}|DcX_; zebYqeq2#_&c2niz?YqU1Pcj4MT2@O{t(cl$6^t{P)+>8QHK}=0)&sg7_I5lZ-?-Gy z?S!P9(NZ#sO(E+&UkAt>L6d+p{S* z7+-@(+w_iD7hQJ7QVXuQ$*VaSwPE2tneYa5(AjTk7k@oA{YR}OA!R1$2k5HMkm7iT z*EVZrDX#`JXp4PM;95y&>#GI6r_Y?`HVgZd44tCd)D9(DBEvjnD`B!pfJ-@8g>8D1 z=#v}nJkH1aIuAZN!4WHem+Eg0!BhRRji8Rw!=p_<`lh>+FNv?wNwfA-Y67WL!0C4p zK@him0jWrX95T0E_Zp?DQ%Jq&_&5!fdh5moleca!l_gqe`5r3*!w*a)ouaJBErl%{ zb6<&21ApZl$31fWsg~f^c1`d*M8&bzaVS5bZEZZsF%k|Oty$P(x=WLJ^GS}-=YE#| z!IAfeUVSd-v72Pp9L{XjU%wXaGX#C24YOZvI)8cjhYqj{b|#gE;80kraa!Ok=!Q)K zYo5=}%1({oQ{X^+&FohWxWE#Nc`Bsp?R?YFT$_x?%}{OUhp(ol)5o(|;{*{vR0SjMPVRKz07)>K;NJpV`dLLKo_~NvDrkj!IfV#`HWb_k z7O~F)xUG>gO>D(yVV?-fh}37t5djE!1P_Emr3zs965iOWLMhdfHppp!L52=0d3m_P z_Rq;Hi|IL}eNlBmoXG5W&0|8o4_wLV^CGg>QNsTOxCuD1F^4ARgu=b#ZZh$R;|(d{ zMLlA!X?R))FesBF_VGL$mlUi06}s%}pCd=StWcs#3JFnvhJGe`>|IE{3_5_9Q zKlB&m`T(>#6(vE?u^voRrR!~o+Z-7uaJyZBNM9;jp0znnK$gR$OL7RF%*-ep(3iD1+dnl`{V6agMK6V)D!_5N3 zlW-83PghRa_FHpgy&sqbra{@u_V<~TDurRM-1X7-eWx`#-=T6VnXFVgoqW>)+r`s| z%Y-GHq>b&)I+fMrE-2k$fiFRks4J2(@u?1n@cVtN(o7l@Pzfe8&;eKU?R*rpGD&Qo z4V8%h8}xk4cGCZ83sFVEHmx!*n);`H;P>f=zXRLZ>54G(6xnak?Are(rgG!tdFF9Q zPTS?2*3itxi1sw7Y8dRob9u6(gf0L0d7B{E-&GNK=fQVdOs4^O1 zoh91ifQ^C$hZuTMilAB$^sog=ujTnKk5UxeE~2cChag@ypq+oIp=GtaHoeK#o%l{oA}b$LW&c~Z<{s%;;uW;}R*G}}RBkz_TP)4uPY8m76H`Z&7k#uwv& zIMSmQzs?K*OW;3%*2f&jlHto{6^3A9il6-&hXC^pVUPM3f_~^-!!i1=Or0pWd;F zyUWmhpecY#is$t;ZyDI`cTWDDlcsQ^#4RP+I(wa(DGs5N5G}S;5QmaN;(^E6F3Cfb zW`m9lT0ZV=;qM0Yk$eZ!)vcbf%wR>`_}Ng6#nuUg(1*tn7bYUX@Hg>_jV< zG~<&A#^o-#?&WC7oOG1i)XthfJ078BqQikY_9prUNFa>KOh#mXI+6o@EVSVJ?3Q91 zC7mL0oYSGkGUSz-i&^LjoTCYo>9SF_C}I(tKwso!S{fZYXs7f5m$B{n@wXtISTDvd zvY6qZvbXTD`JDyVeiot4lPw`3oscqSZNnl8vlBZjc%J6JJBm7|r@ygE{R zP8F^!ohMOHiGkM(!69KEH^E;ObDm@~XR|XZZp(N(sHNN3_{*05H!Yzvu)7`}c#1q% zj08{mnEjmY*0ZOf2L>&oqjq;TO&c`=O5XRCu&&xiRQj1JDYe5wP=brphD;y~mA0#V zvv%>^9LIyO)9@QEJgnDRbLfwq@g_9k1X-STlj z{#l1I@t9Ss3+tpN2($)Gj8cbfTDM=Vy@%Rq7OfUws%%>d%~^I8?bsqnM6jXlnCTpj zni5^PrhHIqN=H4pgqmG{M^U~Lj}Pj+qULtmYo&`rxVl@Ghk-diX3ywLa(stFLc%4Z zTtc6XxMat2r`KHxo8!Io1LH({;0nA-zNl?r*5}S@DQb_ss@?sR#iyO_5e_>yMICX* z75fLN7-Vlj!ZCW=<{wW6I(M1^;iRv=*S>R~faW*{fBa3`&j6sa0fT!+_4k6?X2M&n zzTOq1nyV_Wr&z~R;=~B)P*nb7`$za;i}=}YG!x;)CYS6o%Z~Gl0s%L!>K|V#&*(Te zjbz}0`NHq|33)TG|I4=wzE1O+j??3D; z5R)%Ul)EhCS+lfC&(MnL0`qRoPKa6&5|VYNCCNpq*&-MI224Yhu<8f(2n1`R_xpx~ zN$o(@w`gHiaM+0Y(v}jCn+yH(S9MCK%SZRX^TIXlNExdBE1jE3FazN#7Ln1aL{+{I z=UNq)XerGsl^>7l`GwtsxNUKT0}xAQ;>fwh;Sa~~{4q`Zc1U^Ju@IONCawZ39$oWJ z2p}7Ka*QQ#>(Qa;*|@D9XFCR}bSltVEm}pSS8`gapP(L)yM~(V5MCs3XLF@marg!B zf+RRBASyV$P5bC8iy(iSXEn##5cBZ)CS-H!yYx9a~EENyWeMs!zNg+|_&}G}@8QutT<;!YN8{G75m>!d*x8eC$FjT!=n2-;@ zv6%NHabzf+vh9Te*I3q3}QXoET*vYVS$tptfl zUwv(x4mG?L4Myhv8o4^hDhDYrWi3o)sZDq9g1N|so0RUt=VI*>hbKg#2xw*YW`}_m zY}ipMY{}o$+ERgB&1w7k*%y{e9MMd`pg|MCz$c9awCB4AyhzI-gh0g6z&rdl0flf1 z-e^xQ5D6>(yX(x8dbopYFPUKr%&*r&jpF1c^r8K%w~CngNmo(6%Vs+BjIe1-fGtJM z-wi#KRBT+J%7RksI;V6rq_+whFHU~b`d1ezUKyo{44MOLaR z&U4FkPvhttf%LlSIUmI>C91O4 z`3ZHi>awdg5Af(81lGMM#szvnu!$?L;g1Je{9 zi5okHXvlqX3*)7W3ucBDrqy8ybUiolEk>KL8SYXr8|;-^BUyW?gLX3zl_`l?>V#Wm zEE^I6w%e*yD!a$^=pk=Lb$jQiV?A&gTT^^+O@}Le6wI3 zXjj#ZJBwM+PaTeqr_)D>(G&iZv1$9bO&;cOc{*{V~ zW$cyTts|w~11$uq&%?(vv$y9>o6)Pe*Yfskg8`B^utEpNLZ-x^0&#OQ=JES8De zEBpf($*EOlN|tvq&p!;oO@wWoC?I<=?ibaLl+|!o)gf6me^bqDhL(Po+aU#|U8|?V zTp&`#v@8|k7XH$pQsJBxPgwF6Z>K|hF~vqfL)~pAS&zGxF=91e^4Bxat+{q^gG=p% zTEvbsQJ$)|EfBi~cLdWf`(Dd&T*;K!DQftPNkT3kPb;1?Bb>sb_TCYiEJM4ih*frz zqiC7L&$AdZXZyJ7g8pdqg_H#Skw04E6iL5+`yz*_Dff(y4C}SV~h8=P( zJM(l;oD;-bc;UN!d&M-n{&&~+nueiQPMML)XGE0z%>|zfu~XsGHl-kGI8dI0`RQkc zr{3IdCumnYan0I+9(A7AYG-lCQABbmgjwp8ID}yR{dD$NZy1l{uv&ELpr>QxR1s`Z zle5~F4H&7xvRP2A)}mIL7w+-bRDK$eug>S`ru3InQqFzzTN)20cxTJD`e+6>)euDs z7nlkj7Ko_v+a0^1!tKv5)bW?Ok**TFq7y~W{oEvS;Gz6yy4~(!Fqe~GKmY7{uZXHN z%Nv|GZpUt+_(V{kMsiBSNFFQoIJtElglykeEPhZxc0; z1yz>w?A(UFrr|sv+)?a4aus?#eLFxsHhcdIB>$HQ6(k?X_}#0wRD-h=*6-s?4H zmIDF!!B%&$np1YW=$n5(Nkr2Ua@}A?K^i>9-n7F>NpXDkH~^2p_`c}kVOL3=v~+7r zE^K3Xb%;A=vmGyz947`8*RM@eZ-99NWUde7Q<*EYDCwP+p=j?+!B+OMKS zqFRgYFYt8_0_{m+%zR?4Wc|gxnT>=@4|V${_rB!OS~KtK*vwr+g_);`j*&Ts?iD8b?%_(}NFt4cUlsMyl zVM3<*X})PVfqWi2WN>;rB$Bk~#$p;|eMh1zUnBWl^;vhwo{ptoEA`2t`ll5+XNd!L zT0^UJPyGiz0AZm;xGXJM81^0#Jj48wiLBu>4#x{ zE~@xSrVG0R{>tyyhEdN(Wgz?g>+*-tUT9BebamN*q zd-1WL`y#udLPT>~41Ea5*w_e|wR-Wb*u#MKA1KN}N02XX-X6w}ZW$Yt~Ns zzjhvs_1j4{jSY44PK*fpo3h*iG4p`~V* zh4me;2U)eEQ#Q8=-g2Ruccn^~li?cR=mA~Zv-BZR64b3)zxv}ay}2nt;}_x$t3hW&!l{5!5Wu9#6fz5-9Gru_DxRC>@ru zQ?Baj@{#!`V2GJ>#F|~e52%+E*Gs*N1y_tYj>PS_d{A=f3eKQU5*3-)GaLW>E891U z)Mo_s_sG5J>T1q2I;t;nY{VIQpEOV@*@m+`_;!ObtLw-!a~CfdI@Ow3jj^E|;Yg{f zU|66y{oSL>ZFoC{c+#(PA>jD$1~}fhKQ!gU?C&W!S)vLK$rMXpGDkGuCkMG_PcnPdS#v3c=nErCc<{N)EYqoK&h)>kV)aG>iQg8Kuaj>4 zqDdCtGM>#yxu+b!IMcym(*t;$aK#Sg?C><++I~gSk2dN224#Nww^9M`#3RYX)Wcm0 zL{XK)gc|0wS;|1)U^&~Q=pMyJr>x`a55LrztpFvtDwWU$5c69nP97f)WjGP;akL2$rJm!_yOyti708ahzkG2$=)Hz@ zZMvH|-pK4j&XX08v6+S8X~~}rs#9NB$~$p%r%KLKw65f@yR~A*rGPC zvQ^>^d({&MY%yH}H(2|U9m~`hb z@&(K463VKo6D?HH0osegzAvF_3#NAO*$T_+y)RXW#!oUiR>Df`+Z^g2s21jhtL~u2 zGA$*)at9}d_h&b`hpkdkPkHIlrr;SU!d?QaDo;FfcttXnh54CbfbY{LO&4;ss}1v6 ze#Qh%`fVNA+nSiGDNTPa?SNKSt|1uHz%X}}qVr3AP?dC*${zZcvw50#vspB@7%bge zJEj3aBaPi_A7v}6O||SjY7k0yS)<23U%wWg9vQ7#$AdvLbwBaEX=}sHD`Gi#G8O%- znaINRFxqNO(JbyC06{bTTTO`WCo22^F*wATjp%^U8`C6~)blrLhmKe%$fjWe6(ykj zZKS*QY?jq_)cU3)u#92p)}f~0w?B~0ez_kT)4+=RGRI-dilYc}7X%jFX8^6HG}}UY zfibra>MWGlq8o9F9RMTEI1|tZ!)x@eVmU}d!JT|K`{{N-mi57}-!#*d(0$ct%1@*E zjm)O=>5a+1y0aFk=LI=%_fau2In}(?b1JKX%`9x?X&{VmblSuL%`|=mYJg;j1NA_n zcgeWI)>HTQ3B{Y7#b(Pf-W*_PKa;3GQQpG#D_~~q=cc9jRM41b(>$?S$R$VR)sUUE znquB6m4`*u@pU3JJ6YWRj|aF<(frR;6t+{ioyAgwtW!^X z^?x_WU*DaSIgJT(kEz4qK}fuw2?&_$=leFAt^fKLr`T}MP{k4vI?2@d;VknBO9g!P zPrq8*G9mX4e$VyFJ!;c`dCZrw(bvkokGDpadqYTBI6Mp;S(%2RrS6xf<@Thb$^HkX z@L0A0wl%W+jtg|_&c%I5l082zu8c%TDEhJ>i-p__Kq3%@Iq1sM7b8E3k|@24Ht@bL z2`E)GfR??~WIBJD$acF2`wB0_*27M|I=FA-lv9av7vO=Ihh9$mI8G~NxN7GrD!MTr z$6eZAZ1|AlkgGfWVZ1u5X=P|5sO*Q-5Wv}?Pwy}ahzmw^;PBGJ5Pt+gzt^X;{fq3a z8iV#l_n1V>*!$!=M?6@O>45OpI^cT1kKGG3TYN zl=n8t>IH}`*EYkA5c$c5a6&f#P)WO(F{7x9vbQX4r^MF4l~;#SR(@n8aaZxYbC`W# zTDWhjYGAsp-@r50TE6JEET_t1wBGm_*Vlhvvs3Up`wiOKBFD+#EVrAxa>4OS$H;bj zw=v@83RHC0t^fzDydYV^M6q$0zn%$_hdb*9E!oy_OVqL#sB*zyJ>*u4kWGqRDsNlr zG;bA7qt0f%rCzO!m*k>c>82r&Xed`g@>=W5Bk5do-klHYViQ}-DSVelk*i~cLLvAiM`9a)okt@0s`vI z-jm@mv@*FSWCGW9kEFX`dWKnK&Mwi7nMM?g?COLrK%b>`;F&w{wlhoXX{uKq4pGwj zQf^g#*s{NOg>nAtc4y^zyI#tArCftVi^$`cIjGxwQ41iZQ3z7jtpCAX@~(#xYMfNn zE@0w+No_Ls6(yV1d#4BPmrnBBS)9~Xs9K{dcu67Ed}ABjM8C}PNId%UrEd&xoPO?% zpaKk&W4b){nQE%Fj=p8uxs1Bf2#7bI{JxT3<;XZVMRs$=De))w9Ze~FvZ)x%55$J+ ztxWx>hjm`GoH%JeWe2A+c1-dF z%aKR(Z8#WCk8vlkwvTu8+I2uo1fa%u7`Xzed_{t~ie>o8)D@CWKtq##iU4PZtjK!g z0d2klOx$FvLfsw|kk_uNI`DZ>17sJ-IJ&k6W+@$e#grX9&1qQSyAU3+y~`}~5@7v$ zh|0fL8&wX49}VNQlW{sH#Noi7jdZFAjv3=;eh z^(QbSg6GaJ40h7*rGXGTbM=3B1hAm=O@ZSt_lY_*Ue8imO6j_mQ!8K2o_L&5irJFX9ccGwV*aWT?Om@mS3#{{Ryko0Pe-`yr@F0shl(@4UCF(DBKMh((6< z{%{pmun8Ex`VW9oY-HiqdaCftfmgu&>vUa0<`0^@XSOaf>N>MnFrO*u-SPyo@$uV( zcWNkqWFY>mraa|f?V2#jE7X4G7CEL^~6+|-)%HF&D`MbMb6b(#|sh+-DQEZ zr$tq1&bIwmuo;6uT^j!_1;iiKU!?nHihpt~)mZ)k!Xl5yYkJSgE@=Zb`5aSB^$ZJ+ zC9w0Qb`#pXxw_0d-<9e)=mf*k|pl_~b;KI)qErh1&b+wge%gCban2;jK@sbZct9zq^N z6u#*i1hL*fla{yJySE_He*d#og@(zf#3*on0I$M3e#q|w)!RjIodgN?Do3`NN(y)+ z1aVGPc79HHx1+<$ujWnrs!C^HYf1^b!)=6}rZUo=8~nX5jqhFx|K#|Db zH+a9xwF@H@-H&&zvfG}stB3Y1B9}-0E6-OwH;S}0p965>0m(ckI&tDJ@B7Z1{~m~P zgYllL>phVtM{bAV;m$DG-9KN1PABO=dMlNG&3u?FJA8dnqxjL=Urxj`r5*s$7Pdr! zUaRPK-?YEvp3t{yKJk4aEixolsDeWJR03RkZ}7r#@C*o zG%2m*g(5bz&ebaElDW^O|a^@{TbY1~WdM*0L`pc3MWt z`^+d|!}r0N3V$*OT8r=W?4M|Bd#n!coB-p;L}A7mwYrb~zNM<%2G;UF1sDRD?bHXp zACwURQwCMb+q!@1$4-h3zbe#K{HX^5juTD(VuJWD{R4b`v}cm8YUkJ5HE0w1#ccq=ZwcT?McY6g<5rI2>|96a+r z?faipHydjQhyO&~&CJ)^+S&c?Ih@_^sJl8F2XAXP`~NfsczWC0dEOB&_Ca^83S!9r zM_Rc#yWg=0A6t8Ods{zW1@Sw(*jl-Ic(_j_mosbanmd?9FgCCQB^W%x`M@~UIfzdos3_^bgbjW3_h=cpR6bG(S=uf zo1EoSVXv_#9%oj1wDjK|q^~JVe7x5aPulygBdjU7B`;Vv;4Nqpqwo7q#5w&H zccS{M7EwjsOzoM8=QR?+S69KBFSVv?JjQ-fx8Ag0)Ku9THg_$+ngR9DiX|oNDz5(l z^;_j$42=DV-5NvJbOu@OiosPI>Z0!3fl=B^c-HGcq*rxP4aWj~ar2BtadM1>*eMy~5q(>BcU)L@r0Vn?)5Rc*_wU=ZTnY$7L#EZ{y2*Kdkad zXC2M}qNR&bpQY9h?bUbmve~RpcB6oME?|I+wq5jsPy|ii?nyKcm<^s#0w8K|Ft|oQ zkf}Yef#se^Cds&v*fS@Juh@=Vr9WdNiHlEOu=!umDqAZb!n-~5R51@c$!8tt+dOR~LCZ|kER zKsBg3>a2{#&{>e7cXnREbho4^bi1aWmev@!oU8|rQa34iD3+xiakJ}`h59w#KcKE& z&d;Yh{ryLVE!kkbh4LZ-Bs|8A;lLd?hvU0E3w?3g0o+#6a$rb0>cc7}wB0GmJ0NJ# z39oG`I$j6_q!O$qjEYsO^j45|9HQv;pbmU?I6n_SQ4gi4?UE!i|GHfQ-$y7L^tO~R zeTHvylw}ZGPOjGs6=id-Db3oqmpe*DB&qpoO%=5$gdGWhAWRo5U5`xO90+o)e!|4D z!5I}B`h4K!r^n3qNTVP1Zo$>+N{Q&nsbXkx*gPpl2MnKw+^YS`Cdz>Em}%XUtpi4lda4bq)9`gOD@YfD2LA+`YkUPw7y{ZDC z`qd@J1%cy8fM-Aj00k7~dX8!Et&43QI|^2Zk3WilyN!g{Twa(7GCV7_C^Df4_!3=_ z)-wIpfW|1)xP7!KlT}_k7}Mi4=fxL$jolx6Gp?uSPIod<&=&k>inuA)-IG zxA~x5p_ug}UDN;*H7F&#DkY5|L+v_{x^xkq^3(Y>oXRM^J1GPzul5jS5RrJ zWa2|p?`+(Uv_hn;NRFoF?#QRhBmZ|ASfy9&rENOple=HX;?|6HnmA3De*U;_OVWEf z5k~%5)+OeO$&=Af{BP)?h*|H3z`q`VjD8i(jeH;X1*(Gr^Mwfyk^!#$04#j_=Gr4h zxz@N=W(WphJY#(G$5A6*qQ8)Xll`N2@44{0pVzYu9*y!ZIib?mvMY1~BBBeAah=Wa zbDXn8sRf9`BE?{*VWMU8m$ivc?G*CqTd8LL&fIS?Y}NI!_+4gDd0uJKtG5=hhvSW3 z9A}*DeI4~PNA#`qxr8CefI#wWUKF{PJ@D-@?vnH1*0lb!T$7(9Sfz^-*Z2dnIQ=Sz zR^%##kpK;b6$d}u(E@NhuZu~+epGv$0HNkAx#!4SPcbw178QERYdF8^EWd|M#vgyh zQ1tfi+0)xV>kTzVU#1Uliu&0ER!j;2?R6RPqU47<7R-Bz02ojjJH2gK+3hrRHYzNu zZHv>htWu4S+txPb$nF=WQ|8D*1vmH2kt8RvI>dd+d-v!a!%Y6VpZrAYzsEp$F|OIQlH$W(HkwlwlCt@(+atJA;onxZOISo^K(K+ zomz^m1-w^&O*sM6C|v+ff`bN;A=HN(4l`U8Y^eQCb|m;d`WtpFuK|%97XC-$Pynin!DVg?_(`bPD%$%5x+rzf~~iX8xM# zPv`5qv|Km35thB;cy)9C0Y0}p1ihaNIFq(0l4mWy!Cmp@Vq&f1Mx0#P8P>e9T$b0) z;UXoE8u^}Zdc8KrMEb#9Ie1!qlUF%p5swwwCkHNKR4wxtq}L_NeUCHJ?m{I5K-bV@ zG|iAMuX|Ztf%{r-r$h;~+%Tiq+(GYv6S>-=LtnG?j+*81~RI#!_kICPp2FNTQTjzQ9LR#S=P6C@hF#_^_12w~Lv!#jidK zGhb>vxHzf%2PJB}?(dKq2-wB@n}3nvl7Fe^<(HFL=0&Nu0zmsdSw}lka*H7a0O>W1 z_AsoSkRZM-B;}r|tB(cEB*2vnXMeqce2NYI6Ot`lA6w0lQd1kxmX@Z))ZGW>P53pn zN|ltz#<6``eNCK{CgCm5fE9KyX zF)SMNs?^wJYME>*r@x?BTRU3ZW0C0PE1p`drmdAaJVlkGy3Sfsf<9b9AHHB7m1hK0 z^PYciNwWQ4epB$?Ks=e+QT=d&E``Lb(yA{XbhmKUu2i(&m?w%E75%WyVL51tm}6#j z%vHNrf8BlF8e2ih9`$-5z?}V&rb_JMg#;BN2vs>wO%zW1O7ejzY~aTSOVS#$zNfXH zip8#}lQqMR;&wtp^dz?mXa>ttS1f!*d#O%3_sLUf@rzY;OluUJ`>a`S)^r_d-}oCL zWTolf@YDeOH^jPMmG426wV#K(t`Rh0bl|?f+WGTeJEwTkjBrLErYWj%3g{oK<|>K# z#fC0FR3^jurvUhOt#5}%W+?}*x^FngE6c#(Bp?JnG--nbo>)Jvy{^~IT+2>J*c}{h zu2#G{)V+hw{CFXaIW$fALXN*j*#<$KdeZQ@w*%M=yGnrII%h5WLB;8dL#=%IDLl+) zw zV->P177jhF@RieX0N@0%o}&A}OD($Y)Rbi0;vMXR=H^$atOLV`T_ufxw{2~riS~xA zN>+7O7iT`besZYmL9O?@*w1{*(Nr%HXUirv{^X?g4?S&rv8$;79E`eiQT}pJAfgw` zUQz^;g;NHY)oZF_)bXEe4u_KtPOiS)D(PxlE~n7u?kO+Z2?GUB;kOs!JDlm!)uy7{ zn0fJiih@A5mnIC39G^34Vhz6fr9z-X^TdKjsD4qBWi>L1IIGzRsG=4M3P$5=jEEr! z>0sceOkna}e%eglLlDjFg4LbIzNRANB2Q$wBA$X*-T8cdAA?H&~@{;?E zAGpGp3o{;G#^3->DpB=8hHvtuo__9}*LajnVQ&)OgM+z4ruaCx7}^&C{LE^>58Z#U z0H7zYqAY$XO4-IB;*#2jU>;>@@u2kr%Fy*hKD5#Ks5<1gbC@L`G!OK!xrJ`08Z8E) z5I@Zm(|4@h^{3T;pKv;n=9A+~vIJ**Kd%S}h)H2!66@#B`2bp!r;}%k!XLSeXOyX% zUkb=ktQI_wJjB4%J3a_8B5PXR#Z);*H5mPP9;Lma1gum*b}|)II;z>j#Kf{LjHnum z9)S9T@HRuOilC|}08Rle_1`bpiBNrAFrzxA>8T&oQdset!^3jR|eilhhYD}#5Ea-Mp-bp3o(?zXmXGRWo za;GPg@o7HBw60)g*H;LlA(E#A1;`kkl*v?C=z4@sF%8|8BD^G4+onGnYq!Whh~O^Z zXtgZ=GacA3l(3qHu3NL$bV=*#A#LgtjO1L zNmgS_URU9B@B^x)D7Z?wEf6_ua!JYOj6vhD5kaY`a#ak-@tfbw@w`d}oMd;D394LB zh9vbCR82gTG`S&O_5t>r(w2^3Nq(PpZ3QJ!jR2&I1R-S2_A(p4exr+EOrcx*QzRa3 za2KSW@*@>|xKA~ef%^L@@o_Pz4XF&EAaUXd01kXG+mZJ5zBW5YZ|ZsU$^@?RO$Y(2 zFhiWGaBLwvBZG$xF>qSLJV?>j33#p9Thzjy-k5kqNm^QiA__UO^0KdRo+kC=gr2#) zJp?Oz5oGDk*1n;s3x-fu%Ad6D5yz;GExusw)vFa9&MJrEqGwbEo}ycn{d4IxBXIcR zCDHCFozEhA#w?n%ofn-L&6fG-;{IyPTvQ#~>5!5Bh)4+*ZY$yScZ=(;`(md{J0^tP z$|jjyRdeTgh8*GDYk%}uUm(~Gv0)bRl94z*^^DBia+m6}_z201^8~$@J9IabON0B& zj#ehO*xjqMlU=>)EazKp__k(6&Ap%AtM7jD$M>y&1{>-Xs|92|-Y{32$M&IQWyw|I z?`!1|&;C?evxvan<~UEWJ)@`T%g5ey{=L3>{fQ>!7B0XSV(<~NVTGw7K7djrR-|iF zNeAlbYutaNoJvCmQ&Onk$4PmV3*B9CC-HnCO;|{g#So9ipg5k7?kkgSVYJQAgcA!s zdrwc~4~e`@pRv*ZMOUAJ$$6HPZhm`R4~+eN@BqxvkeS?|m+i+r^f#)fp%D%S;85al zG*C9+02p%~egwYCMMsSH5UO}yeUH$(3D;a^h$9+lx9?w^9w?)MsIPG;#Uk3vy1MVB zTNj?Q#d)y(xj6nclwms+$EoHbgH_&cW4E-$*Q-eG0n6m+H9kh}2cM=!XJT#+T0@0UOE!AVZt- z`&6@yfjHI&y?U1efAIAui+|AlqZ8k-tjF_*JP}xuDP-h#tJjHWXHGE1MG_0BOng^6 zu)YLIv8P05aOP^QvyQc&CDaMA%mho>j!&}0u57$LA2G^k3gX?Aki=ztfmT}zNKCB2 zVkg)F{iCeXKF+X(b)Bv}fda~ohsw+mGd{Z#Rv*5u602resZFk^|-uA$0iux4tSinfDZ|M757_?sv&5b=((yw=By zmD8Q@l0=^RFXq;x_5(2dk)5%UXNy9fsh1i?Ftgj!o4zU^%%XI&ktuqql)Hwzw{e-k z-TD#I_&9YD^bc-ib#g(|a^_60zY6ND#IaIddudS-JO&t-F9Vx}5_$DTB11SA?Arv4 zGy7ENaY!hwOrO^dB*MHMW=UAohnq3zI)im>(4A67F)*enloEJ?qVWOHYXZpCelMo< zfdGhQ=SiCYzO5%DxiT9M1+gZmA~6|rJ=7(*!F<%ao$fdC!zGjShG;Q7y{FmGiKk*e zfYJ(B{<*co+gvlxOo3o;h-rn#i>+?Ie5s+wI~C44i*%zza}`*g zqz97XaHtmzABQjOjzOVvI#9B@f=G;~ftnEsfo8Yn_l;GC+o3eCbZfAg*|ra-$;R#C zO(CP0hN~}j*UkM6_X)U3Z3%SMwc7`uAr3y|)j-jhcFpl{N;Bd|ghD=S-F=CSaj1kt zgu-Jb(MI?vc5_=uD1zU@&~Ws@dmPm$8NUWal7XEsvM=tl14}M%VFQxQ9p8csxz-0t z-?iN%v2)d|xJgw740TaB@vr9(2F-h<7+G2(i6Pk#f%gLzH?9!roYxPBM+`X#NzWD? zis^ETT)5gh(=_1C#bca&fq;1)&8JzrL1}vjYu>+G6PZ+od`kVc zK>Ao-mjA8T`=XcBp7N=tIoVJF3}#=$1}F!Ekkm?R@yLmF^N+(~3L3jVnyeE-{%i{= zx6G(q$3HVlcm6fm7h%^!?|SvYRpoI*aa=gg4+hZlRb@bz1;r7GVzqI?Y|py^1PeOT zv6Ys~{>|f&a@H<&eS1vviE+n%Z{OD6q%r268hr~QO(T4p$GyfG3~mCIeq$GWAgQ)v~})WK;GovP*EKhQ7G=em)7bzI5}ily?a;&Q`Vb5G=B=; zS-*04&nqfg*fCIjmK9Bqs3-dfowVi4GwvByoc`IpaVoO%_9oXs9Ww1FvYvpw{T%$p zxsr+>Su!oM3i1b8daM&keE1$FK~LR~ z!O38u_jbIXr82Gz4Us8NNV~`CvK7&iNND8ovB0$Cyt19<-wNSE0`mHH-0u(&wiO=Zs1D1FmLZO+_Vh9l( zHLGRb{3<-%*7Zv}F8!t9ml|jO`Uv_6_aTeHumWsAJVB3H}oC016&ak4N!JfnQ;S8S;;IrTQY#UmDIX)>L)mwC;uQM zeCeA~pIjqQ9RG&_mruF1Aid&iQ?sw#jq-f2rF5a(olCyzz+lQCAB5!{d9L3G$9W`= zpkMmyZ_@e01oX!e;sAOac>S_NpA>z~*eoBo2bX*QioH+Px#)v8zk8Y^z@rm-+s8{DwBq(2F4BCOfGrSYo8JOmrQp*|N9gyhpMFkVLr3>B7} zc~!{Hv9zm`fEY;13_?=dlhyPWwRQyvd%3meP2x_s;+(Rb zIS|&E>-WrhY4qkP>q7GnDEswuo@zpE!VW08V{y zkJ%_aZI=9`MQ9JFCNFog)&>9qAgS^_y1!CU;SdFjfrJ-`OF0K-l$TjHPuJ!_9`4`n zJlsS%E@h7PW0vpze9wz{qpQ_QuF<8x_Cf{q+1;X2Lr`fH%EcS!`8Xh|9#xP{!^E)Y zKepH-qi|u%R^mrd;xei&c&o!v>HvmZcTm+lhTzV#($zP*nN%hqQ&TA*j+eBZ9?EeY zU{jjGig0*rf&Y=&C52n_4kzRK9KJtG*O_TkIoH~UNP8+Fr%{=aCUHr4a3B>NjR(Ma zs7wmL)Mg)|B|@Y(OnzU6yhvG2cI8{|7SUki4=zKYC9 zPA6OZXNAS8Sd;8eujq7Pcihk0=6C=6Lu#m>O2n7eYu?Ls^({_hBry&-e9fg2T*lV- zo4YFLWBiY`XN7If&!=qZ?z35KFOapq;8B4QmkM!36MX(br6Vk)LtC`6;V(PiR&kQ-%7!EG zmwdsqwotGOv0-}rv2C&&ry64|@J^M;pgT(o4SBIodEG&6kbz2gNGKD=*aQ!(b+^jN}6UFI7t->{an9Z&a3++)4?{F9rh%h6WuA$SN%(Kwu(EDZ5%lszIMCD3e=ms+Ghr;@nwpm)Er@aJUt53~AAE^Bhlk zE^W~y+lRd_C7VT+LU#;$BRnu|f5t>I(t=jNCV>vEIgS`$PqMdU+~E-5tjru$7UIGB!&NDs{%X1porC z0AY5dF2|o}y{DA3_@i9NX znb#ocw_SZWXnA*rl<4z>spnQ8_S4YV43 zCF(qu>o%}oPZzR44bG5tCL9onb~peU2Sws;mOsq{Yl@_VlWx(Zp?$UVGlwvTG9rVO z4{=PwIN?00wnNEZmaO5Q@i8w;kd7=7f28L;LFjv)tKL^Kj)rt|YfE$yW(PFcxz0H3 z@B%a#NiRzGHBZ^=!G?eBTX~YgNZFj1Bss*YD?O9viqdwv^8#FQ^U-d>>ep!7q$fJ z&3cety&K+gXc?({a;(h!0KvqbKzRxTxPIDr_Z`Nxv|?b4KWf8Bru-Yj@!eGFoyV=a3SG5wLp(443CWq%Do@!G;doOo2YTe> zC4#T% zrUJc*-_2wt4RtOoxTG6p^+?*R1d(euAlwMo1k4=3BD$gIM06G~7=hSZR^9=4ZS2{Us_F za&VpQv2Cl3((WNP@D-U;T2|x+YkB|(=nEt5-C9linewl7>39BlrvkHRmeEu(zI}(4 zy0%P>u-}hQTn#8rB-L1dErdo|kjb+wPqnxGq)=pl&6Gu0Qh}S^jxAV)9HJ?rlwBTT z5wSVuq|`@~5eCp4^JUUiG6S2Fv9$@s^zjowCqI5_tn(20PVLP!dqb&MG2vz3CAdSv z614WA%Um^tbbt2A!D6uCpbytwa+ilEPz#|8B`1+!owdeaICY)D6A!c{B3mQ<*)sn_ zeDGB|m^;FGjWB<+OMGg;U~3c}#|}YON#Sld z=^Z|FOZgy24m6^lN*er)sO88Lf?2LF^hH0o34UL2*sc3jN}ZfK6z*?RZ19quHB4}* zktkEuBKs-@HzTkG3eH8KNO9G4m~c-$?=tuG2Z|uDy`QSwU16s?a=0K z9r4WipRN{MRdE^S@|S_;k<~@C$ANq(r!|mlTCle5;{sK#sJ&!HPoU&oH_T;nTCBY- z`BSl^%{R{`&4N?Mxx67_Q+JgON#oLAnluP&fJ6l!j$~_o4$r3jx=48+lFhmTws|!k zOpZ5&TZ&~`6)EEM66`u7P`Sq=J|Y&1fPrX6;Up^BnPCxXf-=G_{}fUhx_^4UsDHOV z*b7TT;St7^b`s$^;tw-C*R3s+=HWI?2gfA{bPsu&h$-?hmk>T3!BDf^D)0NS;*1bC zJrbkj96Ddzl(a06O|3E{XL*htP0Py>yE!8*?9-43MbX2I_n0TAb9T9cQ3(Mp4R=Q?km*lp}0SPhmtdr@F=LD>k{=OHFi|kHJUVE1ifKeN=U+;bP=l9?8ZkQAyC_ zDG;?;I<snGRH?W<&tufR8d%D=9OSebBKQX^}NYpz_rsJXc8BRraMmX9DOInkWG+CHNn<3cFG@4VEV)PQWIgDW_g^tzHWC~zHao}D6UUNPl$gf zpYp*nn=TUzy-uc~$M3KnF*MG-pO)Xlu*F0%q+RD;FVOb8Vm@Q(1XucAW3LN4Gh~T8Eiq2Un z2*Il7@3+Y}VdaX4>jz=C(Z6u+)}(2fH@k786;iKT&ezyB3CB?fv!{BH{V^;yelSjW z+r6DozSTgWqWeC2H%v!yWoK;7PX!z(m(Z`VWbp?*XyI73sOFWo@17w-g*kG-Q(q0r zU>ToSC`+uZ?hj6miEH?$UZ_X*ELs>(PTv*xhw}>gzoL^2o$Ma+Hu7VZzYF%(kHn)s zGmp;asI21F&i^2xFh1y_6a|cP9y%DBuy?${c0r%GMwKtZ0VpIFAcp{axI>Fh(nU;@ zF~bCxU~X4xd2~VeXz1Ld_024L93$pf$=n(4)nf<;8kg5Ggk^$^iU5Uw*{8g`ESVjg zP(Hom2UR-%g?!N|K*W6A{o8~^nnPXNoE`Q;i{nl$Z;f2$t)U&n?-kV$3Uw`+@~awhKd9|QSZh-oML`JpNW z-{=0wF<+f8B!EG93GPoPh1bHm2ZqInj>FvgTww?(addbROsfw9B{CR9n>@@RWzRi< zHQptDJT6IpRfAZC zjFs7=17-uT_ZI}ik@AX1%n z)tK0hhld)w6?wqY{O4++GKSH1OvJ~-E6fu@yQ6m>qX6-L#~}8xf$>3_Sc^In8U%j@ zymhBla_B8k`3U_om-Os5OF0{D^C*H-x4reMxvyDMfY@IdvEP0)yOnnnb|tey!Ka1K zK-m5nC7h{=pOn=JL4yFaz<&`H9sr6D0`4tRSOv@aD$*BBmqb_ksX%&~KT&`>`6CHx?f~^L723kSculq@|kzB~bSbPK}=jmymP3 z=xR(v8*1Jhus%lvfI0$@hXOZvtW9RL1814EjAFT`7fC4Ts)V%eDskY8#jKbXF*01S z77ao-W3hFGTot~%j@&r4!S}Eni`dzXj{UW#v&2b81zL|gebD}#Eh2x?7W(JEUYZ~oIvARvC%KqxZM9xeAIx>I6Fy~os`bz zkn_Dq^!%cI9Z&29#xxKlq`E(d{`Mrk*-`#S6zt8L@)G}v=x3`B9)vozHuK-!A)W=e zEg$+@<&MAY^{9#h@%ZD>T}bk~XsT^di)&F+P8?c{FMRkub1a5GUd!a@R0c0)fP|_L zT;vPHGy-|N;p5RXx4!YEs$@YhH#nCI&ty8sZ1Os)OH#~$Df`%YyJ)3dKM8TZ&kI+Qkb7mqAKJa@kWc>X&uh&V(Y{&i7_D1Dp z#%JLBfTOY=ulu)hKNA{f06K>|@g`2k>Exq9sP`OE%(aW*zf@Uc!8H~dM*OTCL&BaS zu7Rs5h>p#JnJ$hPYTlj4N#^K(39;KOeBy;kTPR!PgFc;Z4j$=d7(SE)%twQ#_x7bt zNj+$gi;#s*{nn9W5PKcyTfzD7H_>~p_NW@i(dgb=+pXunoAK683m``sY$b3cPNk)B zJ>voB-j8EEt?noRk~mp9_f1l%@fj<*^XJu6rsAe6qmd9G=xmG=^$iQsT@^d!0HH0c}zt9EV0MLF*?sR)%&`dKQ% z8)DIQd@bg{*6al#p4U3v!9j)-1Ck2LtDz9$51P&A^mNu4Uf)4)8R&PO7~x+ST-cDA zZ5^ESg7jn%^cogvab)tKcjG;hp1f^pDIM4Vb#lS8*Blfrd5(_G#4G>O*8DnWR3#C8 z@aC~e{)N?$f@D2mh1LDe=x@+~?Gy2!8}f#v_K~DdoaicI3US8D!J)XN+TEmZ;Czw= zy(SZ0@?BO_g)@Zb594b*?!Rj^y)UYYHZ*#%WU=S1oPy4=CcjQ!#8AGJepUs#i<`bz z){Bgn)FS4Ae!`{>7GLJGBTgpse~5A*6(`k)#dM1hJ7<@oCCRY_AEU3q*~RG-UH?+k ztF;z>F9Kraobe==##l>VTRz~o|WxU4JspE>4I1H zcD_4Fi66aa7>Q6**FA8l)3P;=Tqp0qUG(otyb&a2{Q(2`?Gxt++1srQqi<^=Fldjd zg6a)DQthSzot@E>f@(FjdCZmAnta_vc%ARknb@~4o%wCZUG?@&#dr*#gUs;;L8tuZ zq7yCiUI0z-uZ>H1H@C9jgLs6z<)aYUepICagooRE^71c23q;fMs-Nf4H@*R? zuGAApk??JG;9@&KYm~v@m7||Gru>2Nv|25FTMRs&BRx3p|N_3C2+!YrA-{4ZJ+F)iykA2CXbB%-pa9oIL zB2cgn;&ms7ACNNYe7;=UWFl$Ymx6FVB+z<4xU<)Rp9ZQ0%%|usP+>P|X&=?>DsR^~ z9ZL4iQ)tYb3%an}QP_OBrpyi@LJtM3N_!U+LoW@TiG5SYY$rQ&SueWtlJa;8+*HXd&Wr^A!>Lo5znLF-RTno>@W zoS1E`+%F&5ek4nyEd(RW^zgX0>sHz`KA{dhZi62_fbB_!ze(`E2I4@?D_@)-2CqtaUh^~W^K9$jMlY$oP%=|Zex z&A67#vDN4G5v1AL@PT2Zi=6U(Fe5G?68V(OJJ@@zrqTIb&2nyDf$H4!hB5(c6FE?3Ozt+%wKV<)rwDq07mH42ysqk0WV7H-SEf-2^d1Rd15i2%8 zeQ)6=vQSlPYyX>|_F2~-14zU!h=5n)NuuuZS|Z?sFLR$=>OtbA5GgJYIjgqqe7b*d0$91jasH&bRCy{riPz*BRn1p0+|HuzAb z`onwHWiC)$9!^#UGD(t=`?93Lm@wjz?m0Fmqqi^Ab8G{n&Ur;rg2~CoZIa$)-i?~~ zxQkkX7HiQs_NAxe1Q>5NMySxmoRfs`-DyPB$~1K=f00r9(9vvx`q=yQEXBg7dgV{l{sy%pokxS&|==M^RvARt6{YJyQ1=Yt4+X^yDr97A#A-<>3-MR zCEuBq`O0+IZ{>buEh3^@W+-s-8|H?GM-1F^>zU>Y5u@Iq1Qr!yG4(R{-Wd~~T}OUN zQ|ZCH5cWp?e%WV$N=?kBe`tl+oTJmNVX?67q_#fFva2ENDJ)+zy781qPN*Y!Q&1Wt z0wRt167osE*9o@1rdEkBGCT7DGdQ^R7vi^DUd?h?g)iWM>os^rb=%V$7*R}OcDI=p z9)6#;*#HB$hwY2xxjm)?}(j49p z$-F$Vr)tJ~f3vjgttLWt0U}%_W~S_M1lD?Qt$je=N5H%M2N)UDq9;Az$$Kh@*uCcM zL(o+JsxnYwR|Z42PcD2_K5P>Yb*G}xIEaF5WgTuv!xh;*>4VAHdIZumBs6+lMpY>> z?#;l!M5SWdya-Qyzz+xa-BZ(_LD(uOs-ErjB9oL%{)VE*#mfQQ9 zx|Q95MMY2*MTk=@QznOwO7@sjC*lrjqNF;B3or1!4lVglLZkPRGMP1IuaK1mc00aB z@k=w@spaO)14ndr3`y?NYk3sEabKLXx*D#Bs=hyfhR1%s>+^(5ejBLL;|t^1KgJq`Cgc@R8nL0 zD!h?Umu2#rsw6zcWRa!-&%x%KhIAhvQhyk0FF$`B_}^DxH~EX zQn?hRmD9re=}o@*0)lc<0;S^ksP%9qQz|_E#LXk%jtgz5DtI4xVdg+8 znYe2lQ#@1x5?*Bj*wK`5Z+n>KJ`a*Eg&?~6<0n>y56z7fbzQ{?U$Itv6ZdG$9D6E^JL|?qOLduh|DOMpsbbMwQmTi%-C`#^qrjuW*Av=dp4~{?-1Wju!;NO=c51FH=z?g0OJ##UZkg>}b z6QVGp6=s0X&vsnDJ$FwH35)fVe+#k@Ic3qkmh0Pk+Je3I`N)*3-7mn=sB&VhLDgUKfET^Ubb;=q zwXclj;s4%6O>JR^8_!D7 zU0i_6GvuiEBo z&>>bUu&aXAs3{~P9v8~%!D{wB0Z46Nu(5!5_>Ep3-+O7+?OhE5fk^E@3!5>IhuaCx z`QaE`)@`vvX_)_j{JVt6ktePzb1&c$u^$utVh2~3$kz#Sg6#Ml!r?f3u{*WfB4>Of%a#2Z^lybzSx9hQj~=wV_q!cR}eQ0hPi(KgUhsh?o1dCA5G#A0mjY zP&*RZfq{+^6=6_d!8!*v9lb}Ifn-->*Y)S?SdKUo-0(Oep>xVljC3&$cL@9!#%Hm+ z_xMWJKRy&5a5>1#*DxKpTW6TQ20%Au^A#~q{y)0ZM;QjyOc7|nP8s=sBFG$Ym;mX- zqWhk@kLwS%B8P%OcEGrYE;u7A*d7&H|5pgs!@6O2G0g<_0hBMN_+lW%MUZCP36WMr zb=%hI_4QF|lARvcYfxeIt`Tt{!=n*PZ-X)p`0`Kr0hp^8~zNufziL0+s*Wne;~Xd%)Nq9J>X4bWMF)o z{OkT&go~k=6_;E$+- zYCgOF;KrKC&Hi^Gzh6@S>jo|fqaTOU0tOYH6lJgL!4PV+RR6jxGzUoYlyUcgLE{iO zuSFl?zU)!y(!xP#v3uVE`)Pf~Zg=lk#m5CAY3 zG!cAZ<*<=X0X?-)^b7!_3aJX~iVTm_A8e#DfJsDj-ohNj4P^CK`;5e+QM7+Vi&%Lbz0>IGrwt@*lAq#(q}8mEZUr5dbkT z-2n+c+{_lc3|*uTe{_9yzz80N$WbAs;|Ceq3Ca1y;+ba=qQ$BZ@*Yr#2f#2G00ant z7zK=D+cPgVfMcLz*Z?M!FyvCWr%I#jo10>$FZB zt%Qt$@VY!nPR4%x&Djd{I3=3V5`Isr9VwltwH!ViQsCS)yvHlPYG@@Z5UC=gao zLsc;5faMGzfU64O;l5Ka95?HNxZTdy^S>V3z@XHsK_DHs%X4CG&75^XP^AH7$ah>U zlt`C{YW}10$PB9kTY1kGOyD}MLwKq(L4fSS00YDY{O6wOGMAl1H$yOB?<8ajlc`T8 zV7@uZB3%`xF}n9o7>2mqeDu(0(lds?%68dy!iv;3+{smJfZydYQ56e7C0e8(atR<9 zK!FS{27`SAZm4X*oVf5sRhANS2S&0mcn_mPF`ACHh$-CCM{jwt*kDSH(1`T-!5me3 z9VLe~8}#w@n|F9bCNN+|K^<(fsPj99 zr^VPk)TSkhGD%RU?18`sXJM9XVU)Wg0pPrCRXplrk!FUq)F6R;J_Cc8h=E^{-D+@Q z??E0w;l0j>O7OtebTYPM<$$paHeLkbJ^oZfl7s*t0gMKO69p21AQ%$x9KIVAI2>;t z6-E9xMqKfE2aW^Ugyg!Bw?lzg4}p4^1}gQ>{pT#(9kD>T_uw;Wu~5D%`OE(aQ?}cK zRs6zoFRzLX!0+co`p=q#WJmPAVyh zcMsm_9FlGANToP>QBceOeWps?f`k0MB{ziz9m>kj!U#+<1%z18FehG9u8iF$tgB+; zF8=qm*HDy+K08Os-zWBs<#Gj;eUF#^al~ehprAdMTMj&++8UaH&fJZ_Lf3zsH~A9z z(sA{yn5+FXW6%7-p=2B%S&N)eD5f_NEm)sH>tWPKM~le|ySqE&6BF` zRU`+ZtQ9pYDF=HvVIR)RLrWNu*tjSJa4^4bJDP(oHK^#i}t2y|G}F}}0S``*qu3!cU(>>Odh$tn0CMMC1t zoK-eOEQ7El91avyEZOlW*nWq~iBAfjO06{<72danJ~*QfMh1b`_%fObme=q1uZ|I7 z%xrI7d<&F(phIx*0lv{@Pg`G;B_V$ z1C2vC1+6ZC;_xUy@53@k4~Pc*1)^y6IumDZ927%*SLI1AmKO>>4l*FoI_N}JS;D8J zF*jm_*GQd$Y7KyRx^ULViNF%V#_1Zl_o_coe*Qi2g;f^F&zg};wq`dL;87Sw7YIsj&~L`e3MWe1 zV^Gt2!8nls0D!OHhSr0#{2&55$_NByK64;1S%`i+41q4?>1S`Gb?MeY77wOv`gNZBnt?o9w>xJGxQdxmo4 zKF@X*)B`^XyZ2eAuHVmh0baNzC-@RN$RAT5o%R@1NGu{iQt?0=M}5|CSJ9O7y~mNH zok3Rh8o&&W5m11mcfP4DV9ylT(6Ao{?HEG*Z~%1Z?Ff5fdC=BI5q~!nuTN2BDClV+ zK%ov!H4g)VB}_gO{sf2kKmbvw02vvPGtFcPwkT=pb8ulA{(oFbfs_E{myLmp{6}B{ z`x$g84Wgk< zTdZ;l_V77v!#E)AWtmM9z;w(cWE5+s`+z)XzgQe4!33gv7FLtc%)&pRrDU?;LHi+O zDC~qeNUu{wrIi45i7!+ zK$8Fg0Dve?I5hxMyVHn0)c=9K?GAYo_d)iILyYebLJ($Uc9r>jLZ{~S`R+cH+LMrp{A-D zX@NDvJ-A{CTqshkcbm6AnJC(Q97tMspS?x75Lvwd`v?3e;lap~?S-Fp>06-izi;bz zw!@&*Jqzp?34R;|OXl2u5AM){%K^jG>1>-QGJO2-l4uOh!$FW6MSixTaQ|WJ|3kBm zD1o0V@HmCqf}r2=c^Ra_AIg8SC=bNW@%A#@573UDQ3K<2|E#W;`lzS_jvw>M(Smkj zH=@93d3G3s8?Cg<6V3s^a|+x`^Y+(neh~|M@Dz((CfV49bMFl}s(Q{kjn?5@S0)2_ zz_I6rXvfI#duBcn?T~VNBw%;bP%-Zv5QM(KG(28>0W`}9p><3DKH!hVGB7CWv=4Ac zOYeRH$O;k$IIoTeS*9c_opO^`6=Bm16@B&4am5<}I7i^zz#Va)nS_yns7vrK8g(#z zfZ&jdE-m;WLgDzAjqrD}Ek6Viz}v*kaz3IXi+%?U5IGtgmU*iVWGD@%+f~E;>bQv2 zal^7v5ZcLuf|-DvBk`EnMJH1iG!kGPaF_!~xLtF{eT6nadOV>23n9*8O@@Hu`tS}5 zpzT{y%UJ@o)Nz4Y9Z8>Un?Qdt396YFz=Y9sF1%s^#Z?47`tppxlxO629#dQ`uviv5 zfqcm6!6J?Z2DjtUCSYeg81l~tXVfdI@y^2QNDsV3#zFNb^LCF*1pBY7zx}8Fv5?cI zc&L>W#+9%C>lNX-KtZ*9Wj`(b$MEQJ zG@{Cun;R=#|FzJNA3{dw5dZ6c^fZCQN{Bu`{2Bo8)r7x4%)kjyHa`3_ zSggDjRIx=T&(H4=gbB&`p2Xi_q7XIMkB%$Ku!4@WxbAuFo2Z2d;c>G9(3WN&9z5+7 zV^LrVAg{pU?E)VMz5c$hdJqV2Gv@GdZ-fc}Kk)0S=~Oki|LCv9&?{wIF6rgoNdS4b z6KdFB%_2CYJ1gN@1at~K99sg&cjxjtLI6Y|aWYt&hEKB}tNRd>u#NV4 zEm>D3*7JmeRiQOE=v_pRqba0gL@!Trr{%0qP}YobUxoaLn6Mfh;Gn@34=@k#fCv^k zOJP+hdfRPe-y$O^O^!1K?~t%?uDy&ks5sVYD^`zNSO8^CgcWkoUox!tVDTL$>-$Ih zjsZjqFxZDv6fidJo)xt%(+EJE!2ki^0CI`0H?=H*{btAD){7bkCcz}{LBb#`ray&f z+Z6-A{ZuBq3rUUb-*}GSVJl_rN_Gy|CyX`%Y|KG6{>A{311JqWB^7l9VKBUEbQw4V z00JQZAYejmOvn=n?&P4|Rifa?I9j2ki_hT=NS4DMCH4&HlJ& z0RiH?o3g+EZRR(V|Ndy-`rp&v2TJeOB|wQ)II$6g^-FLk4~9fpraE!daObyJzj>df z|G4^kPeVx5)j!bSkcDnF`Td2Z!cZy?9RD9im%s*hj(t*L6fB~fYl z@FG(Lq8sui;CQbe*zKeZ1%3ug#YNH=)A(TmMPPzdc}?v1R27vvT^=|8`t{XhsRhX~ zsTf3%{$JwE0k~{nWW(c8@q!MTVX9H$SEs8G7aYl*4-1WeAqkkmP6HrlgF$o+T(O97 zd1Op0*a~Ho4OPl`rK;3d{Z(NP8I(KT+NICIm>NN_S6Pj0!f_vk3I|*y&ivdv3xGty zAhf^2(^TSKLJ(v`5f#@UxEU~T#JB;LtjJ*f4AWrPYOPIU732DfYS>kph3hLW<*hXU z$bCa#Bupq*=7en+uw}7fTqySgp~dBYkpai?fr78-e|<*fsu9dY~P!Ss3--hbH{F^+b#>ZC|7piOcA?x{qNQQjpf}=~`_|#O9|C8eK z>8CsM!`mOv0D`EhEPqSRSe8ZjE%oDX@7+6ExWPXKf8J&SfcbYF|Nq4f;Pk7fspVu0 zdQ8Z$cvt2BeHu=_xT?A0dVS*VCmce^b|PJFgI_)0u3I%nN6^c3^fDZI*IK?xG-qtz z^~M0<|7R{c=Vw|r>}$LUU|=Mc&R{D!hs|U>fA`zJdT;8Xv0DHBQy=;zdh1@-u+vbF z>~*#E^&jlM^T;ZiCkj01l`Tk$i@9YkiOuqjP_xVIzv3%V0!?z(Ff{uw?69;~8>;)?{D=!bBasImM z69edU=%AQA5s2$U#3>B1<~p`-Gp7SUut5QoiLZQo4jREjj?a-YUdO!1u-JG201F&J zngD<-75J1bI`wlIi^YuWeRWvB{c`%nU0m@#l`8M+fB(mOSMZOHTJ!(^SHxjO0_yxV z`nF&H`oGpJW=@fQDSX~L>hCv&yb&w-VN>{wcWc_k=J5-zgaSSsW{MLMa}q%Y9@MX7 z1ay!afB@dSg@J6w?7ziVMV31iy>+&uwXAaA6sdaU!ChXl%JOGdKD~_6>_U?wKNDG% z-&ekdaGvdTYIJf+RqFN_{1+PEel0fFx6-~E5~ZI2Eu$Ez{e`!78#UMn3dZG@NKZ?Q!1 zZ&v!()!+K2p^=hak%*Ku9xW0u&eHXrpkXHmT!q4wrUlp8; zR^{tegnT3at1-)KqbvDwi+pEu>eY!}@zf#lT)a)#Z-$i5-_e}Pm+wtibx$iB>+f^ltq#Vg-e$A5KL*Vq1Us%%%|Ypa*hdv2o5jtoUF zt)xO0ntp`W(W_U5Iajd=sf8nC1HY^8S7AlIDbP8vV^3jsdKq6zY1GX+{weOhW<1MZ zTKd*Id191S@qQ+{r%^=swM_b6q08;fsli=q&HQ7eRK|D3J~3kyk=utT-9+%In`!=` zPF&*+JMCFroOUDDU)yxTmk3j*_>fr{84<)_Qi6+e_zZtdN4R;2k@YVqA3?E~|4@Y} z$#pQd$hH=230vDQ`gREWa!W7d_*0H$QAd(wQ%4vlR5UI~X6gd|5Dw&s6Lj@#xREtR zrG)B}@%%E!1s~PkRCbY@>saOVoomdm;(SWJJLOUS7ucogdtSvY7w7)-EB9L8it}OfMjxO6lMY8A;$K+gs znhDq2X|==0wALbSJ z>DR_bYuJwF{HRNu2=vW34#F4u1w*26QBEhQE8WePg!=#U`c^!wjn9N&nElTc=hV!r zxjqxvYafojFfQ^Ve5ImPM>N-uuh**{C+l7>6{Quv z#C>{)b2kZot>&zrmFurpMelijcXcTtS&8;5#aKozl7bMxfYtR6Xa^W4@`fV|C)DL8 zWr8$Hv*|VvJhQWq(61VSI&Oh%i>w=JVFUg*gtz+ypDQUPL1t(F7!Tv-VOnDsteUoF zpvch*NyqMAf6VE+CsV&PBmO6#r|rC6d` z^}=1Nx@)g5l%{w4*Y4;raaind&^bgzJ1F7ThcxCkxR(viA$R^ijO3%kiqy3kKFWn3 zr11q?oFQg)=j*YY)g6bf9Y79Zp_GW_WX)3GOX-zh-MamKCHr=iX)UnCAZ?Wd&1zgb z*^KBvE6zz+kRpwJ`05ITFh8g#=JQqcZ-OF|_RId=f^vLx;d18e?eP%ybfe!523!6J zXqpHf#(>kR)D=Ms&2z{6l{$KxO&w|1V|L6PvE*}RF9Unzp{?FFYI<$*>IBU?dJ4jZ zH_AM=@lT1t*gGn9xQhC0a#p+&-ZH%$WuQ`zu3f<{TN$Zk4Mt+89dGMJ>hChO3hOet z^~$3H+&@?0lP*;iTCJ;8`!D@tcpm-1AFl1f0xneR;HV%1QX&a}$B|9pPIa+&nN+gi z42M6$74bMD<$d}O{eB&Y8bPT48%ThFGFo99cor+^TF;*ljW^EG_W4kQiKaM1|E~`5 z7bziq_gj1XZU!^sTK!y@ke1u{@Y&G4FcbC&l^d6#ZWvmnF$t z`LRnwme$mrGGe-_ujBW#IG2!Mz|YDsebD9qygLL6Bb8Uhm;X?dC0v(IKGo#Ei`W~Iz{g^Aq#!_U@+%4H0u3*( z;lEMu&z9roug|mi6Fs_rp~~;4p3DFLTE4YfTU9|vp56Rs!6B~v#c~OE*D<9wQzs)n zQiE|WR94BN|M{*fJ%0&Y`?X$@FK+Om8dbBO3JS-~-jNa*x7lZL1Q-_4b_vNok?FY% z$Gb20rPMBbX_E*=98Qg#bbqgxoL!p*d?QB**gQe?n(LWx1by5UYo<~%{og>K(D?HR zSV;0aX>7i~f^&y_v)>53@_J+8TQG!?XM{+sEc>_jU^9{W-g2R`J}^BPxs*>w3vv)E^YnZ7@?4kwmT|`_!Jz9*o+D% zJG>zVr_RTM;y7f+S)4d5#ytBk*Qm}6Z!O%>Q91D}2p=Qs{k~u?7luv979~31O1-WW zb1&UDg2K)eGDik48I`|1JotiHE>p%9bx2;Hh?t3JN{k$Jkzef#ba*AilK(vuN5|ub zoOmXl9MR|f@J3bzK?<)cqIcJ-5cBJzy$b%nSCLonr4CdoV{e4a{;LdgC4c}%H?1HC zVd41r!C?Mj@K*VQ($v_%jvUoch_1hv|11{9!NDVJcZrqb6JW&Yt?nJIWy3*dF)RZD z_f4gHsLeu?{@t&I^^SVC$YX7U9ezVHQ^M99mT366voiUeWhyuC{1RyHL1q3;Ms8IZ z|I;c=OYU}Sdg}+p@G-ErKwB{6&*Df$QGo%?aJBtgTvvC)aC#{)7lK07f_|rx$k96a zJeBypK_!~mF}EKD1x#xMCGwr`vy*$yfL0F>-wPA`=e#v%l1#W&PZciK}D- z+m{Rd%D=tO|B#hFI;vw_CwiOeo}iSk7>oojc?6;Z>u-WmUd-&H_pVM_Z_P-!Kjmg! zf|Kn%yZbF1de_z}iv3&CwMACCRl2mhe1sv8W1Bp`uA&L?|6K63FZz?M#GLu`5;7WH zbvHGT+>E`!5t#zaY4+Kq^;gULtC}{+`SL*&X{Vkau355;8tAQDv)}MZcOUJ|eF}V3 ztHi5i_Ai8fHocejzv|W24-suwFOt8P*Ik*-`o7lTv+XLiKmEF^m369)t#@131VoLs z{&&mnzEV$}>aHnN5p_80^;o$elg60E^e5P?JB{?Oir3e+`uEoL)vvEw!PkooE=UR> zM^a;c`?}r2$(NJKMN0Qk_WDH3W1QO8CbqT1HH+())vEXa00p=~ngIYx1%IJ;qW}E} z`jw0IixK@RA3Bjg{c`GBzXVr(`&a#0V=-P|2&?^n|LXttrfi>I{oxG1Kkt}#=YLwh zFQltoQ0;rVy*>#!(i+T^U;Mgt=#T1N8J#bE;-z(e7_eiX7kXh1y;+31`t|E`_3C%7 z9sac^Yuy|4tdrECg<-717pZ4i>iIqYqi&aHue4#3#b7LcCgHVf=#85V!&-{-N+w?^ zGCAtk60KA%ljr~D$7RE!DCNC+uy^|9B}(jan1aE2)!%C06I@U0l%)49dJEFucTm%d z+xvF}QbcZF+1jNAMEp;GE;|+X>i+8gu6%Zn*zM(Bt=h{K)gsIFB6n2F^S-68h*njr zn8kj+C1U+zyF`n;S9QzivHSVem`ktKmrSnxV*Pr(Si(zlYxnDZoAs)`*PG&1io91= z2_xU3urok-@_KdTfgt?x|KIBublTOvZt==1gLH5D-QGJcN$LsJ`&heIzACwwRekg# zz2RN+)uKOWPF>{qug)QEoBh96UcK@}f4BWy^tbC&qX?y8Z{+g-1k+ENo?V7Yz-2cv z!D}ptXlFtD>@PeGO@NBR1lfyp^|>%RARgK>vt zHEQkfo`QCrh^ae#rL=hJ&CO%xQhH_hUX?29qh_%%o5+4oAMm$8!*G_`z1WnK-p7A# z`8;_t@_qZ~t29GWzuLjCphd^uesT3We!Xx*-^5E!x}jPB)?Sb#yUz@~lp`u%U459c z*Sqq3f8_Pob#buCNPAT_%Bh#^wCVn@^b4#w*|T&(rw8=wbp62$b~BNM#>waFT6+Y1 zepXiH4_G!FnC`W0TUh#_*_Uek{i|24ezNKMBfGVJo4?nu{k=cnjrPf4aloP2n{=(y zI73&Hf!kW7_tpNvAe(54{df6HTqy;X*8AoV724Y;mFZHx+UTEO{j68(QhK}fuh!M- z$tkaE>0ut8pL852{bf(ruu4PyflwP6F^#|9=&{V7F6y9`9LrhJg3M`JLGsDx|L?o| z$@BZ0c?YiZM#o2CitG|(-@jg$)hZ{hyH>AP_xD`?qI@Why=C2cEo$&bZ#17%;E?oA z>GFI3vvU82wy8QoYX5eLjl0=aw_zd@Isr7$#K^H2m5R4onQHG;xQ$p> z-jemh%LKe{b)1JE8I#-3!&um>Pf+5W_W$Ja_h-@HwUm+nESf* z!}Wi9@J1tcpV#%mydYauD6Q|Km;Y6jY7(`jpBL)S&v)sc(KhrKut4QWGLsZSBUY&erGKT?T29yNU4nwPq$8>x^_Gp7y0Gv1F1`O)s_OYA ze^grib^6AyAc^r7u3H30VaZmj@JFOC##e<%tLZADrg?pDhcV-Ki{;u?;gZd}zn0pQ z*Y#EipFiS_Y~X+^!+Kq+)xiw(cjuN*(*1YqZ~ws&)SpNjG_?Cx{S$DL2-R+j->dud zN9u5WEV`_}`?GUBcqA<$78WwZE^r>;Kh>SLpt++P{Rj0```V_LE3(g zT^6rmwEnN(Qn%{$=(wLXbh&Yx00rJb zngM`n1%IJ!`mt8Is_`26yZh~H`l6P;KJT?-zlo|ZaZ% z&;S0{EqyIrtyisnwO+N+{j2nE#bdEpw#Rtx*1KE1)QSp;TWqO=nD2&1`XsHF^UTnx z@KNi9M>jy*v6J+lY%SAB5;O(O_M&4WNR<(-g@3||M8Zm&{ZrexuC;u3ZoZe6wOajB zBr~Q_Su;mVbTMgG)u=+JZD5Mh0wFFB!%>g`XxNvpkwFc8LO9uUmO9YdcNb^qfX49&Dor6n$?O@64x6pRrT+w8BYK;-lX{Skuh*qWyC8wcVp-W1wYY8oS zKiBd}s?x3Ysey!ve^dXp`TDfC-Bzg=)t{kNOTA*Qwc22qTcx7C?(8!kd3#OrX_eC2 zx6OO3yTvKK`>Ryv$fQqIj_pXbRfM|z?e$juYvxw{Y;@h?maTH>Rliu+kF{>9Uuccm zv+k{1xqVx%wDHo+^C$2BebqPW*SfTq%twEzag5V5uE8{WPe!P8>#*N5-AHaX7xj4M zcQM<)YUk_JJ1_U^uKTgwjGlkhO0V*+dgkqFua#Zj>sZgqA26t8nsYl3+cFo~jgD-nbxsY_M$)>!^~3dw zTp|4ttJSCGzGZIvtF8On>j&!>>XmHeQH+1{f^FrU(!t+hJ}JfwdG>*ObO>~#z*Ig6 z_HnXCxkEVFems)>#gE|$hU6g?SFlqlDebJ3&O=Hn^^3pOv0uupO@FI?waTn>YTpyu z*J{^ci?V7N)jqa{VgK0aji88WrlXmaodu7#wC?*k6gHaw{{=;+mu+^PGWy}zX78(I zMKZtGV|QSq1Zg6b&3tfuY#n2#!5z$KF5T+=%ejZxU$cJZ>2X!9eOIg1t5>PTDxV2b zw9eZ>K7Jni>|GKAbg<3*s*~6JJ7OuzkHXf>aVBw*V&b{HM_3_TD;BJBHgR%UswLEME1Q>1eemT@6|9niS@QS^%L{|+!9^yf_K;= zu^9sJUzm@RB>C0wOG?o&U5B7~cJIE+cm9gT?-MAwA$PxhqUG61I6yJubzhU`{MM58 zwb|{vZTt0V|JJ)%)$5mi$?F=);!o=5= z_^8&57&PfR@_A|aPHbRsvAVRR`~TB;E}zB?yXmmI!=7AMroZr6+|3#pH?L;!z<2Bt zQ5^aM^o!<{Fkjl*#d1Qo=&^k+wfe!{U)SXJBQ*`5MQ_VvujcZ>c{Z=L!3W@@Vecxpr7dV`Qn!&CjJvPhlDo2qcQn6kUsnomYX!@t$#u)llpuV3C$lJ7@F{) zh0Jm2k#yf^wy##NR`8C!8LQRbyq|tj^8cGgfu0{+kxTpk;D}WUL0y*aD%AD$ZT}&jL39K9#rrG1Z$+x`MrjmS<=QK671qUCxZOz03-b9hD$ep` zUf_<|QFFg8hQF_ND)-pfZ?(%W?RX^2m7EH!zh9y`TdSXtnX`NIc!IMzj??PFcC{@# zer%NXwc@C)R8qfP-tF>x{RsXD=`Po~t6zD28ZO9q$N$}#rk;(jcaGA-9l4X9{Rppr ze|lK(h^i9uj?PA|{vi?<=)L+W0s1zo`~4Q@y0J^mR{dJ5={j!jn)O|OaNYy}0BmVu zW?^AtATcg7H~;_wJSiZQC^riY0?0!!P>duQgn}b5va^fdE;4g@HI>FnEmynTmW1eX z|I$9+gY-UP@$&E4oAdsUtGs2imy|o`-?M(aK0TEOv+LFJu7iIm@18p(XP-Jh9!K-~ zT3@Wzd!Jq2RWk|6l}d z*LSf$!&TNpelYGyx`qbb|C>gVkf%6p=La#LSMiVs0VEWZEHoPt0?0tHkSr8C1;U{q ziBwZu_EAw6{!aocA*oZ1lBmI|#HN;&-0t;J&Bp1+#|_H|~-2!ntDCKQZFMhXRj zfq=2lY!oVu1i^5qL`o4D*4fS9GF3(8uOv`pwTYqrKjQv-Mt*;V=D+ysr})@BC*kUz zT!Yb7dNQ(yANQ`F&eZCTVv~P$NpH>fo>$7h8_Yio$9c*yj7iXbO!U5WKqvY*S6V2~ z!J6!PBp>*te!$(HVXxwW`(u46ji(M<<$m7!PF_)UA@W5^5ib_0VEWV%p?mE0>OZwSV$Hc1%iWMpx7uC2@piz8@g_l47jOfT`E;1M2!#o z^~R<6ZiD96?(Dz+J>Qx8c<~-K$z47gO`yV#N#pu2RCGUiu4nuAfL=VjTZ4Y*hd2@z zsZV~&92u6BP1GH1pFr|%zuab{P>F*MzSYGF&evUg=_>QJ_-`OhTkM*keBwoQMqoM} z3yWEuo2TVGPuy3raeeRJ2J792;kYkn!+uHzVk*rqJ%Ch2yIk`7oW*wC+PbW@aH@Rm z->M)1RWN06x?misL-MI3w@Ow)iiJ_FRpH+tH~}UUknGeG3BtiZs8B2y3WbEBK#+uQ zKBRYfc~c;?)pNq7RqjhGRlwr?&XLwS>(l?Ocx!9_SAFA0Wt?i$qlNr&##O^V8a2^! zpH{P{t##_oR+9!; zgMa}h6pSbq3I#%fVL*^97z+gg!GN%kEHn!V0-<3jP%0rQg(_8Kyxz76sw!PlRW8*k z_#fikHy0gzzESx1?$W91b7df3;I@o+c!6!_5Y+iQzvO+dwtRvVb05AixoN|2^cvx` zE|X*$W_IGSVSCi(DY5p?fx#7=KE$1`qq3rMVYSf*LE0wZVMD5mUJU5EN6_!r1xn6* z&|yPLAd1xLn39v70g?gMlnL<*x6yhhQ1^<^}c( zimigzw52Fst&&pm|Bs8e7Q?#9+QmNNup9v-6qqO@5(S8YV8B@DHVOrTfl#neEF}pD z!Xq%gzb$f=yVrWEm${{6)aG8vb#*5|x_=MkAHn?J{*AkJKKGZi_+QpKulLVhJ5{ZG z9J_N(6wA&yOVH@*mdbifF#ijyO>+fndL!z$mFaKN{%X@70+;3=TlqKkifZ(Q?MTA> z|JJ@J4GaUMRBVS|UoiX%UMW}vj|%=eiD3BlSqKtgV?ys&XABj{*W7b&oAae7lnRNQ zLX)#WT%4KQ06CQiiTbIMpL5{xluhI9e}R{hss{6Le!8Xj%UQ=C_gd~<{txk0Un}`t z)t~g5KyUy61-(I<0sx8ybYHK~n7)72{xZ40@3@*O{d(aky|cD?aGecyso&>@mrJE zsGnVZUv+ryRIgH{dX+H?`oI55{jYYlPX5;})ylHo^{;AMyi($c@AWEFgxKs?*X!M^ zS8Ek|yBN2xUj2X389e{}30|SgKPuO*?B{KN$w5Z0Z;Qu&AFo$Rbp2noJ^Gb9 z?RymO6t0IUf4fWWmwdVE*S}i*UcGCzFss$r?(U3O&ih$+UbQOM z1sKpkMh(E25CwJ@dxrP1ud;S&d{IVQAPcfz;fe;$k<0E7K0Qq=Z3q0MyP^CL$|xCb zL<9ly{I=G=MSsyHCyKKnjLBB@hP5W#_+)1pMD!YLoF|yVMJta zH}K4+&ukqv8$Ov|UW+&4h(TFDlNW}zA2ZD!-c)v`>9^ zuR@=HXloVVu!YMBwP_-LT-A9Y7YpIz<~|7d!T_>OR%7l|I|PJo+W|P(ZfRklCHT|1 zhC8zmZ!fDygS|duW4deEakBqAeo88}C04cizw4g${40%vi?3qh4*)1@=n!=mBSCy# zIxxR3Z|D)oAf`}2XFIUe}@p#^$fa=^ecYu-QWOiA6Mic zeOmv)b+L*N-$Y-OU$SPzYQtyMC9Kf(;VKcp04YK@{|W67QAns*G7Sg!Z}GMY(ZmMR zW{dTu+iEO6>pw<8t*YVX3=Cp%oAs;2WTH_jq%W#M`kMGI?K&a9JXQZ{`oF%-Twr8g zuSE90qg;~Y{qL$(daKp1<~}q$8ke&?WGOv`;Gnc4QkrqmPxZw6qj%-YPvtvNm|yBf z{YbL?U+%Z=zRBhO3CJ3?+jVfxE`;yI`1m0iDh~(z_5MGd6VKNvT7F+o+(k2z^1tvx zW>;zs`>jz}KU_V{)tx@OjOy3ngG-*%Sbcz!H^-;&Z zb@tm@u>>1sS1l4i&wY9Mdz--tZOXU%h`aDZyWYJPUP>fhzPkRrBc*F{;~Tdk_+*J* zv^2?{P0*Vkf==${s@D&M`;#OQh%sl_OX^Nvscwz#(3X;=wR+bHtA368^meZVo!!q1 z|5B$50`hVa600c8ZngW2T1#{JmiIFSSkJqI2?~?6Ym({yo z$@%~K=R02gU!7xJ70}u(ezzpFPM4Kk+?=(2t1H$jwIP12R~L@U*e_bCab7E~m5+*7 zaDQI4Qv6L?)-hM+JC!@`y=iNUT)X@cm7V=W_WeN&S(^$$X$B7e1QY5$fw0DEX`buz zM!!Va*k@@f`ZPtwBjkgf`mJyJzdF4RCEbcwguDN?`D)eWxjkO4pWXN){eX#z1<31^_5XHGrG9F{<-lBS6)fP3C(5|^h~^8>nwMd zMEEAQo6kak@E>izsmy3;@Mey#eyc%}Vc ztMxi7R=ti}6AJrR?O?xJ#Vya)x}nQ>pI)z5nwtrA_W53}ulc;0^<{eHS0yUf>dt&o zG$@+oscY4!cW>4ISNXfAx~scAW7?QzFZ#v!Be%PLtY5BO)%LD7uiE8ZFGO^&C#%() zs>Wugb)xo9pW;p2=SrUoPD4*tj3B5<>-WF>6kWErCGYqos&*T{F*a+z&sB_#AO5ZQ zvecguUp@AZoP4DZf0eol&q^VH&#M5KSV!Y>HGP327eCA&@oFEVK<=mDDJe1Xr;Ba?Pe1aN*ZL!$tQX-DN+2mCXyt)n^?#h| zvC#)h>G3Ar>8wES)oavW|3!NB%koyaeg9u}r%%-Mp1Q9+PB=)Se7|S3CEq{#vy_D^ z7en`V<~By8t$in=_ZMD?-YZ<6{)AMkO?t`ueVGuR>USFPoGw zb1ynOvYJPK^O=6!WV!k5`ZrNG{L}|vh5`9_At~&F14q3?kj-fk>y-4F6&IjK(n|{U zdi8##>cW-poAOC%ZNGjWx-M#5e-xvtN`#;MR#r8}kv=cukxO6rCeg8}g|yx;(K7vY zyVne#zyG4R_$0TGX@zTo8|4-6*@z%F{3RgtnRot+;C)P0wO)wb)W5G)tKG=G%b}K@ z`>%ZnVU)k$*Q=8HB)!#|-9Z-_Zs2g;T$d%I_BlijS4Gy9XX;&gy?beY=+3K?(e>J~ z_$1NRUH%AquT`tpf-K(s-EYfN{=A*=M{2Emt!uv3?*Cb8k`deM^o8~PSp8m0Smk0f zdcU|L%MJGWH&g%s1Oq{u0|3eef1xq|T(O=n)+^<^SNUXt2mk+9`v3p_|5y6`So>6m zdusd1`(OUPJ4IuyTb)`ULf166z=xC5|5R7&x?HM%3D++Bn~TIR>*+0P_3zi!>lOLy z?#cf>Q#Ss;_35C_@Kdi=cV47ViIdm6q2DjoVZPOhwUu32>+yp&TmI{%d#g|PQpxMT za$LT-ey&!Z>UW1{uhdod`uFRX{j9sY0@EdHVip6qmtmBpdV?=s>;tE){5+mv!&8YSmd=Yu_h*RqD><^O?EYEY+XMVp z7%o2Cq65Fe$9ngmY=D-PPBw9mro_+-fohd3?WhOt$mC`DpgolHT>Pwx83>bk;4Wt8~d_-|GOFvI%DXpT{O2Rtyil*TCZ0h3~MH8nxtL*7yWil zX6%-1cHe>`rE33*%dw+{%zOP{s}1<+j+{Ke)qK7S$Ym*SL$8b!9-8o5R9>igR3!c< zC3Wl4dMhu{y1jb5>2 zoZ&bA3u~s?*|R!+jOXjW<(h

      FBsYE{s~{)x@{u*C3lw;Fndj7)-?e~KSb`EskdOE0Cknv#G#_1$chB&lok5%GvKrH6}I(@u9n zTb4HY!T6jPju{=FR>Y%2&p4pke5A8IOb@T#Kiu}_)|to%PJm*HR=XmnitL=cl#!hW z+-~SAXg_jZgiIW&xQ`s9x@*m{3vq~rnM?Vpg81IJ71~fPyKJW&h z=Hw(WIL?>MG+wriF)wN~R0Eb7Z+%D3=#?_puSR(l?7xQgLlVQnz-3ry7YN0W+5FmD zq}Y%Y@*rgQuXbMs<;?RFy2IDF^%pY}<0cF)ptE+00~_W|?rk*h za{PLsmvTF#Nah8$kS~9xBC`a;(Ka;*qOdckkZ`t_QW-x>YgpMb8U<7sZ$H@3>dJmE?catdWlxXB8z5HWyqgqAkO!Vicu zAT@rud|$q@w50qFbk1QycAAq5bAo$&;|R4O;inVh8u~w8I4S4Vy%J-w9#r@;PiyEt zO-bs3pTM!PMwfVo$9tKt)*o3n-Q;g&k^9PV(%glQG}wxr$t{7a@WcTJ`}37Y2e;B~ zAv>N`u(>EfK;cU?=yY$I#+M+Dx`7fWgC~sZ>pBQZL6E`8Hx{?df4ZLwW& zZX9grii148<5!L-b?uO`#&T}zAC@X1sQ~;ZSS;l8sJ(`5&A@ke@9gJ{pXvTG^i`&h zSNHVwOTkS?j(|IN+*oHImI9b3Qvzj&ZEmL$w*^}XLmKw%=psIcf6LsMk2^XD z3)S$5e9t{O@%s*@jmV7?mX`MJ&;?f6U)6og={WoR(8WtnzC8vLz@KW^F1#1C-UigE z5W#q>#F+X6fWQ`JXGhde^-5Xb!RQuNv>;s@VPhS4FS7HVE!o?8VN zrY8|p3F0SL7a{H#h5N<&`(wZnA8C*OhQZ2m)D2p9a)!d!J0e%NB<^hehdZeS*dFDv z?b2`61RWJqA03C%rb+ccBq46FoRYUk-P>6BH_z#i`s4)xyUwFm-Nw?7^EZRoKx_T16GXE1vG}=cR~g;*8yw0fuw!_&{3Ir)eU2#&TjN z%#1bIa^3L6-W$h%^e;dAmiQ2y52LzvAsZHYc>?pH@Cn8` zQr>`?G}}&{dK99KBOA_j%Orh&@BZI&+=lhLsOT}D9amWL46*>HSc$7{6Ho=;{<4C| z$#Z#u;&z>EpDXQ6MP`P1 ztbbk^KEdE;evH0myx%Z|oFu^!k;O5N2I*Y7JweeN3Ot}L;h#mE|V^NB4K zXicSqOC@aimifZ#lU1_AnQWhX z$FUlR5=ja8(oD@70Q)~Z;h0l@fLV0@YtTS>j}GAM2YKzhl91O9=0Zngw(pm)V_OxQ zbt10XJRU^m&VMbaJtLFRjfcLnAJ}3<%FDK@?y1L}c5pe#FQ9)eEpztcSNT4fbhmNO ztU7JYi2dlm&8B2+k@wGv;cbvFj<%)Q!f~|)-?IMbE=>D^CHdCJB2uuo>4o|pPb zm9*Mg+{nBWKq?HmGsnmLWqB#{QfxG$qJT_LZf#R3M%M@DN9RK^d~v8)*zx1nAn*O&Mku{3G)gj!0@Luumf@08N^Ec&|Fm5iq0GKh_0BYo1OdB55C^* zg>U2=g)bh4 zD{cPd7v0y_S9;QuBVPPFaP3n9m(R8Te2@xDslr>~#z7n71jAyK#0$6i{+^G~ z@rK8HyG=TEjU2^ajiVEv&AlL>uz5K0k~{ZnmgIO~y6eT%N#QFULtfP(5^C^;!@oau zw!)z7v#{_eO+NtZ#%()0AmzIFzoy>4U-ApDB*Q_+%Z;n1uG|8*B`wq)zdI>PpZ<%B z4a{{GeQ5^ueo5)jc-^imA33djrNBVQzxy!v)aIlu&*0?N%QqyXUnQ6=hT~^2&ioOW z&}dxU|JT3`W1Y<{9?`z5(eU%j?K3o%=4FVXkh}0zGtH!rHu^EE4%rLDlL*MPLh^6nzs0JLLj~+w3|tTWdOgT#9jj~l@Ng`# z(fHtV>aSHf=eR>v>bgLQE9KlcOj-F%`Q@YF^Wq9g-DXMdOpR$o&@fjdhp=A-9+ zFWvSM6BjPi*;zwg%DVvTh&lv0W)pr`=~oEzUf@^HSN0Ef{5i4?=EF7Yd^H$Y-(XR; ziu=R7>X)hrro;DnC5D)t{`9{7HvW~PKZn|07me!Vdff61*LjmyZ=rjq=T?T*Ev zvEa_7%{zUKr2Jp;tS+4g(WPW%KMl^F?3Ne0Tba!iESOuqqa0r<&XQC&q%vY^*A&sQQ0G2iG zp`P+0em%GZuF4Rc*&>*g^yI^{dG{~Z1P>_V+jeDUS4%nKleZ7-?Pi{iVA|s#@-_JO*X}CZ*jpeHM_pY z&k$yJC)XFB;(PQu|3KKMy4RHecVw+_!IWje!Hha1=5J|FW66>_RjZQ4_m}SOe_gXr z-PG1D;&9@_VNz!_K6RQ7*Xqs@z7rzH)@^J?7ii~!hUd`-jJJ|nh&FBf?ulUM$lgR4 z`8QoDT47pBLby#&DN@+={&^!+OW6eHLah_4QyNDPUOAhrBCK-Kc<#Z7t)=X-c;nKL zPxp*P1mfdV?=!2np)(K$yS=%3Wf@iH=QQe83YBDMc)n}g_{Ww4@1PW6Wcur;De5tR zrJJCw5A^7ZW7~P7lowkQxWD1^4eS%9Y;IVDTK@W#cOblC&iT`7Dg$8M^)Z1Td{quR zFP6cV+g*#@6Xb+#b3Yil^NYv{nfWycI9D9f;c4x7dub_rAwKSvZR^9!BFEx;jci*T z<<418L$}+A2C%8^=ZN_#PycIcu9f)vNA63A>$Lvc-H4WIf7-IQSMQYc^V#^4!B;7F zumM|~(WUkPJnr2B&Bg)5F$dR{PefmUs2GmMY*${o`tsNi-<1<*&$Vwi$h>YjuVU|Y z-fhuD{eOxyZ>HX-`g;?=^8B(v@ypiOcX$JO^vtkJJ2SCbgO8^7}!I=_G64}(3+&=brH=3 zc*rAbnFl#Nua8WeJ+zaTcS=V0e@fZA!ovKC zr*4Qr2n}>l-1Y=*F=~crb>A4`XnL%~z6q+T50X>n|Hr~4ME~{(6jjKSEPqw%*=XSK zjeBT>Nx3&?x1!f>!PrPc z;GV34V7jGOV5edzkNqQz5<}gHs&STy#SDJqb*?>0RVEn8PpIGH2I4%%@VK4L^ z*Eg~XIHSgurD4ge<2(C0`%4T%kii$Xk|B0SPVc^WxRUMPFf*EozJLtnqVl()_E*Ep|b@@hnrg2|}onxJroR_ZVU$?Ib17FlGXKtK2c$v58 zYsV6fblJAvRp;#~Z}mK@xwC@t#$GaSOz&viC_+$a)V5*5dhm@~D+zn=@S7mC=iy(v z(AeSfG0Oamw5BAtE%KK2Cpx?@kbF^k)~ID;MK3GG0}G0qwK=4pXVSwcXbl<%n{K@U zW+{|5`hx7?>ZiOWD)jz!gz`&#;*(s|ox2sZMo-kObuC>ybS!!DrK^&i=B%f^MSP`g zoWS812M+L)jS8=wNaf+7&wy52iGfrCk5L(jCh^32!G!vyHYL!yTiO14bhSH;f~f(6 zk{3ZWDEzg(CGi~*Q!7K|BTLYr*U&mKJ*5(6i(3nsLPiHwQYSvFL#;r(DM`%6DLSby zmVlJxNVL24+K%H8oIEXo=&#U|nJ(Ytt0oIdy3ZB%8}(*(=3D~x z!&2ZIA;k=YuFM_3H(X6xT613V(Mla6JB5a+IfKbHX!zu{64q>dx>7y%r!n}VGxfXm zl)h)3HM|}R^sL3WQI~Sn0#*>xK$g<&u#1XEstA6^S(tQ7Gw;ooKwu!E+zDQQH&18fi6 zhL~@=C#oxo^$=w&PUn}z1?Z2*k~gvLw_0h@5^taAKYi-Msj%EUN0j*MGCR+3OC0Lg zCOChzFDYYMN46Qg`B&%C#gwT{IU*Nr;l@x|*D7%QyYRQ7bCFqDK)`gqCO^t6nICea z5WljV7qcoOL*ZG;`-zuM9uvKJE)0A`E+SYGH!fTF<}Mp85S-!D-G@ zyYkvI<+l%R>9RD5hFg~IH&8th<1$?{SQiYkURG{YZ@BgXS5oc@zlsX65EpUwEkpiF zOi#$mHe{n7zqUuzY{_%F8RKd*<1d8pvn9{ znO%EZVGGDT!_Fom_2R8)ws#J}$wmZ@-1Szrg(E~D!(>>XlQ@zujFPKkYZ0{?YJM8S7NG&b}&j=dPhMEZ%Uj)MgB%JNF0On-fhb z+;RMXz3a72_^v*6A~oj*ihv^25KvuW>IQ9a00b0-+%Pte-QwnARat*c^5^sqV!PE$ z<&GX}g4zGaA$JL0^p2J+?$lOfJ%q7nJAxB=@UAHs zJk0E$YuL*3)=Cg+jU%v(Q*AK8{ycVHgqZiI5Uy`4@r>tiKBJ2f}Y^ogWt2#MvX+!we0>uO`bXQka1NXO_7N8>22ZpJ>(<3x zGnrY7#_{RkRH3WWOj;D_y{Tek%XZYSE3s~dod$tXP2C5z9oU=wG2{u3|U zC-TC5dJTW|hYe7%`yK&x(yd*Ep(laKt`%Pn-BPjPM(aCd@m`qoYUoMU`w7*%W~Pg=4NVT?=Ctj~v;Jh6f! zrIjvCpGEVk;$cF~=3p9)k^_}xd$h}9;RCgGc#JbJJKaa4gw$iC77EnN%a2_1BoS~f z7*f64D9$sCQ)SsnK!#HY$gcRtOXsX+uJ(05?YPhQ5o{Qj`7-_CMz!%lY%mlB!xG`h zPW*e>g6dPi)dUKO;1sJ9nATxW6!}?iMV?$Yl9sADOd((}pd1RJCK&DW9$Me5m;gf( z0>_|@FhHT8+uh$ACezb<3Vk=E=K{({K? z!IS^lz&rQ$K{Rl29*)_DTH@WXZOkrE9m9L*Wt+0~&}8nB^GN`X`{BxzQ6w77zq`o{ z4*0ahWvJ9tUVfk=WvUOB(wJkCH%yeny7MFDioC@H+ddk_I;~WyBiAQFh-*?k?8?5f;#;yAf`1pw*l{Ujiea98|2X&ia zEBE9y4UDZ<-C08B)2%SJ&uL^YhkCPSD;Dodw^?g$wZ>KI*&c@#>*8XTv+u6qd zV^rpXh@|qTBPzlQZ(bhzBzGkoDi{2Ev+2J0*Mp2-icd~6Hjdvet`L$;c~HwKICJ%w z?s@cKANypN*Q^QdeEsjr;fpMqbZRL9EODh|N?mOA4!GX4tObq)Ru^qX#Ze2=j}0N1 z95N_5S74$pmZ&h5CmkmoW`*Oc1o>R@?&z5=9Qyqvh`5^0_GUvVta;$ZK-7aydzVud zEU~TT=G+*A(c!Uu%)|>g|4hv1jBGS9VF3FL1u|UOnGvaNHOHlRp!{&&lJq4N3$ED! zONbsJZFaXag_uZ%*v%gw?Sx})h$Sk+oqbjkn5~R9!pMmMeK@ZrIs@jS`1EIhqPct)za(++tBpgya4jR)PFsad5YD@2*18rl!&Zb86oG z4k5Q06rpN=$1S^4lnXPq^if8|GlNDIZo?r^KsQh5i1)-*tJB5hH@beC zbXxH}G`srkQ3R0iTVRzI|E=@ZWbrw9jmvx1tBtQK;fimDg%zvG)X_gQ*yXn|aYy-- z8ZI>D$1GHt=8gh9VHd7E3?MH%JjKQRyJ7D+y^kB!kWRr+y7VJuRW-HO_v*jm@c7vm z@lvOWO5M&nZ~E_r?&VCm(?zYZ6hs%SqUcEIk~e|cUGO(0s(a@iHAIP=&g)|C-Z zFNb`+%l7p2gsOwz3+GbhPq=N$ka%Z(B>dolwS}nVd#j zRHM{E^SQ|WMIlJ4xrjF|g)Ln{i(WL#_k<3hFy9PPc+mG18l#1E=4}y>cKg7A!{bJU z*G~-a$8zFHB$ON5n~J7TD}C0Xk1I(zTmmf^P9lZ-;CZu&W_$O77OZ%&IySL?kg$`a zQ1!35gywGT6cW!tZK^CywM9YT$bQHaEdu3X+2+$xu@(^Iwp4^CcZu@fT||QTPDb?r z-i&4_iT!{ya!gt(H>~E1w=WCKq9bKDWlP!x0Y?NEcts1UKYCo4V+p7iB@iV`l}M# zKJIL0txWn!4vTIOje=(m^yaw#BOowTT3nqkBk=jnVn2rujXy*rxXuOz%4*SPt(HJN zkJqDt9IR5ost|m`Y(!(+17~)%Z|>%y=v)7JWewbUtNDrtPsxgb^q3t>KO9H6v(3qn znZMFV(Qxw76;#8eoF0`X-AStU(7sd2vceh(zCtbIT(ntp+)b2 zC^mfY(~8o3AP`|GW3X_U7Dmf=7cS!RAsTeTHjJNE1`UJNd=lK18@`nu@Kd_&LRO%e z48r-MRd;6EAh0^1DTkZ;?T(uP210fgSidK8Wq-qqulNw>KE-D@?@tSf2hG^8CPuHI zdb8nWzDh~Q=%}2F>}V@8VlLOe97hT0#fsugsRWFe%-Yb(jQOMqhO2!14+n>GE*T|R zX=sdj97V(Xqv=G_7E}jVTwMeQ1=v*8*G53s5%Af(dTIroXFnrqIaD{s>@s6HH<&-2 zTDAzC(mNCdfd1zX37^d=Vl#Uf@{74Qcx_c}*T>a*fa!XS8>2*s?!v1()&sC0SG!+1 zi#zs}p2R?4*aEveaQ;yzPN4t50X{+Au}&xPhd;73r}-?CzlHPClRAe5TpEMOxry}! z)hq9}qX%h}QBV7|u9M!|$En#%K0uVk)-%!7d=I3ZC^+%o^pj_eq{idZ`$&inCdX}O zqizZfZASdwgt;l8fMv1pA~&3id`IZ`M?H(qGtN#<p&Y?!&4UY0->(dv0T zDSMN}vdfZLneK51&&Q8&7m~+-^T)mnnHcQedz6vO zksZyr>U;@LVu=J>?%s!`uB^U+I71V+k0o$y-~};`;q8 z1RN4h`UVzJz!S3b59=Ll$k_o#q%TEMHPu8kx}})_45dR=TLx<5S0_<{g#Uzad=p>t z{+y|Xz0K!GRA5-}_7dyTu7S#=vJM!4$GIT8B->t}d+mgON2V2C%pFigAV&YPT~hPi zY4rrpI+#F9U=1y8%agV!Pe=4uUE})3ga>0-6}~mw!Tz-BTHP2<=Vlyk#}WnFNTTI+ zqI0*Dm|KtCK+#--%AI>E+~cAnMy*EK7uOtaCL&S~`NA1Brso^pS$_F`)tgy)vNMKt zHbTcg;!t7G7o`I9~>Ub)SQIEH-ZoqOpe#eE~!j-02J6hDg@^!V_KA1YT82RQX1&zrZ7 zi~iDX{bZFLXQ$mpAWviaIna&$pv@@uGG;oqoVs)W-}^Dp&Y~tuSah1-i~e_yR=+<^ zBCMw4^kWK(z;PEHPB(Ue)VC z=jqeqf1FEng6{hx7Tba0rAwY%n%t63(^Mk2dDd|2{f?QLVOF37wmeJRmZ>*eg0hT{ zwC9ZUsJ;mHWk|`C{Ao#Zw&)9=g@rA${0bjh==}Xc4f!^Ua&?7R@9p+ho46$zxB*dG z4~`w>za$W+@~v(`M(M`M)mH+i4oaO({v>)#kO#1ScyL9D=W6L?`@uuy`mtnV-Wx|* zNL@P-7D&AQXWQULm58c+u+~b?(;XG2RQvUyt@U@Ba0G8zXRe?_&UWqJuHTpb%{d07 z3#zDP>%^#M4L##F>D51eujcR#vmROLr7;1{%RTsBV*1?|K+3v!!zJh|7vI4WjQ8w4 zv8x5(R@RUC>wRD89s@5W?V9{pb5wD?Cj8$6@>t6*FWHd;U61Roz8ev!{eMWSyr|$w zQ=KaGK)BzW%99-}f5=ZR_c~bY$5N;KFI#zE9_29eSe__vA z2h5%}OTDMGU3e9^WVUtcaEex$JVZL5__9bW?cZUazUs#5vdGA_XBslsCsghWid+iG zNl-|?EOYmg(#q;nv zPSI~H}#X62nJ3g1bn8x3B^VdLN>#0s z46T5irTyO=y4J^r;YRskZqeBIWk=a-23Pt0ZW*8UCzkwupx5z0K-AXD$m!toc}3@B z%jYt%2mkZUOy)JC`2Y7rxY(XMk#MNn_KSzg*<;CZUOWR$MbR^Fsl67|rC~M5N~gRk zwD1Q4y^Ip`IKedsDq8n%ZU(oE(p9gCZ8i+&m(jrHf0!6f^kONP5ML^?GVxVJGhI*u z7xU2Q;H=C0_sd23Ot-q9xYM+ksYwwKT7_kWo*uhCDv&qa;GGvQ}mx+X#H&ocC77zOTJABtX$zU6{B)L?D+^!dArVYWaYVk z^2K>Q`0znp{zT%TF53p%dkX*iUAI5oQ#mV`V5$h+CjZ!vhP0!y(0?sEQfez6*10NV z5=k2*F8r-N@!zD;1n1z_$C6%;wGmuoz~2$ zJ~&V}oeH!!jHTHO;iq}v32mn#^}VM~ak;e*$J+Y_uu~mt4Qm7Q#w+1io!E#rFbaq~ zUBCpXv%R_PWnAE09MT2lgzSKHues9(u+iu!{lKk~3{p%xE~PdCEB=#p31|Ra?vTSE zCRJz+pzXK=gYajigWGNc*nqvL_q^PwKS&PGb-|smIqkAmIIh-1p4K}IZd)~WjS;qw zt(iV-iSdLepdd~A>w##vQ-IP6&Cwc)_k=F(wJvrW_N{-u0B^X5NOwEzoXbr|K&=~9 z&n@F*cTSUfcw~j@ER@>KaCkjVC*LF)JXu4)P*FVAQ-BR$_{>r#j&OPq%Sl}gp z8;pNF4_)C19#`}gjcfujeAo8|%AZP=6z=B|z;>PWtTStRw7si{q&rON#b!QnPv6h! zCyKruf3>=DG5-bTw(WlTsQ&(@gD*5vIVH8Jj|hSIqsoE|bW5_EE2M$MP-t`E-SY;UGBp!SDYLPvV8JNqC`=`FaF3VDzT&4+vi+r7;W)K_j3*is=*Fn zu`L9T2#zp!B48JX)HO~=EgUTt1TJf4a|Ew$S%QP{nFOcVR9&$T$BI34jr7WSqwL^c z4;^piKw+J7K-Tm+Xqm z0n9n=?7&tG(k&OiU&!U@D7t&tg6rbc6dY*gRHD7g^SiuC#-Dd|GgSCv38l(o3ozW8 zpj!jTE*#b~)Zzzt#fU|m@#4$9aEs2m?hqJ47#!s~!|GvGM^~^-8HU^=QWq>*AI#A> zhFK^Wg~Qc15ju;s;aIJlk-qhJ#&D5vQJp;I+WKeUMFj`km1Obw-q)!sWN!ASen;sI zaKdX8=HOLpKw)V`i5E*)=+Irw*@`o_a0ZpOKT_a8rFw9jrOvN&gwvBM=xXK8aH`X% zlH;ouGj{IbK3B3YX2ZMqwjwPZgg>ZXz3TO0$L8GUv7_li?v{r+u0w_(fwWF(n77xj zH!(P3tEJ3tY;bYAFK!A8rA5y~#Rk;Z1yI<&nz&pyS~zhw`OW6%Bg8oS z^zs+Gj}8?%uGMhA-x)6)K}3klkIl2-|HL*tJN}!ZG2|)`;QIQ>n#p>9gynjGjW%VC z9cMLU4*k4wk8#+BJiXg$HTQP;UZ?JtLTDCwaC$dXxfsV<0cz}m3-;GVDlxQt1e>`{ z=sVgKvI2{Z^qYx=4mKEjaKT92$)NYJwf1dc7s;%pX`*jm7at^>x9dtDCq33jE}Gn~ zWEEXI)xGzG2twH*J*^zv0H%?T63oiLRf;HmcDsg4N%X50pPN?5f5K9DjC7d} zweOBtSFGmav8lSgmze-&t~8=xiw#X~eSdMODw;z})k!~_CU)K~h>3TH0Ae|)-3m)O zmY99}%gvD3I#?RQAC)g!1rk^3EH`yd*Lt#$E8Qgx8Qi(YL)%VSrRax+)vcDKamgMP zs_h&HF#r*s{NGD?JE2tQceuFDna@i>`^WC!JrLW7kvGNNxdk}l`c0~VqT zb@q4ep?GBP97=~m<@20T7@VZGhvVXM}0>Y|=O*56PXoGF~!pF;;$o&y}a02Z{USY`w zFH5*(RH${*l0WpB;k9#1o}nlRm#sozk;UL#=lV!kE#yl#kxNs1R?>{!t=IX+j)v2j zgc@>tJB>2``@T=@x-0pt@jH;_Fw<(YwF=O!1*G zE-f4dnHmmP<^7D^PM*ueAeTPKY*Ruylcs4`JnbX5o@y2~y6}_^s*;@6_!1nw?s31{ zz959ju%fTm5lM(TsI}m_cijaW*JxBkqjewwr{?6C>e%<3+}^tCfp)4DBazp_Jpop; zEzJRM;jO>PTdU0bkI})&)OlF|ZH*rid#kt=qJy$P#1z5bTfQHJ*V^ej=kYGn=6n4Y zj`GZvk!YA8CvZB3?aQ3-troU%K@Qus9zDJYov&4WD=cDsXr|+gt@e>G-5W(-?twl} z!=F4!;4bV_f3%$h8tF?dbk+>uT=$)qfCz#;l)9(>PxzXvzdQ%e6|@3pY7omTQMCNc z>qK&1abuui1~$eC3<)m&t$V4ENBh+Xc7>N1mcLf{X?D47ERS}WMm|dNg2)n(`sVdP zN#h)>cOe}Q9**TC_oEuz6nCnAqQ2jOJOC7Biu3MiSKze?S9nbSIrX!zRR+1xmHaKZ^5v|UP!-X4n zFVla;bi5@#sye}bfWd`N6sHl(H4tnL7nC#Vfn*Q9pPH~K_X1^FVttwKan8VZY1@^) z0n`~cS4szgNUml}vYbImG(4ptqHgJ16!}yIomGs2p@U=M)OnrTT40SZ2~krT4o`K% zIa9FiG-|xl;FgOvWPdC=m+)1E7Ow@LAF_Ged)j05&%hckkPm}K(&zv(KG2CAgnv)hsRN@z|9bvqm@Dif z@pvRy1W*T5BMzVe7Zs}Oxh_1DV00iluQ)}u4JJppoGB+djeNxw%jFScU%83eo6yJ;F!2BVe}s&xl;0Jd91> zZ!lkF*V_j=4%%Cd0d>@%6UD6-WKqxPwg0fLzTDbap&@@wZRUfT?~hBmr}0;sBo*9G zzB(dhrvG5p5afOl0#V{Y{S&~v95|WJX;)zIb1Y0y4-31Fq3DAD^QfFa%tt@EesJ?+ z`r8EOC!HuQ5oTTmJ?H_Jsbd8%)rWas6YC)+Pi+{=EsPQX#b=)#F;IK7d0DB|d6|qAW<={sb~WDM_cD{b@37 z6tfd)$X7%>MniV~cuIVbn}yz|-|4ET;hwRVdwo$Sk&g_tj4v!mr5`nt% zQw^1GGQbkveBn5pAj71CH~r)*09&X)x7GU+4*?mTbVvZb7z=n~BAAB=r2VUn{6Qg6 z2&ada+3^Nu7~`8UM_I=BxZG=5Bd1&pu}<6da$PIdI_6 zlu@Df$yEMOs2Gu#>*0Cj5tUG>MCA?YoMuj~yHMM-Kv@7Tr+wYysVn31Z{c*A{!YxFDTeIo;x9s)G>pJ-&$^|KkM4~(}?$)FS zKoy=In^-+ggE>KI69p;CZR)VaHJ8*jiWS9*7pU!_^g+?kX($c6SXbo!{M5KP+M6Bj zF%F$DFCzr3%ymL&5ABx}EcpIqJ?#AE|MAmnrzGulK!tYhFo~ATNwJ5jIU%J>ZI}wH z#l%emnW%!62kR2WlQ<6yYgfvP$Kb({a|>~08X_bTjkM#;_AZ{+|D_!MYD$iS{%w`H z7T5(ZwENBWH+_&6dn8?@Njxy0iG3y{C3v#W{Eo_o1!Sx&`lAQu8-}ZK-DJc3g7_uh zGgo2IfqJ)?pUiJDPJv|)zb&KFXaT%x+;=*v0@VMKO}BTgrnYZomnM4n!3*|t_RTG& z_3yyHJYh4Jh>O}e7;_3&|M_{SXBKRz9ju<{7Kon&)4x`Fc?#JX-aoAPoSRD`T+Y%T z?n4xCoiXfi5cK`Uk6e`LGu#iwZt-2#NA=i0;MXako<5KM!RkbO^E7;IR>&F4n}*YF z@{Wl96YXF#ItMGJ%ebuh$Y%pJfX$ny_R|=eV=ZhE+$E}yFO&4c;&Fi+{#+%9wp=px zq*yL$BQf{KC5AkuPkk9gk6qm1;!IQP8+8*{Gg#&llf2E;eZ_4HGLMDQAGG9x*1cI3 z4?XBiVY=FuDqX)0)|!svDj_Eov48*C#24;@xgfU4>ECAq?|5Kwe zPScsJB5!>-6@lxdkdvAF+)nVmvmw*dsm65Q9$fDLUD82PAC~~Q(&Z&IFEncSl|;ez zevhz+$NiF4jUuPDSTOBcioOTiBNxx?lKS&h=>(+?ywb2=LF|rrJ*vhpVVc*hhmO$^ z*JtuIu5&rHlJv}JonAWeYv4k;Q>rLkyM|8sh5*%{4tNOvy1BAa{*kt~QzbS2>>7_9 zO6-h!l!gu)b;bczCu{I{5@%ShfB9p*9&K=tvJOsTdlPNgxJ*6N4X8|soS;k|LuM8)h z$fLz5AP7Arck*)%Jg{h!Z!q@ym5xaZ`@PyZ`nsWg zF*w38(Ewx$oyJnG+%yUIbbdo@_gV+|^2Pg1I`6*P}mxZIIO~+roDKC1z`{}g} z^KN7<&Arx%j?gLZ+2c8n^AZN6bMp3-W1S%(x3^cUS9qcbx4Bmxucj~Et(4(U7<|g* zlOKL(55Coz$_szq%AG-NYPphn9BX9oPoNYe&&V6s35B(@;9bFs z0J07KkE3((XY&8wcn1pQd@3rDQ%;kJa*D{Aa+(}AIUmaTIBeyVGm(Zu6k?d;$6;p4 zIV8d)%=xsK(~Q~Sx9{&C*yC|O?%nUh^}4R-MYlsE2R$%9Z7QVbNw?VDzLC%gdk^jk z5}>F;vx#_-&!~NG?e@vT8W1|%?lBsaj2u%ZP86kdLGb$_<{i8z4K940HC=pdvjC>} zJKUqtdAfGY`;)yHKzI%rZI$Fmu4X^#!{<%5e)+8-7*Gi1wNTo8E(GZ{I!w)sH8@D;*ii6 zYN^4+aN`|@!Dt8Vn3G&9)$HjDu7TDfa($~?9>hv7kplOwr#04P!f=_XC?e&4nlkaY z=iKsDm8jq-leko*LE_r~GE37=6jaz`Zp6B;jwOw6U_ewoR^ zUWYU_8Rr6~YPaa1wqy{JN2c(8%qlfR?u{R=;{#9Xc#Ms;F>#JO=@f)zXgIiP5HGEP z>OzruIj_p|HP|; zoxNkX=g$ba?U||*@UYsk2LWU}&%2Lvw1yq3Ke_E#`V06Ps-|_}o9}Mggztc&y>%Px za?Eh=FmmfLg=_WZf5xBUiA=L%r|(vi5@LB*1LUep0nKn9Vh^oZ6*0F;2T#nh20y|j zrYl|F3+&qePkU-}zkhLXajLvfkiu_wBwV8wIKAc!CD^Q-V0$d}?4D@&O43%wsP2Mt6Jv`}F26+ZDoG(55lH-!*GP-ei;bqBw-_&#b7YMVn}6634B-+XRU@*OslH zSFMK;$C>)IHpqatGAdUZti8Gwz_hNA#0LQ?AMTnAMnW|{hJ6I~8qdDsrNA1Ff@yd6 z!~d&C3ctH~nBwu4=gnaVwI*{UKB6KJ?seS2eW=-gJR+7^kLkMB@r8$mvZo{%Y8JqH zypEUgXC_0MS-v|9%VtubRk-J)PSxu)R9Yp`|T#K#Co=HGK-{1+k^X z7VjD#)6a44HGD6BfMIcF3FuY`OkG9CyJpjm*s5G4#cifM?yN?sQmCS#3>bu??qr0)GvqQgTuVJ6R5E$^;p z)9sOV6>ZUO&RqOoZ&?K{$HNe92-c55v*(WoU!75V*q!xR?bV_0%ry3jhyK}qEk&ZOd-uvHH){QH&>WW@JHvak$hQ<@Xv8~37y#9S>Sx=?n>WqrQ z8va?NFUaK4r!W#EC@Vo&2ch%Mp1rU{<@lClh0?ln)k*y?3--n4n$$duxYvt7D4V>a zwz-OH>6g|}99|KqU0oW@{all`VG6weHURFYa>2OVa31j{+u@YyaSS@l>Ww#K*M`O_ zuJx*4Uln4%>__-+@pjXQJag38s+42Jes}nyH2XLkzaxt0WE%TR?`Sc4{pzyE49^M~Y$&p&BG zJF&qb?~^We2}_3hFV#1E2bcWt1rV2;>SsV{YVFki9qgENBo>ZuzdG$~Wta8naG}q8 z+f}D6?-Vg|AdcL(6|#ixM^S?3?-d3F;Mc6_b zh5qj7%yh!9*p-n$XnTIdT`Ev<{Bn7yA0kh&;E6v{)h14T3u` z)GH}B*GzWIo`!}!XMd?J>g9Vn$JxGXgj%53gqDRaAj8zC8WpTM-6G&5adO*ZQyo$` zE;MviUKoqsK?|~VP7;y}cD7C_24)o;3aayH`vR(O`Z@vI`9n0T&%p#_^mImS<YRCX+ClW+89h*=3*4YX~KxrV_R>+jkrIwhM)UvJ`#zy z9xdJru5#=C`!LS(SBxX?kQ?kYFL_eehBfV@xL+?+O&jEt>r`hi;!%E3C^s)KZ z57WOge$vHXxRUpHxW&g8Cncjry@h4>{!{kny22V!t7=)j`ESG`>3BoxkNL5!juWH> zCUXc^**}G=>EuuZ4k&J33)kK09Xj`AB9zLVu{|eOWN)Ca|JZdlRp&{#|GT8hi;Els zYZ-77!i)t_Lr+*ArT?PUI7H*efd?R#(4~|1OL8zfbuN4CJ(@AgXTuQR+17xE0{md+ zC%C_1Ii5q=8d1bpG>;qxpR}!_(|=hz`e>|nr`CMT@k39R7Z>QvU+HiiDMpyKjU)PP zIrvyi!|Ph7Q(oRPH8)}$1N8yUzElBnL=#p}he&Qq$|4>!`5RIP3IhE2OPvq1JTZ36 zx(jl#GNS#b&e%2+a?LWgM*qBt`4zhO`OT9YibG!P3TF2y+aNdOGil-dzv+9A6Gbpg z1y`aXL83{VQ_={AerutZg65uFDyfjFTNGq=rSezN1?#Klm2b*%sWSyE*J^>cMb zfB~eQbGJ`D$*%hXzxLi3_#tSl9Hxa*;6!PzjR*lwFXs^WVV`KH)z$3MPB5)}x-CYa zV&5iwQS&2R&IW#n*^lt-05IMEbJGI5MUVgIAJ}-E|2R9i^MSKc4`!*IJI~yTBC*Ek z9NEAyfxPd6O68^gA{QG_wx;B>)i#u}o9Ta{$>b%9eiShXcAvkJM7I?u-IY9vzW3~b zkr)T&Is5F&0d`{KSYZoqF25a$M;-(a4^dd;@~uzj9$ZKX9a}E%T}V1k@rNG4_wG+$ zW*c&0=Y$fyGN+|wM*&*(8d5o@^h3w81D1?bgzugftUMUjb;saBW;v;XV)lnJ2gX~T zT*{l%j=gd#X7o+wpZliZ#apU3KHfwNmu#!ngc~*yfKZ;9+HCNh_3ioZ;j@1UTj(ev z%qC>28N`yzRlf*2RK~$RT;nG1Z~g|gLRrX0I>*(!@afsGY$`IoBV>SXxhi@q4F$kd z^#Z4F?XU4Kq#=!7V^_XV$&VY+QRS+7I9kn&EY294JmQ90Y4SpJi4>$!5-_Tfn%Y|| zp?lKJQY9SWAl6gNRojXfGS6=f1KT5sAOzKzbL6*qW|;6?x$q>Rv*vRY>;{TKtRL4&87hEA!(qU=rq zz0RAs9|y>aAuM%7hJ)_)?q^X3_<1cazLW*9xqU6`S{FC;{R7z|roD=hXQ6`Es8*Ic zxq0nxzub!$HdSozn5Mwb{;>v&&(>!;0`Z4D^~UugT)&IPH47hz5+yuXtA*}NC@eEo4w$LAQSP#dn~0Un_% zXRF^82>G-O5Qy_}SS^qqc10HM)bZq9V`9MBNqq@^XMv7^Cl6KE1Sh2ZtXt#%R9@c` zB@4~S+(QUYTHeG3zLB|;sr+I2W%tzx-bB4Sv0EkD8s<=UtL4ztV@vN|j-?Gao3Ac! zOCT4kf*Q}A*>^@Bcbln7g3l?CN0TRSKF~4iK*O}nW?IVs1U~}N(ffvl(Y)V@`a1qw(~$^qXOq-!c; z=BxNj3LAe^J&5G@(ZCFV{GAns2hQA0?wd2KRtD>aKaEUo?DSt7{;Yjg(yp&s?SfKz zr2ngDRYFF=U)BEi$)yP?di@CMHOiGAFsV^H%1K$<2Q;krU#eBo{?LEL4;DwvqQ(%EXkZe{#v} zPr;7>yJkO!JFPQtH0;}nNadIczxCj|N|p5A7akD4MFS6M-&4PH2Mn1HmU+R$`Zppd zfHU%LTuI7kL)oW_io9``joO$wg6huaAE0gruzAK;ZpQkQBCUS&`z+gBoE(%0;%vEY zUx`Be_tCclBaq0dd&?&^0yZOm^VJ#dd*{BLRdpuDP|qwd)C6~(0yPdc=CDrHBYEIH z5=Mv7&^Y>`F-e6^qjRATYQiV+WD;JanE-Dl&^yJc4rKR_q2x5hv@LpnbkdI3`OcA7xQV=1++5?p9Sm*vPbX9P;qkD zQA@CK&wHuo{Z{;y8OH^vcGL$DH44KBr&JN9P*e+}t?hy2b0#~sGh3IGuf6yancoqs zuZnAD3Oug~iQQOi=}z9P(n9j4eObsXG_l0LZf#R_Y_FnDm8~KWd7a5eY*LAVXSKXs zpH{wENQuUQQ;K+ATE4u}J+T3Z^;sWq`H<_cP|mvyyFsC|=n@ z>ZcMb8RWb3lIcp%)6d2n%ZYys$Z~%TxvgC~b;lwot3D66cO&WhxqEEB1|BQfv`&|M zzp)6Ym^!nHa~qyMzt6fEM?^UpzHSckQO*q%{L=!%7^$6|NS<^0_b z`bt3wPvXRj(3(RFshmAhFEHUoH#(=sg;Z}G7YLuNx~li$D<&(!RfJ2Jczc>db$--; zw4plrl=%K*Hq{-P{Gg*>!}JWpFEB^BwW_qsXs>;zGo4>NEXnP?5R+i2DxvkFCA^0>di^!0Es~iiXm!@>T8Z-X6`qTm@Op#q1?Lfl)7@LH$ih|ES`S&EWsGB1H8@+HW%r*1 zj>Yh%B9B#*C4*OwhabEjn*)CC~B-U_1*OmN(A>wV6)a?o= zOLA7WB}M;lUClUDwzfVb`zA7F?BRgK7Uh6S}W zkNX$no=;&cv>7tYL1T2bkbQd|EZ%Y!#giguacavjv0(8~I=Ju%IkSIM4=DxW8MH$8Ka!i~bz`H?#{x>uoK^z2;nZ`9@!@k$(;CjrCT?aj9KY!k=G)I|6{stKT;{& zzDj7jKRJl@aiMRu50N`%Gq_#`&cEimeH`(6t@HIb`~9nlQwh&MP3tBB&0iCBt~;h^ zuVs|qD+^s$hsCFf^d9>J#|yPn0}cz|Q-Cghn>W&!`~3IHT(Lp3ovDJbYMX`Z_kXh? z5>Pe`jG^;io2A>EtM0^=c`z83)j%V5|9))oR`2<(+xas3>xk+6l|816;^?~_3Ymi| znO%a?-=lJQm+|+3bB)~+yZ{6iY26snV4kh4RdVlkXL{Ri{6e+!Ic1GiO}oN_`jcwK zM@NCms|&}se$Xfag^k^4PR?PI^TIkm&Osnjv(d@Wv0vkb~cldskst3?HzZgdAB1tq#Rt22AOP z@?yt1k4HKi1|ir*^_E9NKW;LR7dwkX;d73inedIYx2icJOp?HOg(t~%y{*c{LT@ED zc&7yKh%Wa%peVz`k8f#<+|&C`^&P$Qfjw`@Otd>1@LtH)?A9Tec9Z+EcINLt$0bU= zyzxxGh->#pGBr#u(4qzXl)UMg-2JKD^yM~>6aT}o23n_YGX_Y7z`u%#^*zMJ?R(rw ze=0~I^%56S`*OITKj)jk!K1?Gi??Fn^iuA0DaxN7rq1kLWUkJmv#TNwcN)PoS*3G% zZI6U+PKbQJ%5Hvz)ov;euTKA+9{NJ8k>=Jx1)fchcP#9SCzGSEnD&=^ z@ESE2^3dlr+NVRg>P!D?$ry<|cV>wGRlbD%=jmfEFS+}XbmkAjRqk(s4U^esu<~do zD{YCtG)Fop7})|m7MJXK_5l8MUnNdThONEZq!B4jqrWS&@}RrjXkYwFgic`qHxS#w zhV3;rW$gewY2ni}Wp&SZpYbU=nLnoXvj<)>lCs}Jkq=+ubC39)vbC2>(h`=$` zjRG==YNus>xH<); zk`A{0M%!bW_VoZHxWXZeX-V%aNs&SWl zc|9HScMwl|i5fiED*vD?;6(0$Og_mp6O=ZIpgl1w*wV~ZDy*a87CmnEEol78x5=yix7ur;N^hyNaL-oV0~If}aVJ_?E#4sH8njZiR^QzCOBY-@9!5SF z>sPqj(fY2~Vqfk?X>u{^=5J`TD$=RPhwUC$WGh&HE~uhw&>0d+eZzqU-sGP$1Z0o$8XNjIP9Pj95%f7r^;Ubyc@ zX@1zO_vOve@$K{@X8Zp}Lm<6Lrr*1#fvoRqbi}*rTDbIwW3!#$f*QARjlqwk){jM} zOoxoAdTpsWEt){&4-hLQWaujbS76`4=lNnQI4zUoCxvUTP}y;1|0H<-WKme$?Yl!f zWNXQ2of;c#(xiIsu6s^O&R6&)yPa? z`tt|Er=4A*uM6@@jEbQNBQ$2xk=vBNEB1>o!@beHEv`mPwLI2&5h}A52M35DIspg$(;DBBDWIME|I3= z+AJeYL8K>{tZJdZF)xrX8ajw^97d_NOAP` zeV%_iIDIS8;2FX8Q*khlbR0+C-;9NKRXrDBi%B0e3uAX4KYrM_{Pp^=Xl=)7rJ|kQ z)z8iWKgbtGFxS^#Mm=oj{$uKi+THarwbq(B*8A8rvTuUvQq5pVHWk-)JB0U2uUd840Pxit53rEjB6Wiq6t@E}r1fYYWdzvKje`I{T6>?q%Wq||{MkRGVKgYd zu70AY|EG-iEWf!+>ho*?U_BxGY2~?V?3IE&JaIXV1Cg*dl?BYR+-40?h47%f!w~V- zky~*|h2}UOQ$Sm~TYk=OVKm|$qq1k~M=8NZUORpyBdb34XDsPutoe119s8!ZmQl*Q zhwuU==ro`qA;rH1&{uLv(lwPRkb?!R?VwM9sJ~nN$c-@{pzhMp7U~GHGDWk%07a9o zT-9R=NuFD|Q?v>Lnmi*dG^&31^R7SB3I!^;+xO2iimcbRM@OjmSgD6f40`QjM609S z=&WXX>^auqIXIlHJ9REn-zj~^0--R6j*YDeTVGZ9?l61b>MgM%kSREifR_JdBKf1_ zU9rO=N9g*_QcDBUQHe}PJ~5f447=*XQDu~R`gd@JZV(RfMc935BluBQ_DO%> z04m-bOc=8;3g2kcbA;~$OH~B>u#8xSzOj}?`eM|ffrx$z+L*QV1H(eL3e~abV7Q>} zFgBRf`BU&Pxq+tvUr(kHNZ zCj@8pT>yQB#H8sIR2m7S2#=gAoRPB%RH;|lC^*h_0ZVB?n{6pBcNM^s^ibDXVz#(w z9Q_({F4$Ck9f4TQnX1~S!lV!*8*l_y2-i=C%5v=U{5sS`)r0{(r=PY*bYTGYYX1e# zfI&M_Q-EY(5-KX5Hj**{PvhEETGb zXeOaM-m6KEKPRsq8y~-HX@p4^TzIj~xWGZyTaP{D=-J14f7}nvbAA;9v;Jrlfe6GZ z5T?e5VYO;K0ifmt%Qk~@ewe$9$n#YpMpI2Ael3yje13G`ME@WI$9_z)aKkhK5I;PX z$onQ7%>V!j?v^9j3^Z9oX%jyDw?m;q?|;Vss;Y!>aGI|E66j2{M&$g|Kb1bI$KWrw zp?xSVu7;-5Qf?YCFhk8-+p&iz5S@P7<3b;((mWD3X zkDdE=8~1<#IGU*4z`!OR5s^=j7&f|ou46lcHT%u{742Wei9|Nr`tFLKdHdIWSMs5C za)gA~*+&7te*12P<|jkzO;+XzV|y*j&0937r6BU^P(`H13iwgt4wx8VVGGQgsW?<{ zg-=M#wfKtdIqVwxd8;r$8g;Tzeh z?Yp`TNKPBrhz;Z95loh~gcr{S6=DX5Eav=|G?CF5q+X;M+!sGKJ$OI|FpNqd1W<;6 z3pb~aSv8MH$^xIHa03`$*I7k|O8P)C|F*8XOl?`M9b4FG#KqHz|~wJMm66B>YEx?-^b-z5&kfX!G&VTa&z{_}y13 zMa^&|D?9As`TVO71ec2ff|t#y()UtcIOxcH@NUnF4VMc@yDeDTRK{Lw`rDGV?wdOc zSM1=I?1>a$dp7HU;>Ht?imz85NWalretyCX(aEWi3%|-_d4K#*?)!Ti8zp5g8EA8Fjc1yL>aBt4SBk?I z6ekvX!U9$5KAu&YNRts@V@-Pf{F|MZzym(rk~^$_W~XK;kgXOp$mBf3l6&``0e|5^1Wnmj(6e3XG;Ze z8z7tFqHRUz@UtnE@M(`^M-rum8={*08L$SkI!bw)%>oLjdw*VJQMPg*eKq1|X?C*O zbcXTlwX=$Rd4>YQiRWHBf6G%8xXhfD@bspsG&eVs;o3n)I4H7UO;S8Rs7$gd_lx9f zycujNMA^4HI$Zn&cN#P7=UI8>!tkjPI5FwfkTzB9yGSq3_FtQt)pWHD%p}AKd5t%? zM44J}-K(W}rHl|o5+?`_i-PUAwgR5a$xiTJe1_{Kw{yE6qkksB zHsc>rBMc!gRYRLw)y`hw%VUgH5)#foY_(Io$HN?V*7?)4I3G_kQzA|@R$lAPOCy3yl z2>b(UZ3{GA@ZE_Yv)@1ZiI@D>mPU70 zmC-i14E>N1v3~%glUiQo{cfSwV`fS@f4ETLjNv`?j6%Ps-O1KU9w(B^EbY3f^O9_h z&wp8cnZoK61hsb{$j%AzYL3^=iZLj$j6Yt2C}VUhEx^aj^!?SRX=#;9%z9lq(uTSQ zDh4T=mVT|4%|N)Gja7m|E2rl9KL2<0hV&5{^syUJbMr<=7;-Jho`xZ={D&{n$%zin z^hUW9=5W!H{$hSPC&BA3(o8_Uv&L3 zHn&~l6P0%NJht?+(O13mN>7?70A%^E*)lZ#!&}`~cV2&#Q{nv^aXoeUJ3X*uP8$r- z;vL)=UVplY&+|OX^_d8d`1X+K!RV2Im!Io!{p{%BIu`LI;Ar^&M`Wga*DvUPe^~cP zj*pl1J7Z4$B!!PHAvV_etDYM#OTyBu>-NM`N554g%jBHfL1H0Vo`)&-pnwhS9M#U~ z%T}f79sR_%dttrI#9GOq%(-Q;0Ac@GTHy7j>#iy<4WV>}rnQMs_}sZU>JJ?NI&%C3 zWVC&1UY*qhhEW?XKY4NHe9ZjKp3xo(Ae_$}Up6-GrH#DFjsw|`e?02UKnl1AN;C~P zn4aTnZ-K`k6MpZJo7b=hne>mRb&;5726d8b;oyjwS7N(?_*HR_f%1sPunu2rcsEbl z=_d1jR<;@9xwfl071B7g%>X{j@a1{&^8Nn{E)`lw!z_F%ZNyF6 zfT*gWG8Gwvtf-oQM9eqLYl1{yrh_4M7PhVJ8d$qg1Uj4a`P0~-)jld?AituCT(VS6YIIBOdc z8BZJ<)JGf|s3QnOJRb&8jD&4F$wSD#HIoeVuM=)vZ1#Aj5nbKTU2mu43ojFrqh?7oa95Gjq)-1MypDIhXt@UY!5K~JTjHNbt zmmR7rIC0R7eJTP=YiQY`Kx0L3V0*#%NjWow$wE$hFUHEBeF|GSjur&2NIu9L!ec|V zN3cD}=mzp3jrG>j`ELNI>(@eM2v4L$s z$9eQU2o`@0>4@l(_&W>learjnT32FO`<~tSOouKy6S;vF>(Ji}*yo;8$BXPRyuWCl z*0zqmc*^H>OlI9>7fuc3^BP={@2+!>bg1QAnl7w>>NvC?+E3O%NS**#24E-(&>c39 zUli?6^q5640w;$?x;L&>UGv*7h#2@wPx@s*{zWjrcl^hPgT=G(ye#ABaQ<`R$_P7V zt^e%c5!S{}D9g{2v@1&vJu&vHw&%X0nm}-@7MN;i)W|GeoSE>_{M)OSsHH@AII|9H zq4e#E&e8<>ynmqiRX@t`QDyYDeK3Bi$ZsbKcrs^!*rO-fX=l@!-!uKk+(d zpZ8i)CvUth=+X2|o}|k-)RVO4F5KX0|Mzpa*!y;j#ToLM2q8L|Of(Gu6e4^sJ>Dcm_cx-amQ- zd`9E_=FRzDICyoH?qsJz0$HNxz|*C=>>2$+ra$Ix+cO0s%VVaaA8VACoxN313^Kps zgM8ET^2_UryFNQ3GhRg`Oe%qYaKqFx2v}=V-9SsWBFkYO$L(`(tP)dcTXfwhMiwKr z$$ZD(Ahv^>>lkaZ(SXk{YS-F1^>s z3wb2((JoODSj>~!jd)v()uhix`!h}ZX2)7iNhOjV8BC2al_$Y*mQNujAH(xx>&LaB z=x`MwB)O4MB(!U&8+jG$TS*l_^#TCxbrN%e-La49YX;6jW;@ivS@oj%95M9i9FR zws~WATJZP#q5mdJumq8GdO*+3B77Ie{#V78Eh)t`?>oT)=fEJeR8356o2_F5c`{HI zhjgbOXI=_^9AU2^I9>8bvsvD^T^_i&g%43)IZzCl=$bNoeX3>QC_55WHY4#t2>N@k zB$<&sGXtV_9GxH*VDbGGE@6=_{R@hh(yl*dG*&wNWn6+JjX7=@J|v54@5V!df6G#a z=&`(M!jOMZ^s#t9`{6z>MnG?TgPxoG{Vd2XvOz7j`Qm#9M6;G$*7R6`&MNS+Vx1Md zbV+qqx%wWRJ3~pZgXP0$4Dw%5aZH3v@!XaLfyKk+TG)L|M9UxXLsCrS*5Au_(q7X? zE#vzd=qD^n&9se*z{m!26F6BZqg)jNyWYnnIYR)2R8n|I`tS#YLkQ&qZXrJXhH46Y zHUoQTKSVyhHGsp!#HxFb+vi9T(GZEKnv~{9w1DiP2TPGJeevg2{jAw54+rY;tB2OH z9evt#-RY!5gB%8^1v&NfMm-eLof1r6y~TOiC^PmdX6V3GQu~L^^2J{a!u3h&2sT!U zJ(iaMdY-9`l=yWGo&HapGCYGqBTN#yB0NT81GrPRhtDNBX&tB^fwzqO;DHJNsXf@8Z?1FMDy(ZVT4M zleqUNh6#HT|G(~nsE+U}IK(fbs1Pu@f$BhBg_lK2*(2|$hQr`}IgEL;WiuRKZ;Q4? z-&~ziUkryLXC^J9G0JV))i(G_&C8HO2|Snmp?x+%D7Q;7b2>Apd8myMXijA$?6FL+ zto((ytR&T0vnfGZn{~Y-Lpn8DhUyr{(q`W?FPed}Q zhs`|;jiKbiBSZJ8`&b4@TIz!rTA^~+02%>YL(}<1dJdFufZ8qHpE{TT1N7?Y-T97> z9@V)MW;%sI*hxb)sDbL!M#Hux@3armD+BRq98kewy$GQPZW${V`kRVA+3EF`Mq@~s zx7Y^MS^*nRVu!ETc*mo)X{z4!p4wu}Vz)Rdmr`Qpzm_`>!@5`x>VJkG2fHM0yqwmV zm8CPeU1PdXv&m{mmalO2`Sy3xq3vUcvN*W%|@gkW^HxzXSer(Mse*N&Jnt?!$O{1xrSPXmW51H*a>_&0A8w zZI-?zYL?Ak*#1G+)fFk$GWD2y$kq5b}j_ zG({G*0XxjwUSR0%)F?g!n~@z}t%+}69k@}~0i1*XxGsarq_;<%gQ&z4Vq$FCDmZaWzUF=db4^AC)<6k((0c7vk#O zMX4W)qbAc@RIlBS!4{7Hl6upGiK4W%)&Ig&0j7%B_Szh@`w|_!@09)XKY8AJcND)E z?}_b=Wl=v?*&HGmK%87o;n=>Mm)zQ8h^B348>4tJ*Z))khz`rjyhKrVcDd=I zqSsmT=sajzY_YXjX!)`h%esq5s^}3I+Z8hR`c;3nE;2K4c-PNc1A}#`6}B&U;1-zo zN$yiT@>!u(;O_9!xnJMjWc?-XWjA)}a6N4g{t|vv;C9W6i`EJI1F~18NU2`C3Kf0z z+zK6_v-U-~?(plI&XU`XpN#!qK&SJ#_|his%J z^1ks)kmRyP=jhdU4bmBK*gI>k4(*%+VPnBLd2FmRYD_j#1?!zZkz0bLLGJz&$h1K zG|6GHd`Z_+3m0KRYbtM^?&j{qW!T{V8F@+mP)q{;XF%Fgi!%_mGF^N%AJkJF0|90K z*S7oEAwywD#!mg2$(sCl==(OW(AAyd=@Lt*$~8tk>4X2^+aA`+cMHV8OYZ)%oVl69 z4!Fe_LTWoD@8dj%VNSu~-xrf8eWU5?x~}Yq;&@W0V_EIM$RQDC|ISvFgt}K{HnuvS zJH@UgH*0Gve2VCN);vVo68J2+`meVkW7 z``>|KJ?3Zxzh*8gI!6GNh7Yl)XU z@Ja25rijoVa7HMfd7QC%WNa}ukC+$*C&9FBD0+qzG_yKWsE%+%U{RJhB&tdY9rLqR z?e?K@3k(@nZ3MHvuTN%>w|&Q0sgqbly)gk>RknTo*dG0;&6W(xp&2((iqmB5O~h^RJP$khN@(B_3RZ)*%qsO4J<=4US8q2c2rlBN32Wgr=KktdHGaBaSi5j&9b z_9pv!lkgezp6cp`|1KN=Y-5AFi6Nnae+SXP(#^-5LE_ zR7Jbgpzt97sY!DuG4MYBV=I0yb;kaNLnvU&mt?UBn<@s{t_T^FnsK^}uet^YCdx&O zb=@UDzW4ZgtBb5}yowN0WF=|mR9JgnIUf%R*KT+p*peOBE$@}YF5$Ig;7>04{3@aN zloInHd~O@;B86ZpzIqV}{fsK@J9}>K7purKlKmcCkm@k!Q=3ZPpNsHkLY`5sF5L>H z5d-?p!*1AJ7n^VYC=@}L8`M8y8@M`Gxwq26byCfv?LXR8^>2XiIY3f%`p=`YQ)3P{ zz8WriwpjeTHMuwC92XpEaH1JQ56}&V{m~5HeICBxKx_Nd!>GUsNdDl!!ZZ9JNy_Pz zu($GU%R3xb_nstV`h32k(0Pb(a_Mq!s~Y>Wjb-VSt^-yUbd5-#e^ zetz+qdBQ9)HUAw)>BpF^Ny8NgAFLF_|dun(DeE9BH7 zEzFxdtFjp1(mDm%As|qWn*^tigzH7mTflbnYfA(UMtyC1PDR(U;iz1z1;XYNMx6~TGVWlt!j1@ z9yNoGc=)!Yw8nXOxnD#9%B%UH>y~pgeUOBV)m#yI-c}PuJnS^ylz-|-0{u%2$0k;1 ziN!!Q+5t%w?X2$Z5jEShL-Z&VUlH1-h|m{8*RMOaP?u(0yog)tGxx5?FPDoH#;ZB2 z4pO@WujjxQuRggjv-dji@@2(I`GG5(y{_L_1_B2!BDN*^|#S-h|;(v zxt9^?2PKb3aTnl+($e@SCE1A!a!2>|Aw2p7FJ6KP+afY;H!|sm5qU`9b^Wp{b7S(~DmJHv9%6!lH}9cnQoxKJxWg1~nRp zno!gAV$Qg*9pp znT^4)Qo+QHHYXC0`*t$w{n}wT3T}fZ{%E+rLpT!K7y4iKT~-?3r3-OqU2od?@!ev+ z(4|xNM30-5r3aDSM%WpgeH;8iq0FtPf}cG=E1c>}1dMDH>uB39oqTe?*SP^nwc7=l zLpy)Aj=BClzVW8zog7Bk^yPnT8W!+KM5+6p^8`%9{Cbb_R}Gqo_8KTZn`LdGK*~5m z!|iva;GYXGjZ&;+u9}G7h`{$7UKy7mp7{>q{j&ucB=^vXX}tj{%SQ1 zjUs>iOHrT-v}xbgh^;9Y`L`EeYGL!?>xt)C!Gm*ue-p~JI3GvsliLmJf<83#Up{uH z7P+v_eSR!bTg!hrE^B+@YD` zY?F4eZ5)e)<5Y#$-3XnWkQde zk#$zWnSK#!*fgwvY=OrR)wTB`<0a-9GVs-L=bZEYhtp+EIQv}GPLiLEJ+_1^&rs|! zzIuug{{26a&OMyz|NY~g6seq3N-D>krXrP7L~=?w&2cM-6e4HFtVE$g&Znr57+cPV z*_Lz8Im~igPGQ3`W^A_o-k-w6x#W$IOhe=aV z$b`a{oY#VDx@D3v@3XJ$6dUVPNzm)urNS-RKcZjV@S=C5I^#%N&qt}xMRljkNaJgh z(7h3udJSLH&Hc&tLF7Xh%@$@J&%CKGjAwD?@88;|9*-Y!dEQAA#>flxI!Ml5+_vPQBI9}DNS7Aa#D zBR@(Odm#NcQBL}j7)10!w5k#@p}6%<$|SSuKvvUAD=zTG$?n!=ej9UQIZpzL+H5`? zco%BacpFDgW*T&Rq;D>w_EsvjkDvMKJ%6e`dK~z3?E6~Ql;c7E_SW-cy<=^m$ ziSxC7?^F1BckG9%myn~3kn`=I zeG|7#&F}sa?DwtO|Gw}{MxcgB#M8W~HZjlZei@@~XJBmY>aJHUEU=K%-laY@o=>*X zJUh8p`?z@QP7^I^K?U3@WmSK-jq{#zEmb(-srxd1zg zTsFH;Ld~JYP1YoX0UHUn{=}^AK(%Un&uJ^OLqpH4ef{8`|J6LM;84cLaFE);QQ`2a znIO0R_p9wIF)!vK3|w4ozcKl?K{xacw^+);6^TJC9oA)I< zIP^|;s#$J2FC`WomGgOmOB0S07FoFX+Ix6jc1ae>JW+64scQ`8^ZaAZr0empqn)>2 z9G57aUtvTdjQu=I&`_yg@nx^}```TO@-vXVpZl*la20ZiY;*1Pz?Fu3z+A~)KSx{O zKVmfKzW`oa6dtmUg4!3=QVA@pSNJi!l_o{p%dB>tlC;e=qVj>|pkUdu_+2hj-hx6T z+msX|Lr|KeCG`9gow;-%ju#s^=AS0)$mx|VzC@)fESTsaX0G{hW$Wt6OOG1+pi@kR zR?BJ{C$z4ip)CDlMKBSC{D#RNEmh)f86%B}6mihRZ;*=#y!?ia)&6JB%kfQ)i)@GK z39=L0+m{Fc2|)l^jgV!w#wnt^V!fmZ#dQ2?dP5R8m6~yJPDkuLGrv)}6M?9B5XHT4 zSVTJjO0hOO${g>xw;qujbz3)m4t}!iTaru2ZU6b7B%>abQ^6?Mg8@B!=J>?aOWDyU z0f@GkD^IfRc3O@1=(}wzg92$4Ivn)wB{jbt&kwlQizIzV(2m^9o9mCSWrasx4fR%5 zi<21B&aZU{0C(J^PkW<<@X(}JC)^BEscB*ULBfEhJqy;Hmr zP9x#=zjL^+>jC65^8ST;kKRY;-PqIY>2Tm3*JBY?NV_Nwpn;Khi)`eaPKS@3#+kGJ zIccslsDPWjW(IAC1$|N54IfTE4=vov4^VmwqUFlyWiaqY)Q*&(H0NPR!k<0kC+|#_ zvCLZLV${2(xv%%e&c5bH9~vpjT>ZFTACz2W4e9UY_=k@C1LVtPGPLFFLbu2e-|F-Zu*Q0gg`T{&==W`wO_b1 zLT}PT<3M*e4(f(h*8ZDz>pFh_tosuv`wTRXTnpWSN|@X7#@k)Dm6L0qRo9~u(fkkNx|9X@SLz&%E<&bw2VniZAHxMv+$k zqC3lp+avo#o+-`2GV%RWxLWyW5ns9$F}7#<*|GPcPn})veSOXX?LN=0#C0FLbi7}Z zWABpAUgXvuJ~L_WFGqnU3cPywVi7FNPANi1@25!_=hx`$zq=O4AB zFSA<@yv>f&AoG@v{N5`L`t1Nmh=kjJ%+A^qv2wdMT{Z4 zF{7BsTi;eN81J5oexJH$rF^)DJU(^f95a=d`44>13GNp}| zZ|K2&gyXS)vcIt-@w{F-x;OHhU+wo$b%tT4NuLFnB5xih)m*)+cL?kqD4$6rp@DQB zx+4R>aCwdHR#mx((l*9%-)3TLNs*1(xPnTp=|szQ*q-+5JMIPk5NP7!e)tw3!Q}R<@}YK5Uzw5CK$uP4Wf+?~AeA zXc9M7OTO>E$xY~YM*b=Tk`NC7?FQ{6MV`oSF2MjZgAHRpPW@m1m|$tkLPu3R2jT>Q z_e~pf+Y&@UbC{Vp3{=vaiYun<)@7nIP*t`KzetkX_&5vEDmpPrkSy6E5cB|GU6H4I z#gsysbO7CEsEQ<(h~n%o_I!SWdCLa{eI|LLe}2A>1V%np?SCb?(L-y-$(tG zD+9~W{eoc`4dWmF_}@b+swuVUUbWy&P$+ZD@=RzHHi1kiTWq{xyD^y= zQbldR0AO6yU(6y4D()4OI>ra|-(9iZbkx%Jox`?Qj!ANAnRE{lA~+_vyN#>!Cq|yV z1_HpMXi>`oX6+j$Hk`5*Zvmpz5(3ShR1vviTeb2+8-VXHJ}u)d^otJZ@#^U{CV))q z_S)c7t;#su#pgq#&xOb!TiFu<><6}RdF~Cd(~y7M1?5c+ELT8)1R!jd6W2E|tx>#d zJD2&pgGEBl4xG4klOQbQ3EiX96wY6M-%`6k&c-qVp#gzZCXm@E5aR_Pwu}-ik0sws zTi`iJ>{Jb*3>a;9-qqw!9rDmbVj_mmqY#kHA=+L$HkaN@gDT2W6!HCPPxl{vOG{@k zuS)AyV%l9*Boi05pB}!}O+gPi^8vmYA45{N&b7l;e%Cg>_)>m`uiy<7QBD}l+Bww~ zh@01&Eyq;8ctfvO7lV11cb}VE3NU13QP%Rm-qqT{J{obFm!NGX@>;5Q5gNa=(DqeP zht1CdCFsFViuXjUSwhsjuvIIhx@rjZjmMVe>cLw-M6{NL!ZHg zpX5{7!n`D-N8fLkSbV`s*;!gLu)U8(S@~oedDUg)4n>LVRISwEpnN;>{|ff3is=ccihvzv?Ya?o$HRd{5!;Lc#u4V}31eIY zQcuTCW*h%tu}1Zm%K~aNk?rM&ZJNWS3RKK(}Xc3!6pY8RRM_?&1cN!b+qRON6X9m*VRuo4&@QiZ0xdb5}Ly{4h69Yb3a-w5d-0-xP@7X^9! ze4jvf0IzO~=mS>KNN`iYMisaO#LZmYo#zAucS6Dy{>Jzh4Zy!ZkabzrqPikl?N#> z6|=eSQq4n2Zo5~#KufCj8}*ipTxX5*&AM-&;(u(dL>|Ix96QMokmn4pmIcaP}NS@aAl2ELp>WaTFyES>&VX%h51S9hByOs4!J>!u>*Aa?!|d zrP8zc|3(V}r^KjC6>@8c*77uERIp#-t`g6mm=qvY)$DuM8|g`idEX9r&2z-M zv&%?KBkPv2(Hm~U%HcVOD;ejn{Bvo|^Oc62p9s1(d9$rDH~SuMVosxH8Em#p^bx;( z2bIzztNi>C_6FO5IcM_Zwg6I$@@CHcf{PNzBxM4*Ub`pmrWu^dnEq9sd<=8?8$OqV z8c+#(9j}LP5sYg+(Kf$ugkjNo2qT|up1msHtWFijQCc*veZOj9>V~yV&AkzE$fNV8 zULZsBOUJ}VS(m@34_OFMl=Yi7C3QH@#;8%Xa7OARr+F%ky*NnjK;dg3_{$#)ntl}w zkt=URzCQabQj3vtESS3a6dLR`K%YKWt&`5_80aY1k$Y0IkYpHXL2Aq{VJd~?OC+vK0p9Att2lV zIQxPR(DWxxe9!}9*1XtWC_tcvvgOo8H9~+(Hkl)PHy=>oAPM4|oJKGRt~i=sOKvpz zlbR{zQV~-9+EVHt$zqdjeP=Li?IO|J7A}ltw%7(E=i*HqJDj0b)8Gk000#vO&0|AK z$1?CTq#f0D!qAlUH<`KuanBM&*VfL*VWh65EXS;Smx~~5Tyd_ea8b&N)!_^F9)>Ot z@X`Aj0t7j><Oz{VykoTmDyGrE+ zPIRPYw1IKrxl57Pg7brSW4k(L%v7hkq3<+Af1OI5@4Qxw`F_H(fHj#Sk~zfOa|x<` zPz)!%_OaADYIm?3VOsIz4V%pEeM+Z*I@URM$LHriXsX}7z=MvLJhA`z)98YsQy`rv z?JTaHo-*=W#$;e;fs zJcuL+7thQ`Mj!5yE9#>8Bsw8ee`TijhB9Os6L>U2e7GVC8-k5W7~btGEcsQ3UqTPu zki0fc-Xa~!Ahk8%Wl6gcjjCQnjgd;&?9Kh)pXuquw}pkK+Xx-*ar=qxWt2%=dGS93 zSMHi05oOC&y|i)H6mE+tuq~svIyqmwEYa@qV!y&@vbm^8Z2ZB84G-02`D3GJUjQoK zYe$dA=nE#d%ZZIm{pHj*HI?EN|3VrueU#MeSE#oWqPpNNQnxTt7Bh&~s5A~{^zO@@ z49CItlAX*ZEQHbe%5m5^vQ*Wx=aFjb3&xshoqwl1y zzJB)L!@8SUOYZUE_XNAN9t?2i_jI=)U$f{&FH{c4{w3 z=>ekeYBS1TSQGuW$*NFw zH+Ga;5MvLMwp1wHtp{?~K9e`h`@2J=!`jL0)24Q%!KB@cs^td zoW|FIcPLY)uUKisW{`r^qX`ml#WQ65T-q;r>h|Y{D|{p^?TF#kJe&7^-@WsX{>~Ls zKEER}c?9SJzB3gSISS~pE6=N+;^(=2L0=8%0t&}R7YYd)-Z^=vK3~sqBjIJSS@D>6 zu!s%x_9nh%2Tz-GYg%7mI_k<%jmyAxF zy@lg`tx-9RsEe$5gk&Z%2cq$>+F(vP^W69>;g-V;sA~~4w=2A)GRqoGotm!9N^l94 z6QYb6Y2p9)nVm$GKozH-jl24fhb^H)>rdDm3K+F9H*D^kgRgsZ-q^63*L?s;y6TGj!3MOxX_U9Ssb|a*)*KuX(QNNUb*TF@x`(agg&Y@->-hU(?D<9UO1Y!Ja zCf1H%@6!Nx#6{8MucG{t2U?PU+54UZm`1N2oKG|G40RklJ3R+k(ve+X1S!&xW-^uS zdc?AwfjTy#tA0tYXLk{Cj6&D68p0=G-318To$ck%*#X=SoSaWa0a)q4`8!eHg~VSK z#;I|9Pd@ov(J26{Ebz zIWK8kM;Yr_ZIB)?*J0PFs>ob1I8Z_7LviK_Y*g*-6xEDr!Q>?E2C@@7?l5 zE!mG_m9q|oS_659pM+NG{_FfN2N9S;96kP@F#>Q%i17hDxX=G>H#~+0!dLvsn_c-j zpx}tnrUd<1$6d20EzS`GRLv<=l85yBVudJjrD zaX_ilaKX`D{S0>I&8yuPqQXK}P!ZvCN-cd$2V>UfsYfa9zZAvKpk;>*$ zXady*^+>&T)2R(^5?jlNzO^{`F=r=KNp0R8N`$hX-8ywRuBr5mINs*Q+sq69!sMa- zVxNw1w(vN>Gj|na@PhM$K&V!gq?Mi zDji#GKe4IB4~KS^)Y7~jYgx`Houws;k5Ezr$WSTk<>&jJ?B?0-Qww-*^)#~gPwdG) zW^B@Sf?$jy>BHBNlF?s)%KkuvevYm{0zilUog_s3tRu^*+QkJYG~UE;o9I!5)dDdt zMU2_VREerE;&O9PmWC_7-|Mg*W^aj3+!6@eDg>&MY_;VA4Rm2ve*u!d96}mHRmQau zv?y+$Qim&6M1%r1glY~q*H4gl?K2$kX|hNP0Ep)Xq;~feDBUc`Ii=qPP#Bln zR)nfMRx+FJNuRBgrI*p&@MB-FUhDuia93lyK+t3q8{)tPD-wEZn=@tmDVI=|kR>#@ zf*)DdVC3k;wvVT;z+I_JnZcOavS}B)ijZ2_iXaOZ{kLCE@U3F)E0!DL0fc}Amc1T0 zgNPifcqQ)Qd3P>GZ=-2z;`KMj+!(I9gc0B`P*CScHqZdxeuyD%WGlNox~W4DeL zAqK$8;{wN%`Voad{JO<5R;@UgLMm*EV2g|+(1z3@7&d~I>P}vyldI#YDP;p@IN38r zTVS*0UuJ<5;-{XS#_-*zFAgSWdy^ie{0a!(z+loCJK29c-qpcq5E9LsQ0o1q7Pf_p zy@_frdH5voR$b(&2%i$}&_&E%bVy(3vLUqGdP2m7b6bb?B^<#36{cfShctFBB7e

      =6P36asBeO8&My_aUYo?GW5t0N&TLgzv%C_w8Lb(Nm zq#ke5YJwYd5UN}M11LWep!|}`fM6y(*Di*r0|Ry3D4zn2&_pwoKt@@ z{U&!muW%$S&@GdMHexnaxURX5D3dh%);WaXiRy)JD%YESFH+i8)e1(&!XCMVfhOyF zH>N)#zP*j{H7)2&7H$zwY;W0hd-$h@$n0k}XX59)QpfOMDj?oaH9O>vonVV~;{G;< zlY9Pxx%ehik73hrg%5vW3) zU?93PwDU2|^y`zyUI1^C;J>t@b)2oRb)q-bUo#oAQ@+7v2J_iDWrkOgClFd1Ry zC1erGOpK^9L8O42Ixd2F*wbx6^XR_2zGLt8ctujP5m&g&Xo%0t@U{b}ZU%(|`*eB5 z9!eLtg3&`NXdoz(gJv#D)bg94IXyu2)#f#`$Gw9QlvZhVqq>c`0 zx_vrKW_^h#ys!Sf7#sSy*~h?lh|c;nod~_t1LYMR${Gu@yZm>J#y%TQj%!Z?!*G`N z7j;BRnk)&E^u0Hs-9_&f>g{3(X3P#*0_n?*(A1H=ymn*la)3KwsT0-9*(0U`8`iJP zi>mC?)4j_mVal2i6#?yi9MS7dK$L&O)5pG9hC(XA6;V}jThi#Ee|V!;jZj=Y6xIkW zssMfiMLp0I54Z&sQ@DPPojkR*5ZL!?!^YWV&j>~zu?%p=S;*yxlZkQYu-kHFD{L3iG8R-A8u|pQ zOomZ$%hsH#FWixKz#J`Ia?M#!#xH6x)bE-eu$zXjmn72B{ZHFU`S$MB)`I`M&B;xp zk0Hk}dwaU^opa}9w0e6}$FLaS3*q#33w(u3ek2~n+LIqTx%!h=L&?Puh>20MMd}&# zIHe5bV8wpEMPK91zsg{Qyd7giTtby3vAvq*+z`q~ zPn~FPSmJOY8C;{Vmu5gVz`8RrwJmU9Iy|y*6S7^~9t!IzS^T(vo-M>xBMvjKZu9P< zU-54~@q?V6W^3Q~c^ZKue60Z^*AaITP)G{;f4Oj_0Go?UFRjPW7*R2t_{_&` zp(d<#RD~GjE!vR{!9r^hV@kM1dc@hL_4q|j{T^NWa6E$3-S!hR^SLVJWLc2PrwPt- zk~Tef8J*A(0k%MhXei=?myPaC@8O0f)=_}Q9S&J9b^ow#0IM`4#*0PF)teiCedXN{Iv`30~BUd+Ce4XgfVS^?=A1)m?6lpRoVN8co6xq30hul42Ov ztg`{=rmJ3{9i zxP%5el7fHKk3|eVounhipeXbh5K%$qDmS6c7CT>?woCDSuxfK;yzRW)%URq*8t*z4s6 z1c~zP4uR!9-ziMJncz8&;eG)uACd%fJS4*H59lW>o4_NZx*_1TAtX>ydQFDX7$-=knotUhj1s`GC7V+gm-4_Z#c-8%H2t(g!8V{3W%ST~b{* z5jyT{U;8=9vaqvG8y`cvKL6mo&pJ2DH~v%%0lvo!g}~lpF)!!zLaH0LJvma_0#(yI z*KBWvKdMe>KxhWse4udwMZE)nlku7d_q}1G*Kk8%fGbGQXN~g8DbXF zwR$98+Pr09aV}}^hWe4i8bu; zn|sv{>+c@|C5sEmo7KIDFVr{hGHp2UaByrba_L+m{GZ~jqlyP~&pm53R)NPp2cID` zN-(vq?oh67MW;68kJ3}wbMg0MD{dY9HHfeCI+@;`@oMMN*De4X^xK%o|mXsJ)hI?dJtBPV6 znKi{O2Ogi_mIw+bJJ1`poEA$ErX}c^-H&-rz09p+aI=aZ;|#OJBO4fvrblm#)->m= zRxz0$xgL2vEycN3kCOh?lcM)ZY`Y2+*9nNWZ!4Kj-bvXlM(mT<^2+yJ6x9;kQ+xT? zTRc8+|BI)sGM|!jus`muJven&9`Ymasm1};rFHb1Ynb`GHde?SMsu@Xcx2XzoKpY& z8&T+;0D8$-;k*{!UC;!RvpKGOhw{9kzREs99J7hC0=9cwt}e(!YxcY|~MFbn~Lx3BN{FUcA$;k8&yqaSNg zbyLp})OIiY>4-R0Pzbl)jf7+T-DB;xTjT~)@K351E_{CbX^DnkBmB+bX<6Y%49ahv z%Pjm%yS2IcYJFZcD~AP=1YP<#D!+M-leHHY&TxGiBTH(2z*~2g^>VPa0}=9YUxw|a zl_e1kfk>jKv$lM7LdOMK<5upXE7Cly{2hvo3~dVXt|+{OK7H9NP~P$78C+&wwPQEz z;feq1R}N6Y9cX#+{mHeH7kOen1Hw(E%@xYII>`X>d1Xj(G4A;wh~W2ue%kAirW`(s&rEgY!qt;@Jwj zqqSC0b8}|m_}IfuI4|efPMM?QH~r=;U({O#-}b}C`T*?_C#RP4YpU(jj?+b3`>mMM zj}>P_UyIfRrmfEfebr8zGQ}5KT{d(5Ihgq3`Tz8d_I$Dbt@W3>oG?#oyS~~(W%Z*m z20)+I(4ve5yD{6(hbd5edZJqPk$PaEaNkiL&?PTji^sQFy;hv&7%c%d#+(_2GF{-l62 z{t2FLF)5VU6SvqDC~Z((`n_Lf@$lH)5e2Q_PY0td7z(#8S(BvQ4n})N-zn27KBX1? z+`QAUy68A#`TR@eIM*zm6K|`sHfjV4tot{aR?S##;eq4&mt$UAh^UK3>mx^Z%VUlt zf7`s97yeiJ+4lGAz>@#Nmh(i*=cXJc(vBNj=aW9egHhhotu$3m4qt0v(MQ{!e829lx zep0JKxCGZ%K1?{&{!V`gq2kaOFQ`tRkwIKf3#^-PD2^$TeHA{Hw)f``@B%rYpL0v_ zD38C`1)Vcqn|F;7TxJ8wdq#TCxWbu>G-7tRC_%f)Y$7t)4R1#7^0sYP#@HzlSZF)8 zBbDCTjDzXfDXqsh0T4l1+~V+hGo2yD1Mxd_onjo=7_l+4#r3wQ5-2%lDBFOBxLkI` zUkq3vc$|blg8|%dWc9?>?p5odb^iUL{-87Q^o7g zZ6LoFvXgxgT=sVkjAW%!wrk&w8ghP$+lF zW(7w7Q_XDP9+-A)oQ8U}=Mno|F6BV&QVSNr6&a`!vNMLfO#rZCarCqdl(QhK91Lef zIUI`b+?u8Zd%y9b0l_0HPV`W3t0@GkqaW-=TW^R$bp^Pfz<~TFPYNl*qysU4F{WPf zv88Vedkw`o@<=oU50qE}{h=iUL;dSua+A?++e_XEo#+5~PoP?%;P#G*MM&JDW5<74 zN5KP0M*?8!s$-Y@8r8qRosk&yCDHNJp->B3Sd9@z{l)$3eFTdFKEk1aMk*snGL+3>N-QZ;dA2^+J1Y z6K&XUmoi@pmy@8U!;~L{$|I)%qV+o4z6ychRH5Y`PeJcpIsAs$WA~iGG~bV73*q z2Ji3NcLZpv>I<3z@vkQ*m|!KM>fc)Ov}+1Sp2FpJv$>?6@{kIy_bi7Ae9$X!4-KNw zrf8O*6>*f_8G62iEvBT61+pgFXX3aimK=T`pJTfj6C}t`^~i2W5gwb?i7eNJ_-`es zjp|e7(xP$dZZEW$l9|UtY4@pFUCQ6O6E|+AQkb>NhRwAdq_Uu1?y|AX@YMo4>{n%! zfCp{}0))-@5|JryqNpoSQA_e55G`9YC-WDA^0TFmekC&;*#UU9R~*YSzhgyFDANTb z``%HP(0*NlEwgbdpFi&BX{^oGb{XICunuhsi@aA~ar;1Uoz8CsqZlb(> zy&Si$ysz;(Xf3#T_ryV~p@_qJmv))at0c7`?(u9_EZUt#YLTiB1TBqSl^9f(xia*- zS5D&1pT&o|gYjcen5TT8v}x?Ps8$e>jVJX~s$h z!OV<|jh+vg@+e^#v9A;xhqijP@i_f0nT|dB<>_U6-JOVXAdU6hy%Q)&KC)U@jX*I9 zH!S9LT8l#87TnuAl`a^8=uDN`sl2hxAeG@P%WBdDEg#ut&aT!(EhePOh#V=FavvT> zct+@7mFv}ZAAa_@ChgXvb~8z+oNxPgV+no1vQ*vfHIDt`$M&qbOycUvJb1EAq$grc zOfx7h4TpG=899EVD6jZ%a2=49nTegFEw`-ODr5-j$nzR>Bu<@BrXMfJ)hF? z;kQBn)yN!nzAxJf`t79WBEy}7(0lvO)M+YE=D79m(dn2lfXd&rzarc=v1&5c_qDKO zR(j#7B7*eI>g|?r1iZzkGgXcnS-YIn(G>NooLkw`j9g2*;dZ6q5i$bZRx#MkK+f^* zt}uL|)6b2P_`5MD8}8x$oih4cSo$?GN3FYRkX z*Im|&vTEkJ;x-k)22?IWzt3=_dyQ@j?j`x}PIuApR8YxUf(jKW^}PFFb&sBGK5-72 z${-#V)FpZKYOMJ@J6v%X=ay#V*2sgUH@ORHtDbu^m^x3Cq5Vt+O_N1toHJSs?_EBk zh+nunXtavoNzjG({>w_NINcHKF5ehn*|cY=<6-i0IxCaZe4#wy=7A>$S7h05mfMp~ z?G6ODfi?FEa<`uNf(Eukp_U;X4qfJU1j>fQY+jRD`H_CWyiNFN97YY$1AgWx9N;_`oYiXJ~AC91V6baoAFi)?RucJrHyM zLE^~Qh1Q;nlp6u;g#JayF?Z7U6@z1z=n2nH?@8&7ZTP zTw?xOqL-zw<*DhAZfC!bnQdIV6lsm!nbBUzEjU6ae+b^Gbc>y~`9%YAb43tedfS_} zq>KJJ{Z@^r@ZWPw^SCx_XCk(e8C;ZoS{d$@kmKs`$7Yy&Z?ISY0wo zWL1PYEncXP!7{2AgEv9Hf6qPsc<@I!(Lq~f@5=pn8V;}Cr~dCH zHFcU=1digRMqrA`23G?oX_l2BL@0+haTYYef;~)?NHc|R^9RiT3hvDq`* z7KA2v(~ZdVmGVsQ-D9q1@ZI0CTN&HgXvCoB`iFN&?1PA1owKz%P};j!Pcw_3r;RdA zd?u$IXKhHIReCL$b4Vf-&__Z+K(xJN(!I}oj^UAb`I@VkAAr%D0vx}|UOWNTZWr0i z#tAyC))xyf#3txuETn>2>$sJIga<+QpjP!ud~!$CliqszijVTlrkLV!|}~ zTT^>+53=RzxpaPP#C6B4ZKPzMExKlxyXIPK@=zZzK3`;*Ol0Hj)~pUJ#se3aMhMnA zIqmhF;=06((>e%oE*F}p?p-mJN1JZ2yE)}E=yd5NSxOG{K0DkWR2=xv4#F3O_(wim z9J`AzjJ(rNS|bx2D*-_@5V6Pz*XB|QNFv@YwRlB!8_B-^x_b>um%c%QM+-HUHk3|X zJzj6t%8v9A&wu7BDN!4Mb$~_!;{nSF%G(Sg3Oc6PL=Qlx?gnw#gg4eX-#IH>TaykG zV?(Ak-Z6tpz)-+aj!Y8G7lkEE6K2RgfSE)#AL~J7s=9C<98{S}a#f3JmO{n4ZqDWz zjVVPSrM|Sti`b#;0L7h&wl+TGj3z!*my&@MFJ>;5DFS9$SR>pE8<9EHUb~O8_}TIJ z%s`laX9N>7{!6tsbn;TBFL*DuKu{MOz(w&L^Oo?YM2vsCu#KyutEG8&?|a~~p_@CGuC@~grU`}66lw?iM)8NTxUl<{c! za5c>ORLAyYX_d@--s5`XhdK{ij<$ch9Y6nDx-qbqSUu)vxjH@6WA2|}3zN^~vXtJFdI#txnr2}FIrR_d5A@ikO$O3?>vyuh^! z$&jL0k(M^y1ylOZ6v>k zhBiKEt(dHoG(7A`W=iws)_Rw78m0#qwiz8~vzp~x^VySeFSl?*TY^&sx{PHUvWQFm z`+m#!wgNt>o5iVIV{j5u-g3ib)$bw>T}@3q7MbVEh9`G?e)FwtN*?ri_fhwrWrL;9 ziJ~US3E-6FT_yPl=^5t@2ceuJ`D;#lMclrU%VVB%x^^z2|K`KY;fJ>aCbOJ1ciwj$ zbJKmA#7eBf(hr<_Dbj%den)w9A_1B?W-C5Oio~vO7{qS-bWD!_l8ti^+*=#maNokR z1v1Qc0}xSvCtl{C`(!-mjC8{jAN0K8%9|inHkGV9R0~`B z9SeMwn{zJ&IBLP^MH8TC1JADTb(GoW9=JgMHOjH>O{<5{&x$W_Ekd+> z7pK325q^cqdf*shsf;_HGSdeLKz~K#m_OXr*_5Xc7;$^}I3+x$c!2|oXh1WS%n)A| zXP{h`;b_X{uJ(eU9~s=eQ53-}cgbSmAgpc{*EV!lnE|eskJ&CQmd3}dllS0!L`noY zSjBr`nUql&SunK=f=`cG=utHw)oepv;dz~}1(Xa1 zjpL?|#TSeI{45gL{O#C%a^bV}p(Vh^`QPGC9tBLdfOGo!NzvEQz^EhHTt?)?fz}V# z4P~T{F8a^x&QVgxGTD4K51k(Tz+{R}j$|~zr6+$nZg7rm(|uE1;EJtK)x$w*K1Jcz zgi5siCW8;$zxMC(I@cb22Rko0y{chNn)dh?YM)c0>$JEMg6;ZrAU~2rjj}zIKf&!6E%Xdl+W_tK&^EwUj}z= z9(oikV@M@y=;|TQCs~&N!M;#MrNl|SFS^Y93MjXLphRUEpm`3&KLRFl37%K~kG%b_ zvkWK>?_Cs(Xp_NyRV>g0MBwC4B{twS3tIIS-8j`D*P%_DC}$lb`O3ItNY<8?#I}9 za@Moe1GRrkR>B{$bB1w4nxo=Hn82Qb?Yzh%7mgizbjhet>6S+7H=Vv(HQMyPCpYiB z<3HB*HtDk+XYj6m@`txGyV@$hQ$DM7D}_O?e^UDnUQ;g9R-nE7@t;~xSycMuf%fO$ z@81Jz7Lp)RdFrU)H8_nT{7yKdf7G{NU#fC81yKrQ5e)&U zsG`Z{8b=QwXayz?YQV%HcE9U+dj&CmA%ofT@uyOg>Sks%dIvS0Dt)w3bT9j8@LV_c zAMdc1Kp>eD&S4^4veIDC*h{~^>=>Hbf}b0;K?RO~zV8s)u~-j^^FnMR))h$bTj#k? zZhcgNO2inA5PThJzb)|J$iFp=Y+x*1(SbW+vj;8SH=OTauUx-__^{p}=*>S@IJwav z=r?v#FBh{Xo~*^TX5FmrB`r3c{N^mf7l%Pr=$iP8sgK_&^D)||YmZ+^k%*9^GNYB@%7mGzk=UD#C1-XcA+L8Ya z4etP;h5gUJe^M9a7i+uVs$hRljGw1%|MPE#s3mb+$bd2b++L%{RUQM1%C=Jg||RO3cBhYdrXNbmZs)0+q+u z_b51UpYQNIpP1gcMm<%kD5Ylk=LX)g0L?zAB70$En>kp#Z(mbNqXX;mS#)E;gN_yG zOOfj|)0x0D>kF$(PNw}c%uz8g4+$}BV_;MMGnjVoC+MIGuCiSGt<1N!|0C%v+?xFU zKK}bEh$sq(h+v>n(x4JbDIt=RZicjgAUPO}DWNn-Dk5D{0|ceENr`}TOk#|#!A6a- ze&+S;FW9-xy>p*^-tjvBFZO;p&F3=DCFUXV+xj){dG_xA9@qbqC1T$#JulRL$CvE= zd6;zAUKiP3-LznDXf%*hYJ4UirMmRM(->@rTM-~nd2hUkWsBc9l^@z2xmz|@d5b5eIq#g@oB(U(>(7#Q%=9QBk!`1P%|qTAv_NaH$j z>87U;ZhteHIhJN^dXlTjmGCdRr}wM|bWj@sFoauSg0T*0dgE?*)J@tnl7epzWK7YG z5kLyU4~MeAT6y&z2I7R9bZLA@8{XXN0Yl$MuXP*-H*2=LY>9K*WzLLMD+dD%%wnp} zB3MF*nJk=YI`6h4m7Q`3Mhc!iZ}UCgE~D$q4%g=0TPF)6IjG4p&WgG^SUbUMwHo&x z6aiq?ID$f8R{%i9^b5zD1U;y(Z;jRSpYJ`Br7n8)dfv8#Vx_x zcFGc_M#w$bU@WsN$5JX!v+H0@As#oY>%4-KP!KJBS)VN4Z-AfPqL=E! z&*30;062EtP0G?eK1FY z0$D8G-h?(2GskryE(w_mmz zfdLbHGY2b6Pq@Zl)B`ZGjfkBx7{OrCL~l@bZ-#8hMHax*3_7_1E!h$h)GZ%JHpQrePXvl2pDJ4JEpd~Ya-9L+S4=o zKJc|V*WW&f_>Wz^uyE`H_lrM@dW?xGTuj#$5VVQQ^MjqTqG{-lBTqBi=bH5l&$6t`lhme`@6pPYcJe|E zgZzFBT{M!xXowFWW0J0vKLfR|JEmD-uvy^y^qBgSJHihhO1$=lST6^kIvgVCeeMu7 z$9J#HHtzMr(4CX=n@e2Cl2x7jQHlX0_s&XYM#Yuu$R1p2K9PA?nFBDm7--kN7nSSEBB* zEdIT0Wyv#ln@v$+vQ>QJq5fk2(0@YbDpj}dpjT8?_fj7Fda%@T1}t9%7$Enrl(uYh zj@E(wNoQOt;6<*_s%x12uLydjc2%dyI>+7^&b;C08yxDn4ZHQh>3GNVnF0xM&-rg- zbPB#Bzx^cXPf=_9@B+Q{iN7Ot?WW9;@1Mn=9=GROMa|eSnOxcL!Q*vj2NXXY+qj-E z*ahS)_7z245R?VR=E1I>#b7=>oU(d?>OCjOlRNg`-uCU0OrRxcYv5L4a)Slk{jT2v z8Lly>JTZW**9kv(T@gu9E?bJ(*6;)}MA4g5z`Q8A)bnE&`tX>PA!;iIvP$1U2$?(P z&@8Kt)-ui0Ru3411UhV|ECllnwO_RN!bc3eh4HxaD-HT}-v%mBwt(45@5VO<Or8Cn$yIp$^tok>=v$Z zdpm*|xjw@@x6`Vag(ZGu=9G!ts`ZdbOKb)gUqLeH@!6{Yph4C!Yzo6*Fb*gBiQZG& zQ?eU%qTbO0j#Nd%0!+`AU2$6-?!9;*BCFCw+;=y;x;8x9SH!v9Qf0>|{mg;hX{M9> zSU5JvX$<4F_`A7n%(`vr*4h3zLKOV$KtZidYL2+0zFj|=iBlTbQ`DgJ%=d zr~6D%px^)p+a(Oval3CwBepW_n*6A_x+&V&Ty|MTVhRa#VEUWEQzybA4_>N*SAN zIbA)2sW)Wq&91n>{b*tC{7*acqWpC5G63sV_w}6KG-Pt}4W~tq6EV@BzkCD(O0lv; zMv;s}1mR@Bh1#>uI7@oa?{~5^{brXw_+D0QXTFJcMH(qhZ{}mNpG9rdtRi?uMM`VF zPpwMc&JA9_MK#uRAC}BvWC4Hpq!CFC=g4h)!|!ah5f9Imwm`u-F!70yhZ}Wwm{QtH z=EyFwTd&X5!OACKW5q^yavXW1LLRJrU!3VqzzrWn<(8zGQF5ygoK@UjrW3Zdse(8`T1fht{= zp|IR>I99-7AVkaydE1#gNS`CCnF~Wi3>Z8?%T@HuTVZn>hae9`OE36qa57hyJ^cjMLfoB&>?lqZ`{7VfZ zbL|9e+QB@sNM7$en*7lWS>Jd4cyBvww)@KR8uS}#2Oyw5N(sP$eI~W3a}QBU`F_gwsXH=uBGas37CN?MFj4ZMu;lzb)pk0=CziEYj8}o7DS3!Jxg>*ct>j>7U6wduZ z1ow_q@0jaBwJniWk+lgZrvJPakbwd9^jjRr05d?}k<1(1sjMftT3iFH5MoFSk@@;% z7IYh753A>F+uVo{baj?DACu8_nHj&e*RdtoQt@p_CZP0^i&n)H5XzTe=B)S-xvcKS~c`mI4m7j1)T9f`I@=y>I3uPN&~FyT&w;rF`Fzg@&D z$kN(CZ*ew*`)wlLb(bgFEZp3V0D%)O&Bx;Qx^+z3zH_VGucI8(F$J#!aDzsjX}J8; z>PRZ>rB(4DvnJ>Qt(vftUP#nNaru1vI1qRWU23*F&A!Bt^nEv5&r?+HnQ@H?`Cln$~Cc z7WPN$VM~%{4&OqUAO^k7tY!6{LFo}I-XI`mwdv_8CPcWMc12Q_%*ePPGCJuePYfzZ zXI%DyY_PlB1+J%ACi$v~p^A6;Dq0G(Q2}J(ODZEk!}iCeMA~S_53raHSbebReih0# zk_O&29gh?muvZ>#RcBz)!tID%K1&Sl_=6XIfolE7V^*@q@2~L2AHGckK+&lOEJTufu!wt?^Qw;K0In?y7lk@rSWidT_t0v zKo(H#N@TbepqD-E3aWX%WmXAlu2hC1(Qc}U_XOeNRcq>CZ+y1IWcp40ry2Q!Une($AzDN?{di5MDqRF%7IpTvv3FS59l2tb|Gd; zf!w?W-mhX5uj7t}=tB6$j-tf{&eNXys4oyr0u!@6Dbn& z{{9dvg376qAa1O|9-4=yKxxhxj4NOH`ktY8R`RC1f!*<^x?)ltWtW%P^Z@58MKaa2 zbF0h%(I4AK%x#~eb<}uKZY2eYcYkI44p@&k(ch@Z5exu&($G^P)mC-az%VU-W@>0> z*@}4`v}V+q2oPn9ZEaVNM5M_BRPGyXW~HUagfMCk8l6@~&3`X1gWAN)UT(IsQ}Z;; zexjI3LUF=-uht|D2G_*@I@M|1)iEZl3T%j6D(QdxDP) zSx*0^C;##5qXY!oiz*GReg(wRUxqy>f+}(zVHN7RKPly(8f-_#)E(lJB4pKgq;Tiw zQL;0oPD8lGSg?^)^#6#mxu-{(cW2Dr7oL@pS~82LwCrbX`5Z38iB~>;=j|THrOtu@ z^J6qY)^2%UhZ)n8H)qC9r};4QT?f7>jpl9TJm&giDUP1ODYp`+%aP-xzqjv?iE*84 zH)zD!W=!-i5yl+DPuDK;;w4%uoMhlCk28m&bFH~%on&tC$FRrefuSXpYSiQQcw6I^?0Wf6saFVk!>_jn(b?tY0+<%33Z-;t<6&fX^KsWJZ3<`Rm2-jr{ z7vO3MGoOLF-)>U2(}hnSOwln_V2`esHx@r`DJTj@F_ZPdzuEq^FGyYHkJV)ErPJN3 z7nqy+xYAleOn_CB8E|)!;^T##;=e)RyMLS7UH>mS!o#Y`T<`Oz!V)o>OWgU_K~{Le+!sPH zsAj#Xt;+49g5@R%DvbW2G3q~rd0bIZl8!pqNy8J_in0bbOBQyt8I6IvG~hC%;{M{? zNsT;SN3i4!->lf(BWU`*t;7BIQgRcm!9McMe<8(~%J9=& z2XbL8EQG71r#m~a|16FkO@xk2!izh>eyz-8&=JYbsu|*vY4o=a z0;Yw}jYID41&{GjH=amCO%SYA6HJTKl{q=Z2(EYEYHxZeR zXuF$wzX}pAd}$l=e|+PzHY=>*VQVYbRcqLXt<39AZnxS;j#_*Ft3 z&+!rbJL&qLHKq%eR|Qgj%51erEinyVe)tfnjhYk~s5Y12v1sP|0QW>L_1za^Tt3Or z=%)e-Jfqn#&AJ5+YLXbI8UecJFJQuDf(JxZjBsiG&dJ6%47hGC&*1G~-Z+VBb7NpH)74!ENgw6RUe<6p#l7^C6lf4KhC0 ziM}`9&~_9f;N#bJp=9!V2}4AVxP+yOWiW`0MIh|z4FvBzjyS9EmOhX3gL!Nwshl+nw)3t@YVm!DAFQWSC1@kf(`J3-;N)E*(|Im5T88j0%RnK#k#V~=ATb!QrfOPT zExbAS9K|Yss-n!gbj`*e`tf&92^~lNfIgIsaNZpQ^7c$u&ohVIN6b3Vi)#igFiR!L zMA5Vh$MhP|t$I5a=fKj?mRcTu5f}8)C0<0~%z3u9f8 zj*;KLl73w(*WlVs{j5ej;iCWemWfB)UVH_Vv~~JqKzw*d==SaG6tj@O4=!FEyzAC5 zCCw!R4oK54y6F`~1{N=o2Vls2J6vn&lpO&UN3-5cHRv(=dw;#;Q^0f4rFmpMMlbxJ z%<}=#k;tmUVd(iVRl(9BQYkrgeqT^7n)<+n!z51cvDfHU2^~)1uwM<61-|F6m^|?< zFW00zGxXAODEu14@6JXEP4iofKaanLN4_ft-Sl)#%*8jRt-((VdL8H+z(}$gM^?R% zDIhGo#^fr^3_HJSlb$Qse-wP;H5@ZGbhif;V~tEbX8(O@zwGfN?c44xjXNTYnudjI z>|j1zXIQ1&b_7Ck5ZL7hIcE^2rnE=MzTiv^<$9X4TDb3D#ba6a9L_mVLIX+;?)#Et z=55a1zHndHvlBFB9dN|q*=E0)h&2BDY?I>_%4{>|=nXcQ+eWX5gIj5q&AB~0Uy5HZ zAfmu{3nsgkF=mJT_c67W<8J@1xL%u|hS5oEM420Z6*jvQ%U%itZm)=3mASTK(U@{hj&FDK78#nlwK4MIK90zQ zG&BD27jrhE#v<0@o4$+A-{^Osy^C>4t<340Np**sO_t|e)9A+mmh37iBd#LYy%m*; zEm<{dBSA*q{h!#`3k&N&Ptsvd`>r6upxGm1zS$St2%#w#ak!Lp?r~#(9+L0o^iv#G zij|5ey;PerrgLa7=VCHYJ&4kl-c303uG`p!vDACQK+VJ$M8lbsyZrK+NZ=N}`W%LX zaI4ewsi$7U0V6~^0w`W3ZxzOqJ^W!SPid*;CNFgs)%|{OANp=jwCs<2jX>K*tyh)K zWX~R!cn)HIldJ9TL(l4a*!_}UZ|5MP?t%f~Ut|~Ul%fh|sb(alBw|8i4ANXm zCm;mg5CeW5=Y5NlxmBqm=uIzrRNkSVR{*)Y|HCzTa}#D6t5Xq?zi<+8b+V0%J{eXJ zGp}@-IHB81zE^Te&F|3P3>IvlP(1nJE^U22A4syJcFRPu&U!=ES4dDrAVvIjXMfcn z(PP9DduQ{4;KR&v=YAy*u7*ZC2FT%Y-pRF$D zVBe9-R!|GlpC7RsBhXw>bj9FH=VH+&60n}ZUJ&@jh?k!7q2S=gt-%oJJMY-xJK>vD z1Q?Mu!@*&u&DwZk>=~~2QKbKbuyoHws!8=IV*wwqVioOUfDh*~X^t&~dHREr%6aY^ zRLbx%UWi{Nby&+CoH;GPeY4@pyIj@uOu_l93yb{yc3*cQzBVXgikyuzL^g=#>HXWo z+b1~8V%}5dCt`f9*FI6g7n!3dkI-=4LUBk!QSt-pCm)^atvvD(6U{T&6?K-fueG{|T%FU&gJO>G#(SRaVVKR$k0 zzCu;%gkeFXP|NxTaxcWHB!Hqfgn7*EDo#$9Ol7Qdl#K ze-3_bF)g=gW97_9M^H;R1{6`G5@33<^UP8Qj}CH7?6B!8NBewlg8pgrasEi=9r-nu z|85;Uh~Y&?K&K?*#Gg8zJw5zHK$a0=H4&bUb-*mNXVgEpLswwM;Db;sx;iI#7KxRi zP`UXr_`pw**LUF1ik?iOOxCDk869Y)-pIfZGH~r9z@f*ftcnEq%ew|P?IR36)_Wd! zXnL|j=#Sc^=UVb?3l0eRO`wdyu`%8+15{(m*WS`!5~+e110p}z8t>~n>XS^I@Q7=8 z-yLmdE8N-ec78QK&<6Vgi3qjYBHEEra5QBotqVk zb$0Tj*z4kXHSC$J{XBgbvklUdF(BtG zG0@N;`W&Sd-Q zZjY^v*c~NKJ`7H9q>7W=k?}bOgZmUF#L#fEP8G#qfBN2I9!h4})`jLEV<4OkdfClE z`bclSKQR7r!atF$dgiNR4nptAjfAPb9 zS!*fEUGuaxFDgQxPL5%9P$z3W(3J6+lwIo)n|qnhMV_u&V&QRkD;dZ1zQri}gv$zI1q&{aDEm*sonG@qf! z@zNI6li`2nWnNP+6D)~HH%sUDv__%2uPTu=;G16-09n^6q@zphqVL{&ZvEWDtFoyu zHUb-v=Gzx(@XWO~>8DTbE!h+7(}CBsXiUL#5vslI2YoJHXUAYidv7E@&+2kSAXTAScb~j+iZ>}1 z%+l?r!B!8bhBntkUjq9lRv+$0)9>8wZ~gX?C14V!;W1IY8|XLd89I z;lB}%d<3avo3tV-0hX#!r?4#V!io1|bAj;+xM7ldcwI-nJ?Z-e<_~~>X{#C5tW@dP z@+rUs+~)WZ`HN=cx(`Hjx!>wk-B7wFxBx&N%rF|cq8_axMaS-22Eg|A)sgaUCe$Y) zA}@{JR~+kAq9DxLhPiMeW-&uLnd5_wqv_t{;nY+ z94A_Z4$yFPdB29;MoLxqnYTv5>L`36cI^L4VXS3vID6B%xck1kHChhJ6U|PFZYSCQ z2j&l~F4vy+WB0Qr%L2LYu8L09&>X>ZX}Sx*ZVWJTVm<@9r#00_soEu+NhFD&DWXc~;*8pTaFvdtNJ`{wu)_TdV0bQFFg$iDG-BzD$ zx+XVJOoaVtk-HRg8sBJG{{H0g4{=_S+WrCGM${7-Vq#0Oc|RGY2cNO}0j>2$62o)? zG>5t_^Y^g6NnhI)_4`Oq0Mh!$Fl))#&|1dOvxxX{N-+eQ5rq9?kJp;y9xmqfxOs`x zR--s|CU*(UB0TdnEYj!L6 zEWyJJ71En$>Dx#v+4wdkMgsG6gIjSazj96Lz)@P*C9fjNO|Lu8s#M4^~)|zU20M=PE117HFaP z$K{&Ni2$`;fG+t6&X6u9MZzL%iEZD2{MRh0Wj%{8kA(G;*ld=uaO}1=izKq4y^s~H!^5J}-;LTQ0HFiwp zJ$4GG_zG3Jp7EIgo2uI$Fu=GE>f3Sr36c+vBb-zpFHOpp6`ddZOEPHh-$x$*(X^`! zX>C9J+NSGfA<`ebz2=zn=T7EX+kv@d>`s&_T)pPDZtVgT(RcF!kT7&v@bA6#9)R&1 zJvnW`ztQ6Tp4X!{Z}b!J*rOY?@!C*rkwRn*ZZQS!1+ax#(Y)-=@+5zj1GT1y z3+g7be>Q2cec&%g)%cC~nb){lpBxeWv;OlkP^KT>+hEhzs@k$r8w4{zfmhXq4)D2+jh55nF zFSCSMqPNMF_&H>Kvv~UNjv&J>|Mk4M_6O^hKZ&z^HX7CRfjjoZlRI#nx^WF18c-@t zIf`h1n6tl3B2aMjve|t)h4jIj*?BZ@=ZNvbOekMVo9)HLqF^DjlIvGBrihp@RS3Dc zyOH}5Buaj5K<^O@Ir@j$`Xn(1aDaifz0pLGskG<&sW442&6-3u(K=hMBlG1EqVrbk zPN%Pg*ape)DR(24n>}9@Sgb4~yD`!5AS9h)uR_#)vG>#ilCr%$psgI6g6$OL{M#;E zIzezgO9@#SJ0^*Azxki-Dvcqk;DYy~2UPksuQ0lujnrz8r4E<#k)lLg^B~6Uaw@ZW zkD_MxT~Q1Qf)E{FYSaPN+IPyv@(^e>wJm5)+aVulcI^*fn;|lS2Ex6b0E_{;PSkV* zD&KAr?NfU-2bZTQfZ>_1a?vR7YadV|N(_@{kZuP>Y7d4`=G*pNEh}+`bgg#EZP&qF zaAZ!MI?RvG!)t{W;zm2-ZwGY2%>>`YQDEOL_G0>>8OaYGw80VJoFMAR)(v5LV%GiL z0ExA*$W1L0Bp(swL%|=SHuXM7){))9d&1MQiPgllH6q03E?Qheg8@O?URnx#UUO1q zdAQyqK}bjk+9{AbqOwl3L{~*VBSTy>=yu5e{qO86=DG8MnQQWQ;0wO3774d7YDQT$ zSivkD4zDq=*H#e5(=zN}$+qS8_V#Ks;Th4r_i#U5*di4rL0n8X*>Flzh2y3W(&4-- zKa?fQ?uEe3#h%D??~){CQP`XzTW%{WacKAmFqtxalJo+frtV&Wl~BDj=+-(a+kS2C znXKHfr*46r#iJo8FiQHD-CT@RK`>*9qWs#uEyz3p2s!so}r8yW( zS&rl(RqdE)z_fRAYzZ^l_UGLgrf5+AASgj>8R=LFTK^Onu$iw<^j^q)I8hlbe;~FG zlG;B`B~eJYT=)$n)0kyHFvZjz?UOOyGT2;F2l9`P@}P36_u$Tg_c67K_k?COVwnvng%(uwBwzXCY`!|Y2S$T-Ep4M6^*Jq;@!50oq5g9^Bh#*9Q<=m*mwx@m3+Zi#V z&z|)-rJOLKamPm#TL;;R8#xQUs-@r6N(4OQ-EaqBMjUrg+Wk+_`0V3H7pGSon{xz3 zemVl6w%os`gvpHG52if+Y9%$Us%7uoS`~3q)_)tH2>6tgoxK~McqZy4YfQjg|1Jg< zd6pVu!TsDytJr{S_$-Bzg)=vGJb*m3_zQJ`zZulmdP9J*-gu>}i|XHRTM88TF7Xpo zq00aEJn41s$)+mn0BxuRbN~uzm_U>}Eeowl`y1^gNB;O;to_-M6u9@y3UUzHX8h59 z^yq-n;`B_CUlDV5&p|bRW?|``wz@`le~`NM(@{(P)D@R=r&kafB#q#bL8aT=rGlzW zoY%|L&jYR!yRHO3@Hso^=Pa-ON!+P(HXC=ne|43&aJ?ds!KEA62^*4`($KF5qN08~ zrOf?`+pB}vZr@Xk1WI`AO{-=UdIcqY6K1?iS!z;KI|XcD3nlbZj>?1zO*U5Zhs*Ri zL|oiI)-0bnvEjpI#wpd@=nUz5u|_Kaax|v%Qip zaV*q)y_Wn0OVw?$)HMH^{{^94RPK#4a6iS@rbV}b(6$Y>Qo+9Sl1BG6DxMmYn4ktP zK&$pIjYX{>7M@LQ^XHt8b*S!FS^-1z_91mi_IN@<1z;!JK&(mn$D2?8~rCJt2-MeFe*mV(3g}XPO|9sit zv-H0K7@-bKzZO!^q|}ylyBxN|^J@Msna-<}u`-7NRrriM-X8wzqCXvhJiK!~yZH(P z<7%ExNuOrtI3eamNTYGvz9+h0el6hxvowYgSA!}2`OSA|Rxsl#UG;r)zpM>zX`a}{ zKf>w&eIU2^nM2=WoN4AQ4%aJAz=xR;&jKDiq|>ZqDCe?1n>Sl2>_S@9VLpUK^cvIrPS0}M(3d(R%IOjXZfkGbwNT{v3w<_XR9la{do8B9`}5ac zZZZb%mChKuc%gZpCGy&%i(HFqpZ6Y*4Mr_2n&{Oc=gU2(78=SNNja( ztXB&Eh0$cMNT2O~?{MjNx-Fv@r1o?O(aG!su%4Hb=c~QdX@4I`ML2|tUAaz;0wY-F z-j7j{53?SaK3;$P0Xf_-!H2860^~!x{wW^0?XYWFY72d0wl&A11Z{$y*vGxB;`p>C z#Y6K5?uP>2edT%_{OiJX4Q&E>Wa`-nfJGm*ZD4a*miOJN(e*!|6Z86W!RrrrRJ+v+ zr{)<{qgJ)Sd_;Ty)+~44z)b|;#x+69!koC*9uk(_&s_Itnv*v;27eWwQOln>!+-pq zh)`!y9yVU0usk~HdMR@1bim==6Ka#wW4W_jyXjF&D}R41v?M8&F4R_kqe?1z%?ae? zcDWxg;PX6u?txbi`&x$CIdgFdy5;~3qOpCx>xK-FIPyGEL&!FfELKOlg%o6A13Z-% z4;Aro{8dJd5Sg_9v@1rrXgyFetmazyg(H5?tURI4fW1q4H&EX)O+^jI7;ATi zWV<02f0{~&8h;I6p7vXvtxx+MrWY~&0v3-7Fc1F5kOG~v2|uuTH-lQ+D~RxO=V_ms zzLcqEk-hqE23hs>J7jlq`HWx~Y?l-O=!jA{zj5@)Db9_pPEJ^wkMVBh^t(IS7yq~Q znq%6f>l-732=128PW?u|UFehTf+r0ivmSc^pjMYrM7ZPy+aw)p@{1+ePv?KPLtd?l z%u?+q$p(AoG7jzcy2pLtHWJ7>wC0`je+M#R@pXaG2sIeN%SJvmVwp2X4rd3a3kh5` zys2aHX*D3tj?jL4B!?nbq3&slE@J)zab9IsY~HTd_j`31ujIFIL{b8X5p}W?$8+f4 zJo>OTS<`@^?Hc+Ji&=^ogUe75dh^!K$7h54*h!R`UOc4#@diPCc>$h3L7DoPLLrF) zek)+cC*y0fCb*~RtGwYv7PFpTVcrB6S;_{inBDGxq1G48FpMpkFB!jeA-DyY%OOc$>Kj%{QU> zfGMxQk-MELPkEdDZxl^Ak2lp=uST66{K8c7nWFFLmGiOD|2_WwFCoM%IDcL^`7cv= zs?$VSJC#= z1ujCjqaod`O`ONogU0h7FUH^i!_(ItQ)R3#^YyOEVdU6?)}@F=mAx_-pQJ@6eo&8M zD}Sj$@*ml5=bV0CIQ_$5(P7H+&Gh7%{|>%x9i&~X!w;9n4diO4hwihY%Vg3!B~veo z$GQqh9;Ot&{kj;2JzRvqio2;~9 zRd%uKx_Q$Un@0< zR=_3mSslfzD>ENiB9Sv0DxrIsJ^RB1g#wp!k0S2`@z7VjhDm?!_;_P89ufCrA3tDa z`4XY`G;D{}BWDIRazi(4nlk^xYq3MSuBgRS55{$#(s~fBT=L9&{(r9m!UozJKi(Eq zpYd?ZIo+5XVA56f{L~wYhAcD^8uP!(HexJ+N&amEgVrEB~(YRB^uj|ufn9Dy^#B3>Z)(ucN+`z10>_%V$75r%v5}7Gg z+hoBlDsWSYs;K`WKe$0wg)?42L)?_R){MJuVq=MJ+L$ z6J5*@n0f^6+YoBc4`$#hPcP04bI;ALpiS0=MIzpH@!EF#5Dq3{iiYF7F}uPe0&hM= zFRjci?Vdh^!eRLPmf zoVQMuu2RD1;+e~?XD+*XfJ|#1{t;&Hr!)O5r}=q~zw))uD<#UZ`|tDSh~`A}+MFFV zQ82HO`r+pr;{3?xPrd=j&6`}98IyUd<30Q8lMADsQ5itsrV^f#0*+7Jevk&tf0w(Y z`DT;+ChmXkDy9~G-Q3NCV1Gi6&i;J3go+qnAX46Wo3EuxR;VN*c3EK&nsCENturb( zB4kp6S^x6}y(@ zrr{B)Uk{hP7rFi4&woe;smphm;E*>h)`|igOzX-MWoGX0981&-t-FR2+>*b7|KLFD z4J+6_e%UJyxGakRBlAW7)rnycT%`>GYvTkh_GHY^i!{GYuS+EV&j0D5eXmvfDrSaB zgj-)cdd@k}@{Gkh^wgP~j`s~vNX|7~WNA{+C`dBqDda3->bV@{hCX5&VLVaCbLvcGE7kZq;v5~zUsLv zW-Jm0KGu)B#fPDt%Jxq6|LQ-}c5JV+#zZ-_Fpp&Je-Poy=b|EKvj+5W-W$o`3trn5 zH)iL--wojoI-AfE>pc~`OG(Jak{C!g_xOl$CxvA=B|$Rw7=NT%)Rq0lsdjZk!npl= zK^FwMrs~lz&)SE$wGG*zO{U6X#~TLs&-`ad_|Cu|By4U*{NfQ<5kG+{f6for@{i#! z$c3Db4tus7;J?)YP>u(Yx)SJf`)aI27gOYy!QsexnK`4~T$c!%&@94{{}b{${8*yj zRQW{28}1hBnya@ZlQGjI`elauSo9+EUoO++{FFO^HF%uQp*jo8dzRA9Y%sI$9d165 zEU1N&JI9cfB51%CCm6qp>Gz zzai(gN>_F281~h{`dLz0k7}M@S?&qwJ;8E`L`gByX>`?$Y%7p zIjy!xu{J`2?6w=TgP9Qd+b1G^XY9D+)YN6a=trtn+BC_%aS+NRfM<}7lOcua8~xI+ z4R*_ndaExt|7khmLAg_$h9R?_I14l~Tq`}q%rdN{*d692DR*gXcGX%2T^T0sXyJ$;Kol6KKW$vRZkq`2)LeOc+1z4{WV|Q0+KJK z{L-6~aTnoAoHWV9vCWamjPh>J0_MZP`}a|g%rGlm>*F%EF&DS1Uqzo)?i0+E-(TT& zxLuNh|Lg0Y1v;!FY49Cx$Cczu*&U=vBQOf8N1WR2^RH^v4&&tatfb}q;!Nc#gSiz7 zBZau@!&!cCzy1|X$r03CUfFry_WCW(Buq_kFWyCHSMU{h!F5b7T?p5!9 zaAdxcaH?B7a;&Zj~<+F#=GQW*R(nH%;6Z<-!_q>McOmy6SGULm4`&;ylmeVw& zn(&xMeN`|1v?*uDUe-TtjJ!P>dOoYgC_1S1YGlTfliZ&%kFrTX9}Tag(^Z!OZVG*o zilXd%diehD6FIXN-_RwWf$vc(C}y%T96jUbn@JLy4UkafjvE(s%joRib9$WNaNGUD zrRgmxp{^JHnSf1uv2lfq$c!$ca7$0AOs`U=aEQ|*4DZRS+^I~6URNs4R*lrvk%OL2 zxIk1d{S|3DPO~q_Ha>dGHnqPL#qN-?apZj{b2G3z zW0~yvK%3=il+E;|4P2|GT!(!@4Cywuw$X8%eLjC!T!3mtQoV>Ek7Op?-uKlQqrHe= z^AOegW;k8$b@6;3lE}S;AX*UbFdA5!6bA*bU%qnWb*o!XdL+bSkhk+rojw(Wzj7j_w)rKVFknOlG~KVv7xcO*g>!NA z@oF>^Dij9)T+riWD$$~kIahn29=(G*u89-NDw4dvI0dKYM`1F`caw!2?{AN%@@gDQMm=Ms6`eX- zIYe!7d=SX@Bv8ZQgh`88*`N$eq>#yUQpPkF9q+N__kQeG%^ zS@Or-eHyy&ia6j`{HeUl@5(;@V4)43Lv7vFLoix9ed0(sf7jiRhLlLeu zlfn@oWc+UUpF4KUQcT3rdgjE2iO7qT2x%b~*y*le_2{b{>Z%$wRve>)esU>dtW?s&)9bqGbh(>v?nb#0sb z<FN99T4nS&yK)7n>fpt@g)o6j(Y7s#85vr zp*dn(UrDNg<6+#9*T>r^KDQ5kG}znl{{TTD4N{5r`I7)T_x&4Oi@><2A>2jRqen;M zDj8KI|NUEWr5XF7-=Cr2r`_oGcJdPGWEPK>SsI|{9DDW<9)KcLb*YmXHj&L?5jGbR za>T|iVKcgeh1Wg)Ugce8FER;B*!-yUV+43ZB>jg{E$Gk#_T^>ZXEo@Zw{xFHfF93% z%q^V1n(OTKJmWM9zfE0o*gJjYq>1r5;GD*Hv-3Z#{0_bX*l);=|Xfsz`ID z=ZvW;c^@B2h6q3djIU6AR-!(Bh*sjpuI0Wwd2Vs~&F`>;^A6mYTlSq62b+q# zGO}QH**e09$l^T#Lf${FncyLaq%}Tj0!`D!f%+oZ7n={iLFD?$J7R5F82uV%rEJ5nT+pXL^Gl4Z3>d?KlFb^J62gSVZ*f;9t@9p*`b$72 zPyh59V;e3g*$?MDX_YqIF2-5_#P}TB`ZTKJY1XQlHYe|{2zkCL5&S=r&N8aW|L@~J z6_ri_X(g2wBt$|Gq`M>s(jXxn8&guc8$m!yVjvycBoqPZjxkc2Q6o0C-TR;WoITpP zo?ScFKHvBCdB0xi?4rAW)6lkt_qbj_WZwkfNLhyKUX);%&;hq;0u(TOCiHW)wo!9R z`{w(CL~Uc%JTFhNj63jw^S=?1_1WsgnEcbWj*x@AEGO3PklMFZFUh9`p1UB&)q678 z%E&D5hQ-p9g@845ri-XBDRdI~jz3(M75iKHbBF2B!ni$(hm;v*!)O$V)Lv}-(H`K7 zRxabEF9T4EKr~rfq5Hyfc_lQNCj#MAedZHavf68cLfqW%bT9a|tPto4o_NJ?=G*0~ z*sYiYjJ(Db=&1Kt?J;!s$@P@LUcKX^{w~+a`<&-uDcwHN{JiUy2I1P!a_V(ag}teI zkq>=T#@Bs*sp=YEV#_nUkK>eak$ThOvY(OdQ`~?&4Qj4l`tp`RE?Rv}jxTB>EV_U~ zmXZ&n7}P{plo#F|?cTCmdXZL5<{u{d%fPttMN*UAXv9Ab;TCRo;j4G?{hKnU1N)Sv zage9LVud|27}I(R>8!@sQ6IO(3XH3@u@!HtUp7eRqa4K=*cBJHuu(@dbM4-f;~VUF zB`W?q<>Uoz^?M`Lob=QWt^kK*wdB69Q=qqVRS6{Oinq-FK~N2K@2)oXD`-9|uz#t+ zP4jg=rxB4(nd=lFYRfGz1uxZ(hnn+GFP9!(qRh7C{#DZxc!ehQPC5*n4Wio92xOeE zf05q%WWxmQQNB0uhI33hOyC0hMEt9h#+*W;*6Ep@7l?4IU21LMdx54L#(@gmc)ElJ z*FaT|HVp+)Q0ixDYm458e>(I`S$Nz~rvrjR`GEU`H zEqHw~-7$dc2f~?mpOnC2d zgc#`~kk`GL0EIF3d8<1gi~a9k3QQyo$3z$mI{T~M&y`*Wo38d+x(w!ieNvY+Ji(WP z4mo(vB0qprCQa{iLfZE^gaNkJq9?-NqowxbkXnc^<3O1E8NfpEqISk%=B@Yg3q?;^ z3}tYac*D=I%>`RD(To*;uHX3!(|A^GbOi6*FBWL6&1R;vS5AJTNUCAwq9v&Z4~nqh z(<}K?_M?-!ci3k^e}hN5TS?^p`B{ukeBN!#8#|4_U(Q&d(AEmizgoG0Ap(YkPyTyH zIGNzo{5}aEbfK;1DYb+!`({yNYEb^gN}5#0%B5==Qi1nc)28oTiz=LJ`n#N|KA`S5 zP54;kF#T{KtYk%&IGi3hi9 zw>HXME=c8T)dvRZ?&`mqMM*IqNDIark>{z`4G?0Yze&}_yv0-DE`0fKZsp0o?8{@X zxuTf`i3(f4vF;q3XZJ(8 zG)bz{GiUxxMW{tM60zQ>bWh@)VFpXaVosj`i@f(vI`FR)Jys!H71LR~*kzvj6G^Kv zbhFTU52dFnnIALqY|kmSb+ao#RC=A(9ULgCDErIfaPzA)t*bv9Tdp|k%$lD4%k5~TKgiECC#rR z!|U=ggWROQV}-9O#rB%%dGj_$zL&gxxvyqmzd`3e-m{peS#kp_Hf_a$GBr4A3UUW; z{>|^CF_@m9+Xy7gN}mgcPeGek=hq;LFf2HMksTB`A*v4oUWvyQ8@>NWn0+|#8_?mW zU|#u4F0Su(JXC*DeS(dHy@o82d5Y8pvidj-irTzxIX4d=ZVB~Jg1KC_x=smutXoG7 z`=I5Q*yf(6664K?^<_PZ%dWP1$Je~N;*RV2Tb56q9ZLYwrmk$Jw&bI$Qfl;R$ zx*OmM2#4B2f`X)oGAr9XWHo~r4lRe)7a+pPx4fz|(0iS*S~G zi1wMjBCu+t>|?cWSZar0NY6kzYY{yxi?S$T?*SCwXac=F5t7AJ~1_3PtHU zBw#LwJGs8^ofo=A1h0cW8C*aIKYq092l`FwKCyS?ZQTi;HRL3k)MiXGj+hDF8Ya-u zfU|w@sM>jq4i3IZ4-$X`LT$tx;yQQByM{C7I?QY4X2K~jKK2K6d3Ur7e%kQ&;}d4w z!}_sk+Zr>$ISA?WuENYE|3o_t#`1OsYAQ+#*lvCF1ErHh#v&J&6ZhISkK<@gEWhq; zdWeVxUkw7^BHY=g+NU=zbSO|@m7O`n&k<2gqF*l45b>>hBbn6Vk5tCo`4?p-l1ZCg zIiU-7Y30?Mb91-nGeQ9u{G1Yh|9*d>#TXN(dWyKjD45n7S$4h)2Vb;I1kl%dj!?1{ zh%g59HDZ)`x}6Ku)U?;S<{wF2e@@wpV-BD0KrdwUY4@Ju*O7M5`rlz{(Z+8*>67> z`S9@pIB~{do@A^4in_J)jtOx*b?p5IeRh(-c!x{u#zsar6F=rJ#LwCp058`x7z?{# zp=ZVJpN!-p4rI-{AXBeJOKjDy9r_izYUj}fe`A|NfIM02w z`0&Yz*cVt&%(|+Y+ZNn!t)S&UqbN(-CsoL(_YWDqCSoZU>Njw*@yR`OM~I|fYackB z`5i0(?0R|VHrEfoEn!!Ewqv?7M~n@gLQc8)xGT(&zRgZ;Oh?na+18^|-egjWOuOjH zC46r?c7M@^vr^aB%DR}ME2e#AlYd$zl3i(U8*s>SsF{(g#y ziFH_HKpYOgXw{Q&rxBHl!{uWqCbsScc!(|RM)_*N5sPbW+^FWDmoGB7zV?04ekyqc z72^6BJaLeiS0&j&C~5icxd#(3SO>xnjwU6o>V_pklW>pcVf|y@4x) z_)dNiMPgr+MAhv0x~qO6`TE{aLA~ktfHp+2xKa=`e6VhD)A=rp=uigG4 zIYUzhKsAnzYnY10?P%2Dbqrh}XZC|$crR52WZ^_B=|?$|h2h{zRGw7+KF)o$Yv9S* zD+kdV^toGXS8HX|b6Y#}APm&HHEJ#=gv;fjhq~8|M7iSV>&UWu2B`#r9ChLf@!$Ht z!H{aU&LO_FxMwJ@NqMeU-DU+VN6s}>EO(yHVgykyY_NAV_Czdxzt3k-25-xaBOeW- z5_S&OeQz9)^ME9&p%($l=oHwd&eo1xZUVPRteCT$jhM|-yDeOyS*=$6HkOJ){&iyg zo{N;1hUekRX{lsdILY%Ig;>%kui|nwHxOeD!@A-nTWLdW68c)r>jo+ptx3uK`oA!i zNgwmnoFr)Pozq|tsIVrQ2XO9BNoA`ch?9#?156ArppuX+gr+#a-`=LlHsKw~zVYRj zQ=VNJaM_rwH*=7@LgCCC&1ZrvibyIiv@WnXmOhwE8@=%1`C7OAjW~AnY00FZ z1-6EcY~k?1Zl6wDS+U^d!lT1HF?(C_8MAZEvbTO&c!ao}SqqzJ*P7}9@YCa-V^4Fj zJZz@6utE-BnTdKTs`F1LcK<+FC}=D;s^t3JoA%eKZQZX7)4p&YzGqyrFE1lM;S7E7 zN{dR(;^=Xjy9nd}ee)+jxBqU5CVZFbt?1BnXiYkm;!9&qQ zs;yXRT^GMCMI+^YN$7A;gy4)0CaVvQ* zDJUX$Qgw|dMJ5*W`Z3AR?soStSp+I`%%f;N`r^sVzEt==SpIe2V1D3_~)S) zq?cO1o8$Xb$0Eb+_jEl@L3D=35ury(kzt<8{i6CQ#p(%6D8%GEPZvVyg8c4l&4LpG zdA&bIVkFEOYwkon3kE}oSB`zL`>A(?aSs-|=`JE`YfWH^EhEpuuPcqc_LE}zq~Z`-1%Uu+y!iro)2 zKN8!cZC61VgP3m+Z-bEYZ#9*|M&+HvYvTy-aAM|s7%`vZ@*HGX4dd`3(zl50W%ifh zbGC)9hMWANS<&(A^NN=G{TWP{W3Xgtwy4Z`9g#5quIwMQ(; zcq`|tr|tbutmAumqCh|r@K7Yd1{dBDL=c=a2h&&TV{smE0*Y`=fm*xkfVR`pFZlP} zDfHj|;2Pmn_y>?M!@rbY%6$o{L31mwt5K|a82iPkm{DWHTDhUjfV#l?>?p=!t#kb` z!fbv0-1nK}*>a+hvg?qZQ=hA8kYrJR`(~4Bz>-sWPljg~ub))kL;dPwFVo$#;r?@l zE(+3^oSPpk&q@J7T8Qa>QzBU-;oP@RwL zN^wVGx@9NhnSdsU2W@ZTH}t}{VD{}{H?Ken&Z)GmQyQ+Gb@j>cT>>3*V>nC4(H`4= zjXDm~sc+T=vFtK?1_)(laswCR$sF1gMqX!)_)f*zUkU7?_G}y0)%IC)i?cuiGGx2}QSp^K7 zbf5A<`M-K#E^lZHLm=49bveZe8axQ5=gj(h^PE7D!$lw9bp(&Hv{!u27j|!`Cp+m; zEnJro#gW4w)^Xj#Qh`no=z=T%387zEUA(2dM*9nc*LM-s5!KlE`qg|OpBS9kN0|bR zg}77Ju;W5e5BZB;>vwkE+2B4Ak~qj9B0H|UDM5ySIFgu#)h2#PfePEN?di0yH8^ND zR32B}yL;~SE|HW*ZODkK;sXYE@w)i7bjZNyeloZL{$zM;!9wM4&`yeN zyXg*t*CFMwLwzB>hj!Y9@}9MeJ@>1Z_^odE!Q8VTl(`6T7ZZ*HWpH%6-Azb-a^ln$ zR+JL7Rd0Q>PW9%BJJ_FPzNqIL3Z%YyFcv1@jdVQ$Kuqh6J}?dv`J12;)Bj<%{`bk$ zlT)oBS{Z<^)6&GJ`g8)Bwo0iXQCCZ_897DT^WZrbcKF+!tCt6rUeaPAirh-5hP1Y) zU%xxyE*JXSagF_T7xtuv?+zjt!LG)6iq!B!r-k-StshL-?)*x)igg;MEXHdweJNi6+p%Q*L2y|syA7*?uM)@4z#bt`)Ck)33W zgJ#i{bI~&7fu1bgP*LB@xr-#50@VVM94cYO(TIyXUxK|tVNHLl!SjA{ z-c{$FaH0YAfG$B%vLQrwUvOkVzHQ%j4phS8cZpQ|*EHRj)Cpdwwm+eFCLXZaKb)Xo zr@{D1A*#%14Lw+&;WRr(-byAOOA_7wVW9Qp!G~Oi$J4Upi1B*n&EpJUQzGikx^~Fh z3f#eR;DBEX-t6ou-Rl?WmdMj;q^llJF>s1Y{^D$!qoNHd5Vg+A5nehkBs1a*W_ zmHrL%czHQ`jx3}{pz?Tho&;<^D?$mxU{Y;4iczSRxhJZ|{vQ0{N_&jhg-hp+qWog< z9Nj5Y`Q%e?U?&V}d**&^_hFK6pR4hAPTbpq(IO49*;HC84K>@%nl> zA~HME=ra+?`&O=TMcPd>4t)-|?!1#um{<#VuKlK%)9MfdLri5HlDR)<3Kgy~jVPVI zAkxyX+Y=CH#%w|m*yX9EL~0!at_G_f*`i=>D342ZkVp?J3ji~i$zrm|h8iuz(Dk!6 z%i=s`dshTD^B0wDPGHdBjLkH3^YnC@2p8y6&exzPzw3usHrKH3G<|24zK4HVhJ{-e zt`K52%SA-Y*%4%hW3)=0p%X zy36>EK%!AR&U6J(S^Gqz&*o)dh?pf-KpT>yM$!TL_JDk#zK(2Yr^UUirp1rFK8ya} zID#;GT~%zRe+u4(hl&9IWI{`o>`qw+pZ#Fe1HdlEi{B6Rk(R zsp^vchbOyhQ8C+Q^y+)BVa>fsn|%#RpxPDoFsVaSX8GPvOhn}Bl56+ogR(q@gd6*B zM(po4-VC49RSqfJ&c-qDr86o#8B+O{eaL~EiD-cY)WG)Y=WulzLIFWKPz(NlzZxw` z?hSwzh6|Vdo1Zy7e9QYeM#+G8$+wlQMj!!^=Xf44+MkvC5*7DG%NBtCOvfhWMji3u zhw)=EW#jjgBC<=*b>!r8aZ8Msy1`xs!>!|b+zyV z8f=ZPq4E=%MEAbe52VfL+(vv8pY30^G;eShICa8vw+(SY|M<1WtY zMD-5vK_aR98*-NO263^Z3#Ju>)6fk-Vz&Z3r2C1oSZ%z}#6=zy@;~@l2BCwc+d4g8K_WzzI?m3NAL???U42$h>7?@Z@Nz zP1K|Cd62wRGWe$GVlmxUY})bLufd!Ab%QrpVq{uGb>QeO&4$&nXeof9yv`?Rotexw z>Z$CDufyZE)EpZ0T=(87y%Y9-Zgs@+;_Es_Z#d`|7rUR*D4A=%d+l~}hmuZ9cafCm z6O*xt#rFK=oRM%V3qnvgXw>fp-PCU)vjL*KbAB3W=!Id zUyL>PGwZPeV^a}pNd*h9)ayQVV_jN31{q}W5?$HbQJ(Qx?@js>D-JGAZ)0NFkTWa1QtLH` zT|cSbY}pmCt+A~&(^gOT6+nvhY%q}htyQ#9Wnrd@jZugg|P$^=M9J ziK?1CH#XX~HxhT^O^W;pZoYqJp8ge0eH7q*am4cICUwF7>-q}Ul-H+R{95DnTXo7I zCo=o`x2%Q5zv2Vi!m~546o&+#9WGL{fRWuqPIlukCi z5iQ+9@2&F-jG;HDZYqKfaWttN#hm>`G8QZ&NO3z}GezE)RaILi2ECyD{@B5d#X^2R zVb=B6#Z`gH0yHrqkXYw(8#L2us@_I#^}yHpVH9iPOd@5ZWA4@i_&M4|8Wu-qH!z*< z`eWu=KH<-tz(GC!pus$g%Jx$+Cw5-|hWSj7>X>}l4NC`C1~}SC>r-LoinsQ`ws_kw z8qOqn^rt{?j1Y-a;ja{6k*(V1C1%w0q&xhw?@hSrLe@!FOR`OuX!n+R;wAAy(>->n z`900G{vzsDaYd>+178j5mMbTVg4?*c2t|n~>h9CQLmX+M7stKcyUVAOa*{XBa@VqU zJ7+3qLH`V)IMU`(%$nd@RqMqgxgkl#t)unmC1s$SwPm!^Z+Ox z>w6`Xk{%fV+Ps9-(#^EZZkNr%_3;NDOUv2pbcG@2`;vGgd!AP=1>f54&K{@ePn8G0 z#F8={p3KHfTx&dq$);r?ie;!iROLAi7Wb2pt=y4UFN_E^>JqF1q(6#(bb$o`;Yy)=`+Y&pHJvkC!!#}mX%@KAUuDq!>Xk;7qVgy2JgxR=YjJ+cXs19^4| zsd*Z@=^#&~EpJgZ5W#%KLdq4FF|aci1VTGOkpQusdJG`lxiq^Rq-su88U!jF{wLwN zrwwfP$U*wf{lGb{b_HJh_I9>>IAF?J94;p6U9N%7KZ0!lA)PYeP|Rg3bhI`kU`I1P zB&^Pire@dYT0SMh*P(-;A~rg7tw31!^d&l@_L_M_kBO1)3*z5+y5QY_9b%+QbcF8L zv>ff16Bnl{YPKEebX1@@Ln* z?S)G}Bf(BLZ!x^Xt?jJohRpWqf(MFa6fyeSb`VPc$lG6*lDEBjVsmn+emSicv@h`^ zkydZT$2J_Le>WWf<16@)It<}-(qm&l*AaXBOUC9)*V?NTBG6CMax1XW0S@Cq*PyFX z%w9hJf&-hBKbAR)UjT!t^e=s+q-!S#XKBZ(g$+dk*2Sfl<--T!uzkO|jIId6 zk)>;{om*(-5Hep51CM9d*q#&20--XsMw-5tV)b3P&~Dm%V`9g`(^APC5`gdU_3!4r z5i!e{-j#uvdej!f_wV~!4xbwnKD?7)eMWuXv&2Iz^SW#USB)Ba%!pHY*r<#-7FrLN zn`gc>OFlx0u{THSTh?{XU~)=9p@#ZfF=WG8g11o2iKQTlS8d82fBoJc9tm{=gAfw5 zKvi}`>I5f8V-?q8hjyC;CTH!Av4cQ`AD4#ZRh|alqoMvrqOOPh0X0~Q# zZ&x9-I;Xqk@OrJ!K_!6gZ8tscpCVkrzoD=~^J$F!<8{HB{2oS>B5R~v3-R3f zZuAX)j}ACWQL5o{Qd(1Y%PX5y6I-;y#xj1@Es@$iXGk34lP>z4cP$ro9)60~ONWM5 z*W~M)o7~Lm-}5zp3JFncF6xuWe=&61)QQaEk{}S#xms1|Oh4tLf5^`{CxknCzoWF| zrtwK%mpU81V)z+!(RbTx1f@q)`~mL^`Rx_<;07wTn^fC;Yz1q8cYwkk}*( zr@hwGoujEfH0{lBJOPG?Z|>CY^f6mB&srm@k{8WmE2|Cc48gN0zjSoIASoo=h`PBXSM#WH&S)GSMYWn1RuAwk(xz-r+8sm;5aY`aYus&{R1h_jS@C{YJzPQKLBG%F*dXRNHuufUOHPvk?SWE2R zaR58i&H$qe&KSTfWfdmeRNu=FxAMjT1j?o|uJyk?%jsuJ9{}!O3a0QRhs|URZhU^B z;Q#$Jm|_2Vv~?&uTpx9;M%7D+#j}@YMcvlB<1}Vy1olBHzID(jzS#owH9q&2z9w3a zyOuKi&AF&pe?s5&(9B&De-<)K!KOv40%U}gKN7C z{fEaFkQqr(>m3o}C&|`qyee~aw`IedrnJrh@1lJ}3YF+_)z`cOFJF! z?||L${BPeZNNY-QPCJlk(yn6m;Z0QP5KJsFie4e9n=gNL>&wvM{&G1HdOz>&{H*Uo zlS_B8!dASPSb%0qm4s240&?h)Bu2*1t^!4jJ0Hpw+b(!^`PIip`NvHsr&^>)&xSx;_nV&?kzY^J#h$zl_e!XXNw`WYTe8NecJXy%*0 zE%W;7n%9p7z6YkKXX|ra6_}+nK`mp3P>pAM0rR|lgL!wG8W6@dh9Bk^A~0?Q!~KoQ zV)bc-_@w#66)a?}swnLIS4L1d_*Hv|i6XXPfrJmFP#T!s__A4=onHFWxqw=fh=Zwr z=CKYCwuGLRoxTV7!S8h1h(h)Fo#bRkZEYEgb|{ddMqE1(^R_-8=jmRbjE7NgLBomD z`9uJ*tCV>9fO!lM&7QOO!u*VzRR?>M3mKkww_bs*rV;aHQlM~APPW+(xjYCg>c#t*0=BP-#YG{u>xV>2)R+#1tng^{LC@!yx7`@ zw-tSx8kG9JZB+m}uDQ<@Vm4~Cf2p?7VH4~rZ`@JN6ci<%qy%1&QJ0U!S>V~)_-a!|~L!$Xs=!)pVC%xi+Av{7?i zwuh{uO{1B=x+M#5inz9ED<<;^pqPXT)YEUKxOe@qYr<-*2v_X9nY}?l%$*aj7#HMSm@3>oBOq zMQ?!tJNSN&a!p!T-Nk|}{p zpRYtreIIs{C1?#LX5twW9G93G!~`R_hJf4_`4OtL^Y!bSzx*h^?8tkU1EP*<@pQ&AXk&U@rn#EFIb*Q{MBQYBU^&0k8Uh|6%WUXo33?1O?0(w+yith+3JRq=+ zu1hq`*K1I)y+2c4!f95C!!8r)>|)!);co5^a>H+Z^P&g&(b4`jUgT0)iREJ?`6T>U zbzPmo$LqKmQ9M0S=!D^IA!kLuu8+J0+rhVGE&m_;L}DUNMF6ufOgnYH6ho^XlwTeCU{`Vz|{lh1K_a zlil+&^7NHy=ZB2s;-qSW!^joj3xQ{O6`ikAR5tdw=_4Aixl=7|$`NbRn{#;1OWAei zWf^PGRM28aaEckApM!6_m6S4Z>R+5&ly!yN9bnnL_^QZqH1YJ-{mSvIyHH-+a6F75 zh{MlEp(w`mjj9(HQ~N`Et_$8`Tr?E;7()WDn?hd6k`MIwYVTuw#aDB>s@5)||Hcy3 zz&@{>4vJ*XXg<1xedk-go&oxS^DsAufInrZ1WeA&&; z?O3PVPhvcNKCXB(|6;S|mSP}R;z2;rxIzGNbE@l!WdsM>ozF`!^AEf-vhr!wUdE19 z$88@2)kpTW;fP(+t@h4)R+Wj({(BVEbvd_g`bgcfLERm%r!`OA?iIDv-#{;8#95tv z6zmWK-0&m0wiYo@>G_QU9m7|vlyQcnnR2cZT4 ziit{c_Ijqvalhf})R4FoXd^orq}%FnhtCA|oQbJQORJSi*)uYA;}%{Yd2H`_R%};7 z&Ddn+>~Ig{WSI3d^8&_{iFvl}kiYhHUiufi;?ESP1VzAxW{Lri(9sw3)xvohrYBr( zg$!R_MXgCIt#nU{+3(%UxVKFTJIa{r%caaqI0b`bO+Lwlgnv3d5&>FlExP=RX!p!f z8Fq3#Iq{J@jr%!W?hxD8*~WqvjP>}OoBxDAF}FQ3y%K|k9v2W7i>#dkm8KQA#^sAQ zs97IpTW!plLQ@qExR`HetZ}s&r@DK}tsKehV|3uZ^C~zu34JhdD#|#QvHhQt|#}sI_C2zJ|UM;hEXH z@6?nu{ZYa1bVQi%**`u7)m#PF{H7Rj9bjHc65l;21j9LwE?y?OuZOMxVXx>b)4U$oPt8@@b>ndYlI@%3!fpj{t}+v`Mr zU`gY3e)hml{Z-i^+tr#o0Nn=dWUDTT-khvK1{bYd290~v0?;0=h-QB(w zan)J+@lwZgbC|bwG=%L;xVRuYPzz!Pjn=h$GxG7|*e8Hv!$lbKYNRiz=z?R^A=ul_ zJSVHOXK22X;3Akv_C>h~u%sYNUGV%+jE#=eX^HvlYJbuglT<(K%Gx@v)#Tq%BA zB0n3slZ!aJ^@qX4)d?H;*SWLrI;VlxQP7B*)hQRM0Al5vYEVi^xaaTqOhNl|S;{w^ z6&id{l#Wy=E8R5En?wmKE6%a44X^Ius-ZuV7T72hXRDXU9Ll*-mwL!#v;}MHZA4Tv zFn2B0%70P1^7%TbtEF4P>s)@m2NX`wA~EBLh^Q>jmNBn0or7rZ&yj@(VPrnI-vnih zmG_zV2~V$PDsxDvgI%JqpKehIr&zB&RopyOW@3=_o`P))%n3|-x7+@SbsgtPb3Ta< zrrsOEueG~nm+c=PqVX+F*<_P-T=Pe~$<%+dqBHdrf2onM^874D3{E1zyg~x;XuDJ| z>vDj2BG89FD0!nEtLkO=;rzE(gYbDyvh>==RZ7{^>RhJ-A*g;rU){rGrv1x(hm6i4?x~y$z5Q;ym6vnc5$k1iGH1DTDrm-G;Deg?q zAd2G>7}&jAo=HeP{_`K%k&xQLUXJ)X`ADLRhMz%v8sDn06oV}o#rPzUz|ED@S8z9j zF`1*AW2)xf2Wet`#uMYO@pATkegoIN-=GR3Ma*ux=ED_wa^26K-StyfipXmCdxQsE z92<$CnmuT;E&Uqw)ZyY-xT3xb-!$)|=NYUG9|5Un45#6E+=*RgUBQNa{45+1A#&(6 z+;~&8r$5R1Rf8Wj49r5h6N9%LbJGLJ4@!|IA|dmSy6zQe0i)s)wp!iz1ezAE9GhQ4 zO7m@vZF`*e%p^8eGFnX?u}Cy7QbInGI;xrCvEl$p7Tu#5|tP?UZ; zWLkfnxL1LD+i&UJrcl-fsBn0B9roJda0W5!Ehc#BPO#-Gq1ny|aMus*ADh$T#zL_a z{zx~7{jaARZf{l~3TBVs=(M?#fZ@fVd~Vpa0u2+s6pJ#kjR}$xC?PVlLg!j^885-E zUoZ;DYv@Ha_QlH+QGC}Sdo^MXs4w^22IH~3eE|aO_Aqz<_aC_gaj;HzzZ*0{==a~z z*EL_<3J?PB4Z(@-cLhuMJ~4SKcY6U-U|b0pGU{-efLI^?AxPk-nJ)SMNx@0nSmC zQW6B9Srt+-6#+u5QOzFL^5$J^c0bGdUbfxOiW5sw?Cg~$%ZXu!fbEm52TssKo^3AJ zh;BcBS<)uoR;KSrE4SX2J64r&o>t3m=EFxK$q`Hp!A^{(q5$_9&~X0^o=His*5=as z`{iDL`bR8hk$=y=K>KTFsf+zleccU{}pmmmjS z*`M=|TKZbtjE84NSvpY{lqxPYuxbT&oCgeRc~lLV73|8c1Pr2cHbAj)4?*6A5nDe| z&7Kx9X@vH=N9D_#Y_gghGtFTs&7dLp=b{NqtFH8!`dL#ccU)9EFaMn%TZxJz*(<`O zK6{H7@C&vFvNj;!Agt0M#m<-XdPvQTb+L&$peA5y*pn`LECSeZR=<&z^v6PAq8xvR z#nI32R+*+|c(8o>Z@zNo$#&7)M%%3Cfu8@Ewghg8582913}1a)O5EVVkn0>zvQbb3 zOtL>Vvy5<+&ZE{=bl48G_rmUfp0A(q-QKp%M&)Z{)fVMhJf)DKE<2tUOCniK_S1`2 zgmtz`r^%=m7O}O?KNTcZ91fjfrm=jMrzd*+n#!x7ZVb}<4Z)%(uJ))o`^)_W2R$bE zO=_|grLhk05+{mJ;&ljHu9g^UGCzpJDfV{AT@JY=sh?o4dGCAOHD9aW+J75esH3f~ zgw^t7ree)k{M5>S`k#hhGp!D|B3)?l8@~mMX zYuz4nt3gV0Rjvb#vs6Y!nE!;w$=>ZqlQiH0RdK&}ZG1bt;pHL<{vAl?ASIikIFNBu?R*2Gr;oT%dh{n0{587OQ=`%h@aE)aC`XH3 zXK-M8$3z4AZB--f=!jUE2;8t33AKy)_l$J$G zOWWFCG|H$)WDR-Je!gmvVtfaXBb~s=FbAo;DV!1Un-g706FO?elGA?r82v7Avuf*K zSdnz_l_!%EpQ^xt$bW{AV;OjH^2)vaaG?49KM$FoP~~OV^>9qU3YXS&s5F)l_6wP5{R$A{j@62iSjfqSRk)F&TqG)7GwWFVg`6v)x}l!_JhNg4}!g z-)3C)$58Y#Guk%mxaAzu?mA6WcC=8@QD3X)B_2p9Uvnp-FK88`8KsAwfNCttN(RZu9kE7J4f_A)9;)0} zJ$-Z-GcrlaWJo>;c-__b4ZL|eH$p~<|8{981*E%aKJrly>!KP{3Lq8|? zD(O4!sx~Qo#$KfIlvr^tU}M6^^{Mg@OLF)MphQ|e*5&ox5c7Mcin6&<@0Zvb?GDA1}yM{L~_pWd3JHD?J#n1`ybGKpi!EqRrTzT*-3PKTJ=-`w2OZ z8bV;F35d;;xds!}w)W)!NgLh3KuUgk1kxB<0a(giKZ#JBSem@her@l*P-*UTT)&r`6&y9inQYlT>@=}(RPQji;WWe11x#LH#um<^! zRgERN@;WAWcUM-&KNL?(Pz*u%DG^2*4qVm z{JbhD)R!TdF1rg#if?{&J3BTh$yu=_wc_!8&F18x{rj^Oa3hxCJZ-E;EZ@c@C7;Iu z3+LVM{&1<*dGLFQX;_pBAIib^H-%Ay4A)&#=a{jG&8yDov`^(9IQL99I$Vc1b)0D| zuEQuUpY#;4G{oZ^ZtFp)PVISNfasjLfVnlnIRTVevRZs53cs$xYkSs%i|Q8|84&6g z7&TTik9D)`;YOc``DFGUtPAC2v@XCKKDAPk-+pC3{Yua4`UF=HWVea;`VmG-R`9Gd z8v&oAUU^pMMjxL*AJqmh3UXO*Mf+a${I|lRK7heNaCzt8Wa#}Cg z1vq6qZhTHY$bN$Omw`nqf7=W>(0LZgo_5q93=i(ZxW(=L{?R}BctmlPqgMnNJid0< zCe1;Ul&a%y`D}=Qk~-dz(st-7-CKI?hdTv?DK*;!RW#(;te^(BK#=_$a9xOOeRsiF z)G15EqmKwN11(3Hqw`3!)u?)h=YB#ia{Y} zhJf%LtBcx0kCD@mYc$y9LD^>|>|=*Af#F3FPs|#pX%1Ay^)-vU0wEj}Z@E^p)de3< zHv&NZ#IJQJji{Dykw`e7e9(xuDyp+k*u)S{xIWxYaUh_j7OMYzn zf9@}>F`}$pg`PG^o;|G351ztGYPpob z0yI&7oljW0;W}~4*)mJ+Rhlz$GFvC`S7kg~5!+qtIkI^+v|6qwN8#O;6ztEJ+Z5`$ zjYi$T$MCjnPWx#OJ&%N}0&y4nY6GAL%xkPfBY!Pty1o75l!{iB3mRh^5ZS`2dO$l#2WD)ekE$P*r;xo z*po}SF4HpB>aIsk{nSc|#S=B?A z@fqGeXBhFC=oW*=IZ)Xvle`<64X)m^B1p5W-t)N{kQG5{L;gIxh?;BS;vCi>8}bA? zC+J*wE2m#_{ZT#5)PdvJ*J9BpuPPc|ssG`7h#Mp%cVU%|VX;@PXvy?ChDQeE-_czE zMX6{+nyO+uxg8?%Ia!N;bb@y$Lc-;C3ETaN|9UJm)bw)7g%l2hw10P^eTMCP{^!1X z^MEaeh+b;2d+*P1SM`$*5j3Snnl+*b3xc)Th6m*E9}3FWmD|fzb5Q%85oTQLJ+JTo zL@DHmG9|KQN{%Z%Jriy=+56rO_C4Pbu>I!QDgIvJ8T)(0TIZM76W?a#H&K$X!-h5Y z8LR;udjsrNx_?db+`Z8?^H$_d7?atdfu)z!P51{bdc5B78JIIf9;Q^Wy3;gz_gg78 z>>1A6x+FB`>yh>QXTxzNDJvJoR>`<@evb!pX+X2vi>_f}+4;FIg8v1b+TAhu?*|~? znAh1h{`U9(D0mYXw=Pnf72jXZCP)4BHva+XnfICa7blA+CTGcelb1u`O3g{~_bfQbd@-S) z4F*+S#F9Bl-CN%UX+?y8!t^s<7c|xWce|PK zMAykwzUJsh{7TjSt22wJNyg6J&#j>Og(R8uq>!Hir~lobA#<*kkM#`Y_xmc}^n}@M zM|@oS=vCrbK$3a%Hfo&4KV5r<#HA5ZJ;3ql=l}3xiLWWhh!U;_I}IlCyAjb2?Hb(b ziG|)Fvu8HbGos}-QiG-)LNy8F+sHRJ>T?(LAC}Y`m0o|{9a!yz`!4LYe#DIYBjDPL zvR38M>yC)2ndUwIw(D8XNe?bVI`@06*vf}@ctL_N2Fg6_UnAi>Z})H)4vAOWx8ax z(_X!zS3D1A(qGEojEw=-f4$|kKicO_7>fp0;hJv#hV1;Ouwq;m;qDRHHC3b;9YBF; zJn4|yjLYxxxE8EllE3xyf4;-t4=7k~|57IU{~oZB6P;t9|8mor{=PKNKeU#HdKoA0 z8K$?d&LqFCZiS5D20r1L=Q^J3DUIFlOoE|MulkF=EpO7~Bi?UO@8iY!Y3oHguHuMFCWe;(B#B8Q5697jU8~wO~IrWw72U_wLlGbInh346c4+CNq5P4ehar z|K&!NYV2B!+Zh-JgU+Cu;X(TzLkuhQ#Jwgc{b8dF3WRLxXO5Tqy#(WcUkz`FX7%Jn zm@%@H{-Iy)H`c{a#C_GZpZFevc2(AG-$48@mRi7eWl~kKmbLw19kjwE(60<|ATg$5 zAcg3CsoBH@NvymS7X2S=Vt`oHDpyYm3 zqDq(BJD@2v=a6Q)Lkn9dZQ7P0S*pP&swV1ks&(VB2Y1s^Fis&dX!vaJg3+A=k*^>8 zd^MB<*O~%SEpSVF8ljEtl&n0th9x@w-ONt=>B#3`S-tcC1kG%}jjIZXUR6yRYL;j0 z*tz-9$XzHa5^D#xIPub%W*QrJWbeTkQM!vD2z4x~bdAC-BfWI;q7h1AmZqc8dpUK6{7fGM$nHMo~%>J*7(e~@$ zCWg^P{j>b)#*>->!^_fvef!}9ulN~IX65$B%+C*gc9I{Z%Ltghq$}oqOIKpwv22Jw z8`^Kz3$@_BRn*Q}Y|!>(KSsIZSaTi0k;<=UOf~qex&qW;u;LzO7d6T~AYxwaeZTg6 zc%chhvFvD7d<4Vp!e^_JezIfkW%VsgV0T7LIQBk%k6h2@h3 z;P#Km2`%ar~A$=70;k!lyO2L~VJjj5oYNiZa0s)I}x0BRF;NfaF5a#yr%pI<$s z``+uzCZ4K4Cyc_oPOPh*wKkvapo++1FEJc@}W!fU1aOho_ z%4Fz{LK6~`PeLoEf*+LO{ksCIb(0P!fIls#z zRrVurkiv}xX2yPwZOScryMFEGSbN}J*cC5Jo0r#qb$^_w+aM@TtGJ=~AIJB1Kb+9{ zE_7B4SOnQ7g2R6fA|Th^MEd+?c~K;^E}J044Kw}WhFDyO%EgSCQU0 zI@B~QTO{B@B~mpY0$skH;}TPJZl+=t*{b@WkVyd0$mZ*~YEQ=fLSB&KvAL0vqqeCp zGfa?L3}n#K_Wf%P35{1QuSnly2;|FE>+bV5d}36kg^%JMk+ryD_2X zwbYW`?NFdG$+l6ftPfZVsKs&cCdz&^Bum5uE&t=o!%*lP18~tV3uWY$tY3qVmkx-K zgL27fNlvg<8cDTXy^@?SrAB(X0gGXO%SG84TcFHD01rSAeV#iX*{ojM;qX5gbIGZ+ z4V4$unfFKRTfFg42S@~1%mquyz};)%AcqF$9vr0`&7OkCfS*Alh7r4fXg zYDSPqwZVvyvrcteveA~khw<3VWEl&F2klTBMJ0btOR^?OGU_mee_FQ9zr%{bqmO*p zwo2)xiU%0z$PmY{c_k?Awg%(G!c~-+DI_s>uGA{#&gDZP@iPb$|D#RXd}?p{NUC12 zI3A~2B-g?5h^kr-AYAHCwu}!zgEmqlvyYuhx;Ro{nMCr0d(Q0HwFH%6tm5Y-ps6m3w_l==Hig-kr(g(wZ8~ME52L|% zFTlKOfi@C?T2<6KSHJD&BJo|q6IE1}$S{1gM|_QZ+VVjtu{bP_MBbpoH+l&&{a)T( zE3@`i&ye}oS;I<)%4hBt>BbUhT&GW$tEi}QjDncW3rg;Yzn-M3CJ&MyGq(beEgL8a zdTJWi1NmkWbCt`!O>4-P9{It~&M-($uie9QZS2bLl#GY!4}z(f%nLi!`cjVv02H=z z$-smMj_KTvD}BY2Peh&RF)30vQjd=cQrpxv5ZVZ3ez8O6mk%0T|Gwg}=?=2D-5UmR zYSKO}%Q!fMX!W+;PH&){J&L#z)!d)EtS`}~6=CzRSTx$E`}b=b&|asI$1MQcOT!2$ z`L&Yn^B5;@4_}wn`+%o33^xk4zv1`D{#GIi80j04;zEyx-evs9e}wWG?q|C& zFfC-PqUQBU)%fZ_;bi`H#Vx86D6HcNI1H~+BImp$`{RD!`bM$7wjLYsgv_WsDJU?$ zQP50)=V4E{?e|uzc3CePKGA6mO%63F@kR9t+iL=evAL0Ai^+Et*`iU=ZTI;{Cp491FhRzHJ-xBY%tgRtTY;cqRk^P4`c6}DU&qhA&V%!2k`6JK zFFyZyUCE-fP?w-rpdS$IEe~I&Bo@$tHHG6FeL+MW+BT(8wjtC7eSd6yz2#d=MnXsl z=;k&{yuU|1w9Wi0%9Yw8Wt0?VYcc|@hn@kjS>%w;5#foR4@m*@D-R38pA4Mr|y9BkX zXiQg{gqHHKM0Jvle7r;kD19L7))*jiAm!7IMJHc#wq>@nxAd21Bk0}WeBI$Bj$wtX z;qc`MRdhGxP}^SgY{g!%kM%HrkDkGX_N>Wyqp|17vLAsNhe1z}uXR${uFu797E(Jf z+twQ+OfO-k(O|(y@qWJqcv5u0C~19`Es8mId?Um882rz`Qn}&#wRcwp=Vhq3ajT}f zj$v|zTEpvN={uOi6(-6(ZMgrd;*+A-O+x-MY&t`zL#0Ky=Jw3Q+LiLa2bIKc3GbfP zsK_bQ=R6yP7LfS0?-(r{{&Cy9E_(5{W6y(BA!k!ssy5pKEz0|M)}h`vBLA_vhMDWo z>Ohy~i_G|O!Z_5X!H@}>>(WcT(WB=oeKib8z&jL#RJZmH_$SIu6-<#QeMD8XqKm_w z><@iwAeBuThfiMBZ>7B7jkJ$++dqESW|DlY&+U$yk`3Zj5>O~q3Yk9vLH6RMhjWw< z%}~meexS*S!*STFilE-#Y7bqGJ&Da0W%xt8F*LPrgEa5AOm2biY;OGR_ng|~;;Ov6 z^^8WQ$OhHo9U6agDU4u3!cdM#VtR9fy-9?~@;=;imKOP&SQ?HklD7858`_VLXuzm@ zRF#^02F`cROs1M;;V;}&7;HB8c;Pj z1{{ExHIyeq$T-}EbW0Tfy<-hCYU<`JQMX+H4k3#jMiH?#yG;m9lk?+Ln*Tr`0a(ok zV${J3_PzV^((qWBb%vb@IFNJaiPz1ySCN|$LLLsxWaGUjIfhsJSs~1?2t|xCfVIp& zE%l%pHv$j#J{e4q#UkR@Lot?V6S5PsllufMhM=RTxH2S_@1%YRXsxW)8ym5A5olUO45zCNnTzaIZ!RkXlgdl#Bge0a+Dw3xqD~4qA&e z+#A$De2VA2@Z_A|C6~i^vx9n<1I95iFhs*?%LxOdxl%}>ZNP8YS{Tw&R(94ymthSz z#Y-lWqP^OB1-2v>`Gkf3YaA0_x+T)Kgq7}Jd-3;Vxef5=&XlyhS?JFL6n+DTuf|yB z4EN4+=27F!-H|N*5vK-QAA~cI#BbyrxKDs0y!(|Uhax57DiULp5!}F?uSeBjunC>{ z(_EuGgQsYelB%;Z)>WchUr#*u8n2>1)O{;T84tud`aS3#k@XB6w!TZfG|Zx*7nc}} zbYCUbFU%639$PKZNwN|j2(*X=&1@~_?J#1>@dd48y1|3V?zHLrGZKAE?aln( zLd=0Zm6@saOQh|PTHw!c-9g+Y=z9*wC2PcH3~uQN)(L&csq*R5aP^~Nc;7PN@Ot~G z^wH$qFLo}}KlsWH?o`z*_)V*?_LDAzb7JSq{(jTGd_bR>^~;6t>FdivB8;|kC4T#i z{HW+4CKbDVt6s|pDEJ1gr3^EL?ZhQ2Eo>(S-L&1cl6K$w%)`8M$G^B}vsk64&lN&0 z_Z^r_+P>e?$FNC;vfJ{C^IR^Q+`SH3{-D_xVVBvx3fpJL@2;TFNsoPSQ_tK zYOEgj+ET(1&cB|-YcCD>JQ2gpMeQUCkl&poM%3F1V;zo9(!R`Yi)(h(yjp}w86 zUIm^mtzIP#g@oj?UKOWH>p~+S+A*wB@Gf<@0{o+0q;+ zgt59d^-8inEznSrQ6z6?Y;tw)>5JR5CyJt1;=y={_G49O&DD$gejLxDLvM7F6XLY2 zMDB6w-c+=_snC9!bpQUR78=KEle)HUJ-^7accK#QM(Legj@i({0d$(Ki`>)ptW`~S zsr#?CNjI<1RYkQNjlJfPI%aCe)AMP^ngeV-Q6f>YDKDpGA}!9YB*E+V%|_fyIpn+I z-@Q#3z%EM4mxy(73w{?Y(J?+Cd&J)?ltm0_+U-4=9)=H;W=J->-{|wRpBFToyv;)* zhXszV*xc217ti@DCp}YOky_;O;S;fx@NFdWg-LSSpvRP`!@TD2Z_h5(FqmQRuYTG7 zpzJq1W;xMBRuC<`@pbvC#BT2PO$}QeX=W3#{xiCt`sbV9qKYB=QH#ZQhM_QMT?8SX z_6QT9-K3D~Z|{7c7z36zdb)LPdy%QgKG?mTy?5LzHDS@k~FXzqxZO9pE# z(8rH^E+AJP-A&+q2A-~JF?!R0a`(v^eli+Oj|QQ{x863tee^;4q{M#TQfA&I{m z!j}dJUf-XcRrr;RrSu$orx+x9Bo%sOQQ4PF^jNf3HFcU z?BD6RWMu2G9a`*mdl_W%4)68e0bf{n)d})u?A613B8-d1{ziWOG8+T1<*@pdwBb?f zx1SdFm2SrMQ4kbl{>}f6I%=%alm`nKn7n0^H$jFxtM-^i$jwBzR zp0+sHdEOf2(^|KQ!kvsmf0kfJ$05FghfPCGlzIup*;=rTi})+(A7ah>gCYmeo!3e(XCB-AAWQeHty|Jk*U->$ zLOij(8nJ-=S{R=Br@^~#>xSlqM_x5Ext}otUrd#jp9-yij!<5}4QH6ZxbMbqUWUsm zb`*s8B=i?0v6T%N-|VOz~2(e=m8U3*s=_oyO0RC$-Tm~>cy0+eE6 z5!S}pH%H_S;fF;{kmU|1hy1nTRy-Rn? zmPsdkla30B)-|Pk&!x2F6&B7?I@7ipM2X~}0IA~aupr{j3*Ww%D#}LqK-nM{(lD8Q z^I~JqKk(6O8@^Z`13Nq=byQUqaB;Z-`2S->9J_B*J$V?2LQt292L^TGC%Bp1s6m}u zkEM5_K2j;!7az^|cdnmEOWrtFbD=}TxjFr_6JmgHaDC~{#-wYRyCZ2qca{trx*h!1 z1WF{n@iz2fkZ~hWgMeDwj4S{Bv%Z z9}G{^4S$9}7#ahd<@g`tT5F`g`?b*W^B!}>NK9yhK$jTz3%un8w#M&?Z!90x~3rmj6eKz5dQ_}k~PccLOBUH5PUxRT>s^u z`!o5W5Xao5JMI!-(zdBAe6&iSCFMfT#X5nLr4^2b>X+XtyZ53E26?eJ>S-R-=C0nh zvyWz{g0%#1RE>%rFe;ri*b&@)bLjTHqYOwGfo{0-wF21_NjN<vL1$<$tz*$V~J9!L1|H%R}HPiSUiXEhIw8- zL)EN_FFO(MBDj&On`J*R=m3bz9)kunnz$!X!SKWtSqG!He;YDtfQk0E>T`@oY0HB`%= z(HPc*zn*-$p)iTe1sLSB?(7Q@;t%RB)xB+E+pvNznL`{`0@SsJFm2d2+S3<2FOU0|R(wHXZ~yjA{b;ZQ0lQ zhNER7)!@zuS;rhE^D~wE&>n9RJ%C(3>VoOaFf{ydV^Yh93A7DvDn`fV`}T=(J#VE* zRn&z2(d6w};!yq2AZmOao zspqJ--GY`6v99*Es|nd0{AsLoFXU#qvL8gM`z>~cx{`Ywp}&%!29oO&0NQ> zZBIe+|-HwRq~klQM+YO0HgfJL(~T za@mFzhQ&j}`GFedyx7mYaM4);@!Cg~flqduJ0DzII3dQ0>Ai%i47!4P@im1R7L(Uh z{Rk5MZoqtaHcp0j5c%wQ-ur`JNy98=sIFhhI^!(b$c|W$cUR88Hb2Ho^g255259rg z!c)aJwK+x`iv~ks#v}#uLFfNp{A->I(JT?JMa)_u4uKz{#(_g^)!5Lg0fYElxYf_Q z6IHX%wt|z_7`jK8_t$|RFmsR~uTXf`iZPVnQc_vY%>Pa)CqhseXI-M^pXfik>zzqo zOdm$Os}PTUWF^k`hwteqT_#Mm{$bO-mQHQvJ(uKQ{UK^V$UPWa4%7!&CM-&E2AYUrQz(f7 z6(N~lj>omMCQ&S8*TNhm#Ax8zRsI%6hRq&02k$_yR0**4E|)tz>a&*m5ab~H>XB#J zdnLG-(V_I|Zc)a`4N49k&8LCisEWYyXINr9NdM)Eaa1E0ynjaupRGZEg8B-x&G z!*i#o}_}8q-(Zqlzd032nsZv`j0G23<%o%Vvq> z(j7>wOw{7fn*VxXYh;vSaw;R7oI*-{sn3$+=n22 z3Ic`6NEiN3LS|vy2bLP0TfLic8}0pHu_kpxA8l0sww4z1Mm#a~YSnv6ZZ&61g4pPW zgoGz?9B<7V7_zo#XDo(8yv}bKo^fZFs=0Umn-~&$9Icn*+Pvy;-uKkG3(3-OXSn}b zF=b|bponYo`J}A@l{K+nBQ-1j>>qvUdZ+UaT@=5s$9&ewZa2LUg$tc&ry(2#Vm@9f z#VT^fh>h$Tdvm+$nYSMAGOlv;@VriyZ*(TilT1~v!9-?`u*yVk?@?pnGht|ahbWz! zk%VW#3iBPkwtMuu-4jVUmv-+V??hW_97Q>`Y*&tb zcfOYOXdB(wkvcUdf9HwI^HZm5o51YHPW!UYTA#9PD1K6`nC&h*qG{B0c*(M#VHEy( z%&ihzSd%@}mG(%dOjHJ1n_)Q{gC}|Vx*ea8n>65fB{88WF|Y*MfSH;m0&k$wwD7xn&ebuz^i`t z_QEdhm06gATCK)JR~3u?eRwZ9+yc{IUKM+p7gDH)8CLf#qK}~pc}M7aTiDJ_OPbd7 zkA(cnEI?b+EW1#l7Z9fj`DYmVQng^0L zBGv4wM|L{%Q43?2?ulLJtJ}&>>X+(NQdT+kv+T&=)8Wb{MQu5&g`*%zH zCj5RN_q_sWSw9RQJKpETml{oFqAZ*GE5|v|skRbHoYLF-II2hrPz%V_rF?}5B)XAX zhIIF@yF!Y8P9c%U@5(EXYq^5>_CMJV*z06Goof5bK!(0 zif|^3cWdpEKo93}ScpJMevPFRf{+FHL_H3}=wdhaJ^v-9%gLIolez(sn`CcA7!xLF zr>1;E<{GETFgZjYjCZH)AuMii1wMtM0MJh_EtYoZAGPymzmILa?6VgkIj!_}vJ1;u zkzKN-{uiPp0+_M>M{srF4O(t|K{F8s?Ru7clO`ZqX9&kOFz{UNmKH7=`0wM__FOMS z&>Ci`V()+5`40h!TDqaY9R@aCt>v7iO1TKW0{4O%1d0DH3BGVxCc!S|f173*PN(?b zA%}6eL)18h43l1hPRRnjjFPWVMRxW^X2ig*ZWj4x@-Aqyp2mk)a4vZj=HP@n6f;4a z)A&tWJo-<}h7!3=76me+18E{$;!YJ*QK8X}$wjeiakSw!Jo(Wf?vi=OU?S0CXzhTFfn_wzs z`6OGbN>dqf$TocGj_Glb=_TT`ZE?A)f~%&(gF=`@IPbF*&15*Nq;n_=T&WBV5Nm`Y zw2@eesDh9l>3E~LM?JLBDL47x)hGNVv z|8h2kP@;mS7M)wVY7#-~I~JjD%T+~Nmz?=m&z1EO(C@tiSB)+#9bmgujOVXW1;ZJx z-D3rsUSS3)@(p5hJfNzzZ5t0B zvi&qgqVw_!W$E}@u+OV_{=OO{vGI1s8c}%+)W&`}{x>aPqfh_f$fYVjE;-?r*8xv~ z(6N~F<|s^J1LlhKX=tf}6g-xr#~O*3>bV^Lg>Qm#63KWi&0+EI{r$CBBKmOY#2AyN zS-9p6;LW5S13G9x#M50rM&By2`N1~ria2vP1iL2z1}2YRs5EO@Zf!^a?;pyn?X4W4 z|4gC)?G*(LISbf!4c{GLZGYYB=9NLinLW*ucJzqQ3$aRL=DtNKlYnunth+t>G?1fKl$>;wK}^B`oAE(y%i{w7 zG^eYJST!x8ua(i~Vq=M0+r{$rEL#=ZHacjU{f&P4if-3y*NZ=W&Joi|$aREWDIVRj z@d3t;(n1>-FnJMzR2a#Bj~JHmTS7qqM%4)aIzeUcy5eSUGd!eEJg^)m{X8&P%fBK; zv#Inf^TFO@GOH@3JuE_$+d_|)8SP}hfXaSSCCctoo5po^R#?e6&TghUy@O1MvKhB4 zXhAwbn8F#_rxAO4G?QEbp-kB$T`{!=-^I#Izq2psd}qgYzHj9C9mMn-ulF{$?LN zE@-#b0e9o_WYKQzQ&Wk0+>B+9I~qKlM{bJE`v+RZr6qr()}ebyWVy5 zssjIGz4T@L%i&GQ*!QHPc|BKuCPm3Pk`s8jZ=D)pdb7h>=5*M%)=3LjziYb_sNtj@ zq=w)bZs*Mee{ib^YWwEiloa$6)BK@GdxN-wuNb zS&kP8`fOCeMAvxYV$nn>OjZx1CChw!3CleK4-Gbsr@tsLQaGlLV3?9~8{^Mj1sMKg zpFBHboC_@M0Fxq6+|?6io)y&UE!!sN##gxNR(lisiM4#YeDXpVEYhmH@e9*et>2b(;{ ze@+&MmXg*!y-~#g8;>s%ab&F!br?17KpZh4GoEVGWJ6lORQpdnsJG}_;(gB8P6{Bd z^Zo#!WvkQ1hsTjXBrsFlIHL;Nj=iuzMOd{EYsZRJl-bWdf00|#6#COjn>nVRp*IvW zC}i_&t*q&DH{Glk?jfEz)qTx=@;aY^1w2@azH3UJ>k6^b zP2&iLnAxI5GMcA+L_L&RLZioxEOv={_Bm4Dow)t zj<&f4YIch;UOF>FJm zkqVa?xG%8=0FdvuRqUjUo^$K9e0B9R^iF34=DFb4w(3|omgyq{vaKaRWd-l&;(RBP z=c^kku;wBcg^%9VC0kbo6rTJTh>H0+z{0Qiw&7TGcvsa#ivMKQK=?ZLq(@JegLRkn zb=YR9@b-sZYsOROu(?8qhb)h*pQ}yUGGa^Ag{Mun_fy>tLU5I{V4O#jKmD73HQdi3 z2B`juO8_n40aWFP2mF}3`JnvJUSU;#*S0BUvd{>Qu5Ze6ZVNk9uMVv(K- zTzmW_#fAP~>5kWq@}?&uGo*0`h?8d)aK3xt;x95Q_9^H?^sN>T6Na*&ypv4b8<<@! zAcwlaa%1LSZ0GU$lHrmFUq#34+qP#Cg$PIDBppBTXihkUXjm93YnK3^Vmx|+$k z#}jIv*Rj)x*DIRtSuj@aqFSp{I1idgbp~}cdN&Ot$bW@d4W}oNe6LDB;mH3IZBG^~ zUV%uLuIk~JDqh@2L}xNKW}aBz3_S z6X`rVqgfB{*cL=bKVJkMSbL6n(GWMU&mkvHaQ&F3(1z;79MDdJ``eeo58`yJyH6LA zg{?IkVi#XC<}yQqRXei#QS1SkD1LsQz>{0I8=}u74-yObHc(8TBb-!W8M?Fw3j)lN z-i;N0G9v3-*WA}mm=L*}XyCjT4*M35*O`~Ukoj%O?#3~@KqRoYtL5C;$FcSoV5&xO zW7mZT=xt)t`Wpa}{4AAjC`|;~&erl(m_-JWy}E18ooTV6V~W3%9Ek_!b1ft?Y37(C zI#A<;-%;y!f{U2zu+L27L)pV;K$F1`L9$JaeF?4F6Ob&04^mhr0?58C=adNc^d|xm z82$`yvf(~q&ys)1rU22Rm*b zO0*9?bT=G^ISf)BTSM7m>rf-E8&SH)vBX6xZGh9BU7Iq0omnw8Vew;tfCs3`WW4n| z)>vx)5vDgVNb_rDo)4v&t8AJFQDQc5H)2HLl zU;t^)3u^I#=E8u!UukpVt&n&J+<8NSHruvC)-x>#j-gV@LgXtzq-hia%v( zIa`A9B!5yhBa`Mq11+c{``{yGK!iWGWW!jduFWUbmfjZZ(FTShX4;pI78=hfrZ|^c&4fsKp z&;UhBWtt41pc#1s%asT#PuS|dbU?CfzAf5k9f>`jp|6_-CRw|*nHzP|<#8;D?+jx`$OL>WkC45GaoB@h{YIhh2Tg$d+b zi$u)o(E`-*?0<;o@n<(CzdoV!w2#camT>ao%Q->))rdh@+HU~3jCk}qS*%hOmOE^+TQtDl zg_`w4r0i*iw|zy%ik~d-1afs{G2`J!B9jC}f56#Db*U>NHVqvMeBd7lDoFBVMeNo| zMA9v_2oukJYLJyoHvYtx<02yJoOl%>@T=p8z?*q9z*RxJhqe4 zA4V#CGnW4M&af4RnRn8}E<0fod4uY^&ZsjNzD6+3nlkPkH%lwQ!2hw{+Zc|>+G*&J zr)81{=1(0GCQU*lS?{NLrGz8r#JxO;8JA2=L4d zXPlkUG#_zCOgoeo+EPnp4n0_$8dJBA!-(JdfW-85qs!ZnRPy(diH8pWGgR{O|31)* zOP0T~{}64$3y|Lbx|Op|#)nqVM?45&j7f;|TDW_gfgC(@{`{741?)U86Y42IZGF za&2||QoHm4W_4GqdT(zq&~w)0;u`SzY0+#t@3j~6cOR_id-Wl1```L2YsQgvoh92i zV}js!k1Dsry}dAHW!rn8q-5|S^4`Lz{Xlq>^OWIpT1cl`q8ZChSb*B~y2eEZ_Q-dq z+%4a&8YfhuzVlg}9xcE6;h%3cY0eZY9fAJ*5ncUavRcO22-Eh#{5SLt(E&K7qw$H* zVmR=NGxtJu*g{B1Z2T`Xt6LW$&x#J&@%oxbf6!pFHqd>*u6pY(S3vfuHq1ZLmHEp0Xte5utH|EDJHL)TrcdF!CW3ad z+P8~A$s*FNvDeSO7VlATl9=z6VE^y*oou>@o45r)%vEXgN;|;9rEK9vX^6}eFUd)N z%D8jDAPN5Z#MDh*UM&1g(AdA+1Wpe8wua(84@AC%9L;n)gGcpAYD%WH1(>L}+76PT ztf))gyKleV0CsXURr2Vt)Z{{v&GF{@x`GG;X)|-fJ=B0~jGIc8IsFtu`eU9V$@gbG%_RXcZw1MZckl4BVp9T45W^I{(X%-D)PgJZ_Mfcy(qSykH4AUc^0~ewmK3HtQb$tFtyd zrtk?n$$I7yaA0JKeI@@_=Ujfwn;G-DpeLa_@xHi+oKDjCT+&t+A?jFK;QVgd*x%gW z;j-X2XkyM;}KbeYaSBM0p>lGFrvk+aljEd}ChQ5ni@`vd_-Q4JS)-3+V zVvl}57;G|WC0w9}{&($^e<$xL?b3|XWZwh&S`5=MQ&O#TIQq*Iw4vGiwj86=m z7hj8>{xNEtrIpUEEO9{k#liTtOw@d}=x4uJ5>_asHd@Q9{tlw%jbRXP=bjY*QV&Ax zsLN-5ND!K45KAolXEe^gD(HCpW{<)b^<=vrGxkv05$~z>5teD(>*XTDdZlhP|NA*< z3HN`xyy{sAhb>RuSLomGG`+kje){%RerO#OgIH(8{r=)`=5zV(YLc>fD6Qr{N~tgCJmCN^Q||9QwJ=)pFd+^Z(16ZZfa+(+9^}lahKDqR#Y~vI{lAb9a9d zfl5Q=hA-0Ft6U6G=6{yZeD$-z-Wm*WX07%yJLRE2e;rEj-WRt;3Z{s@`24NJheD<5 zQ8lXYP%wV1{~6_}`=LH5;DV-c^3m(gnv0}N4;FJBv>W1kx@pFP)t{Yt6>p>uzqvxlP4KjNHpbuk3uRVxFTU5fw}H2J(jSUViuSJ5AZrzV3|}lq{Q90K z#At3g;}f{0`EmYWO>Q~duVL*c-P(!Vkx|)gC!OH!xt=-qtzT#5g$L&r+$a-2I8@$QS&OTMd@wC5kUzO4G6K>6W+ zYL%WZ`Vn@$SW0Z%qpnQMytY5zr@tc^CKWl=>>UIC{-V~T?(e$twPS5pQh4K)fkk3` z#75}}59R~4AM;RsX(yOYtKQn4C2+q|f+Rd{2z(vZyzKm&#=^d4k z?R$Z}`8p|H=PVG=22L$bjIG8VcuVq@kn)EOD)f^u`)RwcK@o>WEVGSl)u0)sP;)N& zNscl1CuZBKJ+w~W(;jCCZ?0nkcIiz3N@hIjp&9mIrE&KA_P7%O#^siq z$!Y2gMtaV0lhpEf^xI6ifezwxRXLLV7~F#z(7gXSfd{Q>xw36nLe~fdS^Fa_$Wv`% zGdE7`Z#%!ihh}9@Lg;+GM&abDyKO7M=5X-%;#y5moizkzS569%A=?`cLlgN|Q=WX; z_hppe$V$cIyMdmP@iY(HG6bC3zUNZ6Iv%YY=sBTAiSe&mhXGUTkn!@37nSn^tN#T^ zXvgzZsb3+B_4SE!A0~|tGTX5Tquc|GaXTAphtD%6Vr}7t@kb{qkIst*Ok}f3^cPnc zt}Lo8?e7`(5nVt`qX4L{Qx})95nraGUJv*m=IE zh(ke^{Tmqkw~D}I$g0t=-ghlQO%bUgmY3*vJo$2RdLf4d2!G`+Sek1|lx8$9P|T$< zeom8&6qxJww>)YQ`k%w?tdWn|1&MYv^(Y&~PKaD*t&6I6dN9&(j{l2h_dng+>)Ua9 zDpzjLE&&m(!d^)}IR+s+=Y{V=yD7c=i)V!8n=?ZgjT(BX{0Yg{&<|tVcb^E|AWBSE zwo3PC;12s%mT)ZV4L_~o-j=@Oy`~&Ze=}x9b`tB%?bgp-p++WY&56D}3ZG?s#Uf)R zzN(vh|%p2OVDh&KB$QjWZhlj{U!BRrQL=r8-DWn_IED& zRz|ujGHrxLe&lp1Gx@Q~WNPIuS7!9z%t%b7Si`@tH?N7(v8j7`21gq~z2k_WT3KrC z@e*nM)!bJzc>Tsp$$?gO;V;UCKC|7ae8oCPoM*wy1>b-Co^wQVtQ2@y9@V9A$^Cg6 zf2xvhS0IHiM^mW((3`p7Xb$D0y35O1o$Y0N6k(co@?F_Jy9Nk@Bt_~ov5a38#xLF6 zx+QZzrHKR-h`#e;?$QUzqt9ysJhW+pE|cNCx7?}#uIH&RaG!s~ej5rL1pTC*l=0Hw zH8`Xm@9SxCj?W8A>6@csM>r+^UE0qD6L$qAcrku+sap4h>f|L`%aH3rvRFW%KvoA} zKwIs=IISzpCt)y}(vlql!_!=k9qW*f<5NnB>z{TzBagOZYeOP0iU&*kgnpmIdTzYg z$GJv!IDRQ%jYtn_Uc1WHtzSvlX>B^U0_akeI6P4w@b`R$BO91VSbn8T7=kP9qJ2T| zO{wIM|5-xsM4v^JUhxZ^4^MUYvqqr~kSEwh7J_WjoS5E9sSnhA;dP%Nf1GY~?798& zTO+IJ1}loa?4(@v&BC1PF^IHD;i=Xa+251|5)1>G42)XGP)Q z7v;~N5q_1KJU>xtJQ%zV{ZwE4bMwpI+fi?V6B>JMIQ>ta3a^ZWRb1IV565o#4KV)w z7z%gki8u*qsa`9zs5|!fQ=t+E>L@6rh8JkGLF>}L|JTim22uSSvdPjFeYj&-#KP?I z9Dbu#;E+ujBlqxkDo!nvkZ@?DQwOkUI$*Dz`0CuIEennNrvdTV)wUwKu}#`0&)*Sw zFsq6)0Aae-zv}33s8qakhe;HN>W09G)DxbCfQ3i!{+~y)_~&h}K`YYvho4q`h3dhR zA57517F_-(>sBH&7)Uu?n!QIcl^>!LH-U%5@VQ7N5~=t$U2}57Q2GC=d-HfGzyE)D zh)Pn{Xc5WQf+(qkNU|hZ$2ya(M99uCrbL!XLXYh zW6bYdz2Bev^Z9=6@BMh(|J{%Ks^`4Ud7bTbUaxbVbGfdw+?qbNir>6AhowCH_2KY| zj@y%6Cdxg}PCZp^#Q#d(p6H0FMi^C2G;VNi$lczI2Kyi4Tc%(0a!Wak?pRSGgB^Mr zX!O}E^S3eC$~2n7^jX|6EC zACzIm?2Bx?M8miQ=d5O|pulcgx1D=votb@oXo44UU{8sX_%ZsKqau?NjV_AwWEXKv zUU{BbLgy0__KW(hP4<`Y3G7^S$Yz}z=oOPoPS?~94+Pm5AD+U1v);CLf{`etgf}D% zvu1$Qo1Myyr;+H7Ip7*@;cygCc)Q^Wwr=*7#XZ%s)Z@9xQ8Qfg<^=;&nV$!X@Sn-4 zB-oRgfn{dRvf)`NG8t#&scLlAbFh4Ja)Kc=zWwLp4c_y&u)dp3m-c$E+?E`f6P!}# znHL+#j*9ooxo1RJLO$N3xzkA9RZFS>sTSQX<==N4SHI#|&MH@+pCy;VXPej0o=1Vr z*V%>vbiulJ-u2q{7{4>VH&!Dwgwmp=>VGBqs~p8iPF=%sp4o1iSP@I%ogo(+gb|6_ zsT;l&lk!a!BrdZ2lClbXIw$T#{*x>WIbmu=0ZtBr!xO-Qn3*f-RHt^^cYbdgw>rMN zW}p&63pAKBjP?Hcaq~Vaev+sczEDj>B$KcM?Q-8%AIIKE=+NiX-C0c*^*;Al!YN60 zQM~Z15;|`^awJO9vd8DZ1?!2$=JV-EDT6*nGM=s*U$w7hxOZfPf08Dj`deg_(Kvs~^arJ7OD z4~jl)6AWET8pDkhPlO+Do!i^Kr#D6ZSgiq$Vs{nRp8<^3SA=i;l7q8~d`uAF8D)@sje z<=eLH>on2DIGz#?W(M%hdFOuLeWQLb%0RfMSGs#jl4ow@TxIz8xC@DXQF<3Brt4vb z0m)oX^qPEe*Opv9OMMMsbrgD-L{?Zy2f3)Lh*+$dsL@CmTaSxm(n0-uoGWq_2a5{1 zpGh_j?Lc_EJYbCw8*83eZ|0|-4!_l!EOB;XnR#VT%9*B!U*K2*0hJW5zO;p}GxdAq zY2nNSA_ zvZ+~u$M+DrQl3Q*O_S3_k99mk1NIGr$UJUV;Ra>|`lJaZ%+8;51s6Hqf^ zq+Z7$5w1to+wP?9Y`U?PG+}gbe^`^)G;D5uEZxe`(`Ql9McN!N;&e7t)5hF0CN=o9}$ca<$68mn~nkyY&{^ zAz_cj_5ka}r?gd9ElPCTsAJaUE*c_wtikNv_VD$3V)8__Tui{$(e6ENjRzUKP~W5` zc^vpU=_w56oa*B(^hlNhqHO}#A~9#`Z%#> z>gd|cFReXJB$r2%Y9|kCGF{26knPXw=CVf*9I>`4Kohzy3I-^Y@T1g9>^SUAtRha$e zwhaUZb}oN`op*&pjK^IJnP_}XT_o&xx}|B>n4>vir=2S!Ygk}`IyOf#qd0dj&~n5X z17+giD7*UdUd0DTvdp{}d=6kfN9zTZZu@BaV3It_XB4{ZR3+&V`2p=EM>u;pd18?+ zv+Swy>8Z;C?MaKjPfW|#!ISXmP3wvL&>#cM@vPtNOYmRDtwePiF5ovyck`r~!)#{^ zt+$_AqTp9lNW7@&9qzsHFl1?onRkbkH>^F6BqP`^Ww~@zo>-*flaxymYNY|RPJNT% zI(nE@7RkwT`>Ru)6ru}H9U~G9XH4A;Gm#G7pk{U;QKuy`hQY>4aX6Hg<47+t)aS@T zqAl36fl4C6agMLZ4)lQgxm56#z#V}Ph@_HnChzMz7l{`hWmWk;6GuEJXwsCe9xjNV zwm!rz5B{&pWSPdfOAdlk@BB$}D{S`hAO! zpL7~WiWWeaRyZd!b3reR(_Xl2WpGh@wI=J~&&u)N30ZM3xL!Q&+&xl5U1`-%IYo%m zZ(sV}z8b?g%F0sWdHBXfK20E^t~CAH$d!G5;pa3%5}tM+n-L$C%J0TDl;$Lx>SVn1 zYf-vbO`MQe#!&|*7{Squ_%(-%^)^>>90;>@b(=D5`}iLZXZfQI5N4?nq4gIS?LVq* zj1-Q%5ya`aA7__a9r3W(sGgnrRPIDk9)GIp_EYK3)NoaL{db1&RqIK|S2fcnl;iL5 z6wf|Ct#wn!?5@h-?Ok0h#f5onN^pPr$ko%Q^$@n6cl)dFD8CVQKGyBzwX`IFu2{$P zUKOsDa&^wz3afHfzRSEe6x>@&Y*Kk|pYlkk;%Tz5(wUDAv8{4X*)nUH@d6yg%ZeL1 zdQ0=D--O8Y26!3smdY=OgVg6!%bBh+u{^s8uGHIpnO>XsZq#(e?V776VaDGTeM^zN za(VH!_5sw7&rZAJk?(en+YdHIJV<^*s~3`9O+HsBmuenod_?28RJPX6`mJj`zcZE^sV?%@^!Fnev_ULgzA-jH=k2sE_f)<)-6t(J@zych7_jKa4>I zE@72?>v#7hD{#=*IclYoI6h&hgZOTjJSH=IIMYS>bT3W1=5U?#szdM6sZ(F5+mQ-o z)+vKn{BYc{U5*dFaC-5Dl5ZnkN58d1yHDW?WDX_kOe#AlVK320)_d^GmSGb0=s4T6 zd_BT=sL@uufp75Jq`5y<&?KBWW~$MCPdZPlpH2`Vp%a zy)27lKF-yAtU`y!9U6+Taa`Sw3tw80X_B8gHr*KI8$5sN&}5y_R7A~+UfcJL93$e4 zRpM>pUFS3&G&{d8Wr)~=jJW=iu~O%cI?ZxyIC3h7(Jr||bgpK}vnT89A@(_w(dxPz zJ#P)1`W~8)+sVQ)jOGCaW4tY~dclG4{b`u^)7$Wi&nLgv%FJl)#4}nd7?B7K`b=Qb z6cs!-jP#M|7?FzwUx>40*1kF$>yZ~{wSGTY<&=4+&%XkVH z{ZeLmL#9n0<9ag6%kiFuL>6`d9{?tYYIULq+Wk3k>k7neu2(op-(=tYHLo60q@Xo$|D(c;&dh7~2JPwKWnpBsb>u^M=;X>*C+ssNT>;n4E02Q)IUb+;ua4Ez zCf3uD#bTc_GfDV?lKw9JB@TjtSddu?jUHE*%iV-q{$Lg!knIya1!DRGiN5+pNJr%Eej8u5$#$JuC!Qh;*Img1W&GwCH z)k?VF9XtUyPhaYIEnau{e!+~&rI7JQlZ7dKY0C0vI#e>RX`Bxl!fev&@e^fEs3Tv! zI9Um&J?uR=Hnpg9(@B=l;N;V z?d45vzE56ZAN<;p@Uf>pG~}~~8?BA!-b`#znjEX{%*ww&C{R$@B75VXGzaed+L_Io z?T<-AqRUI;79L-Xeo;tvzjj%R(Q#bA^})T?y!Q@9Zp+93*SmL#i9n1>$3IQ|YH73eOm!8#fnf9;DqQ&WKhuHO1pCQa+KDiy1HRaqMgCA6C-7qw8|0;JNQVa&iJie zRphr=44ToMz)q?<0hQVwxr=C8dW$Kw4V#yK#5#7qqmr!*=iCj~Ah z+$iGMw&rf4Hg)gsRJhOF!|)5J$gCgD0#oehrMaRFjGk}#-$v&)e`GMmikA|Ut!b%O z=3<^z$6E#a?@-vUTYM#w#*-%=vh>!fpIVh=`+2A}_8Pi7BB=PplOF8BnpTycHT8j$ z-92Y_oH)YKqdLW(3{c%|sUCNp&Dbw8YIYNInvW@_U%$ssBg}Sqr@!Z&d&uxETF5ls z2y=OMu#i5f_;A$h64DY(f9xDOPjQJEW%+b+>|(Sy7yaWEYS<>lE2@c3yQ5_C3Qa%O z@%^oq=(#h@&qtN&hyF`1=jFyL@)-vXU zieq-RqDQjao+hFRR_}KZp7%9J`P>pL^Xq+GEqh@2!Q_&gUHPmsw(9oIorV(o_3g9+ z^(gCkv=>=}Tbl>DpBxFwx_>2iIsgs@k z?tXR0{l7OK7v8}Wo#zZyY-bEF7uf6ehUiIN{W0P6*z(QI=wCFs(a!o7)c|vai+|l& z{;3&(Jij)RdsSd~_Z(ZKZ=?4>_LCG-PmD@u?_c}$r<)%l=vf-4BG$38DM5zvBX@Yq z1A10QK79@ROBx?6#j_S|`vdtxJ!#DvZ$}L)5%__WxKLh;*jG4m&&Mla8>=z6|LYF{ zcnjR3>eIMTi`{eOYl-4c6gY+Sy@>m1q;bsJU-=EnPcIyn_iw>kaUZy5!(DY9>@5y< zrj`{w&dZ&5=cU~aSsAbb^1|CBWikF};|0V?3hqhu&r@%3FZQ|m7dJmWcTj;*IZobP zy{K-+Sq^Q*ed1;>Ml!ap?$wAW!M|@wb@*&>?!Bd%`e!#{$Kz|lh?eg&ljNod^Iej% z!$(rc4RFli>Y-1m_xmEcEOX7_olE9tWKH2Uh!b}_1(=OuA1A#icl?Fz^NroAsoP(L z`<@W3x^ZaBudwQBHg$y0Xi>S1JLFDKL!|WaTEe#!OsCqm%kPr7O!|^4!s-go%JpA8 z_0r@|ol<2_9pL2|yYTkf2~iQSidDDhilW#K-Us*0`RsZGmVcJue9><5Z}{L2YF_5@ z_upLx&qO|~)#uFbQwbZxjMGM8s2c-L8Ru%pIoj-b4#Q!Y-!t*S&6@|mmDV)E_66?R z!9Ov*mra`&-A@U=YpVWsa%f-ia-CBlypJ}S7OP}r>gK7Qi=GMCCT5MSe6E;t9OiP| zMy79vnunemw~~pmz}T;3L)Au}r1XH~iLIOkY^fD{%n$QcE38cJY~d1@+?%w$u}U9A z6vve<5>{*vfK{4tiWdC5ykJeH?Fmt}n60|z&`MRIxGU-Sn@=RIO*^OpR(xll8_z1a z{zQ-CcN?tfaB7!z3J*k#)%xT~IdDGmdp=?C8n6E_b&WDyBiLyt0WMqUYXZ^I8n#U{1SO=|alcYVgA0Y(qZrw|F zw+2_WZWAyTd$?UJo-B8C_bjG*jeobmR8DBbR5@}`^~0+7qgnT&n08}$f9)%w=Atv8 z--}aJ+Yu8DzGs7d-gkhl!F46BJrLW$XRP3B=RlM+i){2lHD>q>1)cpFaB9{f@bqHh z{o1Kng`4h{K72hkQiUV?zFqwAsIB5?B<}JkUxCJNP2a{5uFlC$ydmh#82omQeFM?4#6{<~wG)P(&I0oU-H>L+S~ofBZUOP9+N{q++!yTms$^m zvt8!JSYYGla)%~OY+T#ahrPfQ9#1%YD+}Ms6gO8((%T}S|9ytM z$cipxG$5lIDB)jAPuDl`fob{%CJNY16ah(}H6D7K%?Q(&HjS)S_TPNm7k-LL?Li#4 ziriS`BX1sB*Gk<;QtEuc+?&p!#e*dQl2nnzkjy$;mAu_ZA%E0<3)@47iO4Ly)*dNR z@?w%z&lC<%`H^H9QYk<2D|xmTnScDk0>;h`!KV`0Oz_7weyxd^V9^7lyqjITtf}VO zBBE_d=aY0w^Tms=+Q_*ao~lwxE+5>uuY&IK({?pw!jrKpLhgP9)A5jr?WU&T%Eu_<4UU&O&@^o~;v%EJAjumEt(-qjB8olKyF3ytIvWW0`PhUiR zC5rQ{JUn@j2)5}a9j$g1>!gZfE(tZQbp%h_8=*b%_IBY8V6(tVHsUatHhgfPgsm&x z)qGZ^yh*H6f7g~s&RNn*tUC?vqAz>pH#%O`WOzTXebY!yhz8Dj6z_!eu(H$I++>V) zH$`V>_p_r4_|--i^YZ#6mUoN~${*rk73_@+dH3>BbdrXW)e%B z4~9r9sGk89sM+#`D_6aUs!sF=`jH;X`g)DWiTVpHoDvopmpXjWRhvernSYlev`NIN zN(J@aknEJ}3?^6}cIC$|APyJvmDioZiWF)5kllQA&UrPD-PYOFj^WAiJ-Wmni2Qux z-goiz&85zm9{NJsY~?6@SfuP0so(mPfmzD>RtL;T!Kogx*)H}2&3ECX*pwMgayM;J z6i4PD^uSxRjU;qhm`Z}&*Fpu%^+(~Rw=HKmJOyeKXy2x_0HwzUUQcyfcYim-E8_)Z zjL@X=r3sEH{pR$gNLRl>w{XmlmoltnDmy{4J;qhWDa1Mmlc0Rg$+yR0d|6scO7{^v zJ0xDH$7V5hTjZE(z!cADn*+9g(McFPNX21}lf>v{*2BybF-X$*!|;y@?w-tp7ML5z zg&EomcH_fIOkwK_P4T!y)ERSBH-a5lH_e2HtaVrqgDqe~_K*-?9y zDAFjQw7imdteplo&FgDl$LNJr8~8H#ocX`3#JM`$A`P+~!r;Z>)UWKpC(D^7;S38y`J;RPmoD3g9EyW$_8@1PNr&FAQrXBXLHZ(k4gHJK+5M`fL$+9J0 zUny|7lh;*F`@ISL?_3uB)bn)XbZ`~`jb3gxdx$f$$-=~QZ`LRsjz zifQf?dM!P&Y{vFAQ9m`ippMy4Z7ca3GS7XqHlDB4kX6Drp?@1@Q8LTQ|d8 z)R-4-XtIf4M5{5HH*z^&5;(Ys!%W5p#{;XlIm|2v$rxsEoHRHaX6xD*7Lqgk#$I$@ zoUk2^=U;DFB56!#E1b{0lN@EXouE9j|3t(Cd`AKQ zE8^fTMyK9jw$z%(n|$+_cw7`9WN9e+O2TwhqZ-X}y;| zWl=(=!#76vuZLkar*o9c9r63KT)+vYY_llbu2TsHd|T3D4o7c`Nz)S_OKICsy0@%o zLa~_jP&@Z+*7^6{^q+yG<02Ep8>O-=iwy~j#JGor`!5uHa?}~u-L1Xn(f7=j^!7RH zLq>P+TcP7RBR%&eWK7^(m`|A%l=u|4b#0u7Z7E^ZaSB_Bn-{MPjWh}i|5oeq;);`H zt6^?xM%OCpss3+fs?GVRI^GUVadysEr+JbBrKD1z(n6mdb<~z+Tg=X)EiTq%V@$PH zIQc~CboAG#yuQutFTfxBg|`wLL=^XF%f8>M(K*3j>*}wM#4GMl;x{>(Q~rV&6rytd zk;7=`uSCLZ^A3|&#^_@B^#s;z^_xA7^*RF`h6RT=2l30xQCAOmT-_L_O(|yeNjGPW zD#&dR*#=ADgbAFvRxNJf^2!6cV^Y@Fyl*~4g$Li=M)1}_ z%4XX*guX&%kcmhZ!KTpO>b#eIVal95Mg{@ zYD1$}qw8ao5)rRweEb>1E#&26&(P$7Wm29gb~Om>xbOgv6j2f`t*|Y#uaheeQ%T1Y zCqoWtpa=3^SPytO$dWyENVtRy7T!16eAKYUlJUvOu_i2tNbP^#7ov>V{{XC@pb;AA zw3IqLf{k(j--D3yZ!eC}dMIE$X+7P^z8@(9AAUye zwvZ_;yhH*;klL5Yc}t~xpA=nk!7?2i(sh^$f4!nUm)rY*H8=DD*2x^KKUzPf zE5{hRj32K!WsB9IQ{RQ5AEZ!pZcDFn1k(5LIx4uduw#^N_oX+9zDh6|3g{m{TWL1m zH?^UtPR8u88?kf*>E0t_I5!X9tIZs|`34b1%-8gg0*WnGN;k$JmJXax~^CS97 zT2wg0iae;}wC?141y#qQwo_@TL23vr&0rMCQT6*S;8NC}*I180ic^xZ6j0~(Q?Mi% z;z;h*a8c1S*EPuHthp&<>q+`d&}xal|4kw94t99)FTWcrS>Tna2_ouvTyi_BT%G#* z3&~oXN}L|!U9laDHq#8u@fyPs1+f|(bs?|OdGpKgvJjE<$?lrd@7Io8(kdX3?9b3| zM#61tJ|b(@qq2ycmzg#gOt~~AhL?QeDb@GM%iHHtk2SoTA|($^m~p}VdgB-?tAqfe0Yz~ z@$;E~d7gWNTo)$p@nWdmT4*bMA8|5L?Z>!=r0I&~WLmgwd02Mc%8s91$;INQ*>kg& z_jk43{M?vRkCB|YAN8 z3+La!tZsa0^)Z+EB6q4xwAf-b>{<8mxw}Kx?tnkEQx#?Q0jZs(-4w;a*+utHyzEyL z=8NIhy-;-RsL;6*wZ^c~wT0ypd!OdgXKHIvcMhDD^7}ckz}O`E4a$Z5PS@twGOHqT ztrfBYeHm6d$nhBj5xed_z4=S+bnKM!Op3xWMoqhX)dLjO@#?%>Pw_MMmwPhJp|5g6 zOjx@!+8i~mE!)>BZp5mb$a*~D=6wj2T0Ne=6Zzn3K5n)KMcsn^-YKvU`GZHj@Oo6P z^C{)x8o@ngal4Yt4NgE6NQxE}`PZ9*BQa4?<}XtfPj1iNH>tHYb#Ae2(ZW7O?$#Z0w@jX?2~- zXKwL?AHV(Piz2!I8vfjjKGkA6(rq~2xcyzwN1JoqA3yW<7miqN+*zeZ<1Z^@))se;2jw^pw3 zXZ(`gS@b~?PpiK6y8dRI2HCH_N%>*f?FOgCJ5A4W%Zfe>niDSjEcEYDCTh_Ym}|Sn z68bfchgq+5>*id@*y+62Lf^}8FE7oHw?XNfA#r*e*TEN?`xTG(Cj_TG$9rgA-7j3g zs z>%k{YZ)yDD%KIl@@K(x|`Pl9`+3ODzER$)1)w8i{5tF#h`MeA0O#72!qgI}%s9 z@9T{$`ah7kVY|wZ}!$HbO6Qh`sIU^!Z)A(@~my>%~GV90{>A zJ|8|Mp^DG?I=#Afg8J1-gmjCTz9O~v_P)otk*X5hn+LCKZZo|z`)WdL!P2mRn4i&W zpws2;qcgL5SLLHsNR4OOzHC}C#zN3sR z9d2xCA`6;~Kb|8OAUDF0K8rc0#YNfi9i|L(%T8CGeXJeMSq6bDY#_UQ**-oZxVM3| zCs9&+%N~igLl+t z_EsV zUWJ1d6X3w=;0l{r+CU15=ugps%U8pP@yjMuibhGBGN~RrXx+XP`lQ`4lc_kDynft& zJ2O_~jE-&HpoWbZl1|Gc#^(<7Jaa^Yg;A3mL`u^2LmcgTo-?XZqyXkpn?I{csePd( zB;s-40JZNn*_u8jL3kQMB!aDLGFF6U=?mCmTWXs~ciZt|bxS`ftWodHzVHXxzhi*p(*Xdvy6w17AZ1-nk%*c!svfBc}XJI1}&*L7E z&Q_iRpP@r2T3sFFb@sOlHDrwlj$ka^X(PE)P=D*aB&nx$gT&HFb=J^w7 zcp}BWv$Ka%Gn!3wZ~uYAfd{3a8hPuFHU7{ulZuLtiqZhZL#Z4c%?2w`)oHD3hiQ+l z>Q61lFPQ0O;GjwWjB%5fuk~pGzJ)&Z4K#w&Ct^e+J!F?c<^{{YSJz*`QT~~wcH90J}iD&e5QdGRQ#cza^)LI8uGf7Gc z6Pa+$;%82IVSLLRjeK3^r2q0V^xo4CG__RdoFG*bjPVo|x!)RWg3X*nlr2<8mcz^R znYF{S>^p3)IxR13nG5Y#J*mM~GrilriGZZpDT8I&B^)>ro?`v5np(X!l7ZD4Jk~Gx z=&?F2<)=Q!oLP8Nrg5tr9nRnje(`Dak%0rJa- ztL0O0CZfgX7}zsoYAN~*)gpzux$s7Ysk>)CoR&_!fdi|CYU^fZD?6&~#r+4VSX_0Y zUl7$Ayfv{{wpPHUI4xOw!TSb!RMfvBu_MiJtd#l(&3I}HPx-xfMn~0gb#(=p(s~Pc^0$A~Q=&?8{$qdJjq>g^(a!quPQkZ#}5>%p@gO?GWG~dC- z85!9*xw8iP>FTeQL+Zd^*SPNsv*{e$MgpleM;Vvqm7Mkps}Lf4X}rE6zafX!V1Tas zTo;iU&$$#yi~H5E;K6kqTCIHbT7}*#qx7Twjm5t{q&e4%`aB%hh+`P%2&tXG*7k)s zxy^it7ru9H{bZ6bjb>eVsW9;OzGl@p49C~9!?XB}ky4x5X8~=UtRbUl7g2e6nV|Uy zUyZ4m&~qb7PLdK0uJ00i&_aP0awZ!B^2e@BucULiu+)lpq(@6*ec_J_SGnX|Ye#fr zHV<4MkY}$Cf8BE@yJnyehAYy!wD)Jkbza@tD}WEv3T?ZY_}@M5Vm^-5eVBI&q;zw z?dM3t)Y*&;v@{F`Llbp>ZX^K*OJ$zZ_6Rs6;qzpTNit0oxM47k$d6O2wtt+P^L?B^ z80_Fk$R96w&3qRI6S(i~>l+Lhx4nZs+@OHAj)g*iA{ZAk3AXL^T^JV(`v33ie|P}< zzx)^e9rJ&4Z2?S)TfS}qP@v%5yLY$2%s8Cg7!H_^x+Bov*$c281HJyp!u5a2@~=|1 zy|@OY`ybbTmH)rV!+io|Z~;oi`^MYtmNRfjd%OK_^?h;8x*3WGJLKVZ+y9RX`~=@} zbN`q7AIj_Geaq(t@Q4O`|1Io)M38m+JM4g)zdIBMx*#!k2KnEX{@cwf84&1l8@RCn zfdPLM|2H3&=^X5;3f$23-&KQgp8(Y`1R)Thi))v$jg^Y7%|+>pzM#;Xe{=uySAqjn z3p)vNy~w5a*Fnx0Z2wI_a}M2;ur$4J;Q~(RZnQyL@@cJ;mO z@8f#g6^H@-19l4t4E$p^;D-EfU@(5L#|U>Rr~(T3|8)VrjRFXh2KsIU7zbzqFFiE? zwt}5q@&0B-_7 z7Q_(;vXlTLfp#eX$`yVIgNb|tJR=a-4#+45gYCHo%BTY60{!rUy#jebxm!p;1|aX2 z20(#)TP^^c06HB76zGe$2k>tLdJ6ys(&hoaI^gXClnMM=fIkTQ9v}@ws{tMQ+a}zm zfTBS>pgV4$CvGlKKVYjrWdl9)>;SwMAY2mgTL8Zl@Irx(`~U!dJ7@zC+E70H8dca=?e9#V{`tShz@<6;BfC4*g1$EmBWZ$|8{OO>ai=Z6P?syE1OoH4<$3kC6bf5NHUm@BX3x{6N+GQ`i3+^WTgM|8@e`R-XUIkpR|k z7sewB69a7!T>oPv2=EQ^`NRG94{yUiBY|MR-y^}lg8tu(0+@eBft&v|3c$VZoO1pr zqd#@~0%DL-vR43FQIB`v3sx9g3F;5D$x)BgG$iAQ_=BDBj{f6tWYf1IT7j{UG`Nl?Kusq!%bI z6c3UcN(<=~sx!p@mu?~bLi&W-1Y}2k06_pDfGq%!t$+>xv==CUDE)5$sP2#(N(<$; z1i%3R_WUCgR4+(ZP&Fp#UWt&LZF63P&I&MD n;Ex-3=@ZIll}|~loj7q;RaNcei4!0&`i8%|I~42xtLy&&EIi=- literal 0 HcmV?d00001 diff --git a/twitter/vendor/autoload.php b/twitter/vendor/autoload.php new file mode 100644 index 00000000..7c8eabe5 --- /dev/null +++ b/twitter/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/twitter/vendor/composer/LICENSE b/twitter/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/twitter/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/twitter/vendor/composer/autoload_classmap.php b/twitter/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..7a91153b --- /dev/null +++ b/twitter/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/abraham/twitteroauth/src'), +); diff --git a/twitter/vendor/composer/autoload_real.php b/twitter/vendor/composer/autoload_real.php new file mode 100644 index 00000000..f1480a81 --- /dev/null +++ b/twitter/vendor/composer/autoload_real.php @@ -0,0 +1,52 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + return $loader; + } +} diff --git a/twitter/vendor/composer/autoload_static.php b/twitter/vendor/composer/autoload_static.php new file mode 100644 index 00000000..a02e4d6d --- /dev/null +++ b/twitter/vendor/composer/autoload_static.php @@ -0,0 +1,31 @@ + + array ( + 'Abraham\\TwitterOAuth\\' => 21, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Abraham\\TwitterOAuth\\' => + array ( + 0 => __DIR__ . '/..' . '/abraham/twitteroauth/src', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/twitter/vendor/composer/installed.json b/twitter/vendor/composer/installed.json new file mode 100644 index 00000000..3ee3d3de --- /dev/null +++ b/twitter/vendor/composer/installed.json @@ -0,0 +1,58 @@ +[ + { + "name": "abraham/twitteroauth", + "version": "0.7.4", + "version_normalized": "0.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/abraham/twitteroauth.git", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpmd/phpmd": "~2.6", + "phpunit/phpunit": "~5.7", + "squizlabs/php_codesniffer": "~3.0" + }, + "time": "2017-06-30T22:02:01+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Abraham\\TwitterOAuth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abraham Williams", + "email": "abraham@abrah.am", + "homepage": "https://abrah.am", + "role": "Developer" + } + ], + "description": "The most popular PHP library for use with the Twitter OAuth REST API.", + "homepage": "https://twitteroauth.com", + "keywords": [ + "Twitter API", + "Twitter oAuth", + "api", + "oauth", + "rest", + "social", + "twitter" + ] + } +] From 7afef6b87f30c3e5fbad12de7c4980b7bab47f27 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 28 Jan 2018 14:33:47 -0500 Subject: [PATCH 029/116] Move StatusNet addon dependencies in own library subfolder - Move CodebirdSN to library/codebirdsn.php - Move StatusNetOAuth class to library/statusnetoauth.php - Copy TwitterOAuth to library/twitteroauth.php - Copy OAuth1 to library/OAuth1.php --- statusnet/library/OAuth1.php | 893 ++++++++++++++++++ .../{codebird.php => library/codebirdsn.php} | 0 statusnet/library/statusnetoauth.php | 102 ++ statusnet/library/twitteroauth.php | 280 ++++++ statusnet/statusnet.php | 110 +-- 5 files changed, 1280 insertions(+), 105 deletions(-) create mode 100644 statusnet/library/OAuth1.php rename statusnet/{codebird.php => library/codebirdsn.php} (100%) create mode 100644 statusnet/library/statusnetoauth.php create mode 100644 statusnet/library/twitteroauth.php diff --git a/statusnet/library/OAuth1.php b/statusnet/library/OAuth1.php new file mode 100644 index 00000000..a2097be0 --- /dev/null +++ b/statusnet/library/OAuth1.php @@ -0,0 +1,893 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + public $expires; + public $scope; + public $uid; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + //echo "

      "; var_dump($signature, $built, ($built == $signature)); killme();
      +    return ($built == $signature);
      +  }
      +}
      +
      +/**
      + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      + * where the Signature Base String is the text and the key is the concatenated values (each first 
      + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      + * character (ASCII code 38) even if empty.
      + *   - Chapter 9.2 ("HMAC-SHA1")
      + */
      +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      +  function get_name() {
      +    return "HMAC-SHA1";
      +  }
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +
      +
      +    $r = base64_encode(hash_hmac('sha1', $base_string, $key, true));
      +    return $r;
      +  }
      +}
      +
      +/**
      + * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      + * over a secure channel such as HTTPS. It does not use the Signature Base String.
      + *   - Chapter 9.4 ("PLAINTEXT")
      + */
      +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "PLAINTEXT";
      +  }
      +
      +  /**
      +   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      +   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      +   * empty. The result MUST be encoded again.
      +   *   - Chapter 9.4.1 ("Generating Signatures")
      +   *
      +   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      +   * OAuthRequest handles this!
      +   */
      +  public function build_signature($request, $consumer, $token) {
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +    $request->base_string = $key;
      +
      +    return $key;
      +  }
      +}
      +
      +/**
      + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      + * verified way to the Service Provider, in a manner which is beyond the scope of this 
      + * specification.
      + *   - Chapter 9.3 ("RSA-SHA1")
      + */
      +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "RSA-SHA1";
      +  }
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  // (2) fetch via http using a url provided by the requester
      +  // (3) some sort of specific discovery code based on request
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_public_cert(&$request);
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_private_cert(&$request);
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    // Fetch the private key cert based on the request
      +    $cert = $this->fetch_private_cert($request);
      +
      +    // Pull the private key ID from the certificate
      +    $privatekeyid = openssl_get_privatekey($cert);
      +
      +    // Sign using the key
      +    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($privatekeyid);
      +
      +    return base64_encode($signature);
      +  }
      +
      +  public function check_signature($request, $consumer, $token, $signature) {
      +    $decoded_sig = base64_decode($signature);
      +
      +    $base_string = $request->get_signature_base_string();
      +
      +    // Fetch the public key cert based on the request
      +    $cert = $this->fetch_public_cert($request);
      +
      +    // Pull the public key ID from the certificate
      +    $publickeyid = openssl_get_publickey($cert);
      +
      +    // Check the computed signature against the one passed in the query
      +    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($publickeyid);
      +
      +    return $ok == 1;
      +  }
      +}
      +
      +class OAuthRequest {
      +  private $parameters;
      +  private $http_method;
      +  private $http_url;
      +  // for debug purposes
      +  public $base_string;
      +  public static $version = '1.0';
      +  public static $POST_INPUT = 'php://input';
      +
      +  function __construct($http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      +    $this->parameters = $parameters;
      +    $this->http_method = $http_method;
      +    $this->http_url = $http_url;
      +  }
      +
      +
      +  /**
      +   * attempt to build up a request from what was passed to the server
      +   */
      +  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      +    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      +              ? 'http'
      +              : 'https';
      +    @$http_url or $http_url = $scheme .
      +                              '://' . $_SERVER['HTTP_HOST'] .
      +                              ':' .
      +                              $_SERVER['SERVER_PORT'] .
      +                              $_SERVER['REQUEST_URI'];
      +    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      +
      +    // We weren't handed any parameters, so let's find the ones relevant to
      +    // this request.
      +    // If you run XML-RPC or similar you should use this to provide your own
      +    // parsed parameter-list
      +    if (!$parameters) {
      +      // Find request headers
      +      $request_headers = OAuthUtil::get_headers();
      +
      +      // Parse the query-string to find GET parameters
      +      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      +
      +      // It's a POST request of the proper content-type, so parse POST
      +      // parameters and add those overriding any duplicates from GET
      +      if ($http_method == "POST"
      +          && @strstr($request_headers["Content-Type"],
      +                     "application/x-www-form-urlencoded")
      +          ) {
      +        $post_data = OAuthUtil::parse_parameters(
      +          file_get_contents(self::$POST_INPUT)
      +        );
      +        $parameters = array_merge($parameters, $post_data);
      +      }
      +
      +      // We have a Authorization-header with OAuth data. Parse the header
      +      // and add those overriding any duplicates from GET or POST
      +      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      +        $header_parameters = OAuthUtil::split_header(
      +          $request_headers['Authorization']
      +        );
      +        $parameters = array_merge($parameters, $header_parameters);
      +      }
      +
      +    }
      +    // fix for friendica redirect system
      +    
      +    $http_url =  substr($http_url, 0, strpos($http_url,$parameters['pagename'])+strlen($parameters['pagename']));
      +    unset( $parameters['pagename'] );
      +    
      +	//echo "
      ".__function__."\n"; var_dump($http_method, $http_url, $parameters, $_SERVER['REQUEST_URI']); killme();
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  /**
      +   * pretty much a helper function to set up the request
      +   */
      +  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $defaults = array("oauth_version" => OAuthRequest::$version,
      +                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      +                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      +                      "oauth_consumer_key" => $consumer->key);
      +    if ($token)
      +      $defaults['oauth_token'] = $token->key;
      +
      +    $parameters = array_merge($defaults, $parameters);
      +
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  public function set_parameter($name, $value, $allow_duplicates = true) {
      +    if ($allow_duplicates && isset($this->parameters[$name])) {
      +      // We have already added parameter(s) with this name, so add to the list
      +      if (is_scalar($this->parameters[$name])) {
      +        // This is the first duplicate, so transform scalar (string)
      +        // into an array so we can add the duplicates
      +        $this->parameters[$name] = array($this->parameters[$name]);
      +      }
      +
      +      $this->parameters[$name][] = $value;
      +    } else {
      +      $this->parameters[$name] = $value;
      +    }
      +  }
      +
      +  public function get_parameter($name) {
      +    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      +  }
      +
      +  public function get_parameters() {
      +    return $this->parameters;
      +  }
      +
      +  public function unset_parameter($name) {
      +    unset($this->parameters[$name]);
      +  }
      +
      +  /**
      +   * The request parameters, sorted and concatenated into a normalized string.
      +   * @return string
      +   */
      +  public function get_signable_parameters() {
      +    // Grab all parameters
      +    $params = $this->parameters;
      +
      +    // Remove oauth_signature if present
      +    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      +    if (isset($params['oauth_signature'])) {
      +      unset($params['oauth_signature']);
      +    }
      +
      +    return OAuthUtil::build_http_query($params);
      +  }
      +
      +  /**
      +   * Returns the base string of this request
      +   *
      +   * The base string defined as the method, the url
      +   * and the parameters (normalized), each urlencoded
      +   * and the concated with &.
      +   */
      +  public function get_signature_base_string() {
      +    $parts = array(
      +      $this->get_normalized_http_method(),
      +      $this->get_normalized_http_url(),
      +      $this->get_signable_parameters()
      +    );
      +
      +    $parts = OAuthUtil::urlencode_rfc3986($parts);
      +
      +    return implode('&', $parts);
      +  }
      +
      +  /**
      +   * just uppercases the http method
      +   */
      +  public function get_normalized_http_method() {
      +    return strtoupper($this->http_method);
      +  }
      +
      +  /**
      +   * parses the url and rebuilds it to be
      +   * scheme://host/path
      +   */
      +  public function get_normalized_http_url() {
      +    $parts = parse_url($this->http_url);
      +
      +    $port = @$parts['port'];
      +    $scheme = $parts['scheme'];
      +    $host = $parts['host'];
      +    $path = @$parts['path'];
      +
      +    $port or $port = ($scheme == 'https') ? '443' : '80';
      +
      +    if (($scheme == 'https' && $port != '443')
      +        || ($scheme == 'http' && $port != '80')) {
      +      $host = "$host:$port";
      +    }
      +    return "$scheme://$host$path";
      +  }
      +
      +  /**
      +   * builds a url usable for a GET request
      +   */
      +  public function to_url() {
      +    $post_data = $this->to_postdata();
      +    $out = $this->get_normalized_http_url();
      +    if ($post_data) {
      +      $out .= '?'.$post_data;
      +    }
      +    return $out;
      +  }
      +
      +  /**
      +   * builds the data one would send in a POST request
      +   */
      +  public function to_postdata($raw = false) {
      +    if ($raw)
      +      return($this->parameters);
      +    else
      +      return OAuthUtil::build_http_query($this->parameters);
      +  }
      +
      +  /**
      +   * builds the Authorization: header
      +   */
      +  public function to_header($realm=null) {
      +    $first = true;
      +	if($realm) {
      +      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      +      $first = false;
      +    } else
      +      $out = 'Authorization: OAuth';
      +
      +    $total = array();
      +    foreach ($this->parameters as $k => $v) {
      +      if (substr($k, 0, 5) != "oauth") continue;
      +      if (is_array($v)) {
      +        throw new OAuthException('Arrays not supported in headers');
      +      }
      +      $out .= ($first) ? ' ' : ',';
      +      $out .= OAuthUtil::urlencode_rfc3986($k) .
      +              '="' .
      +              OAuthUtil::urlencode_rfc3986($v) .
      +              '"';
      +      $first = false;
      +    }
      +    return $out;
      +  }
      +
      +  public function __toString() {
      +    return $this->to_url();
      +  }
      +
      +
      +  public function sign_request($signature_method, $consumer, $token) {
      +    $this->set_parameter(
      +      "oauth_signature_method",
      +      $signature_method->get_name(),
      +      false
      +    );
      +    $signature = $this->build_signature($signature_method, $consumer, $token);
      +    $this->set_parameter("oauth_signature", $signature, false);
      +  }
      +
      +  public function build_signature($signature_method, $consumer, $token) {
      +    $signature = $signature_method->build_signature($this, $consumer, $token);
      +    return $signature;
      +  }
      +
      +  /**
      +   * util function: current timestamp
      +   */
      +  private static function generate_timestamp() {
      +    return time();
      +  }
      +
      +  /**
      +   * util function: current nonce
      +   */
      +  private static function generate_nonce() {
      +    $mt = microtime();
      +    $rand = mt_rand();
      +
      +    return md5($mt . $rand); // md5s look nicer than numbers
      +  }
      +}
      +
      +class OAuthServer {
      +  protected $timestamp_threshold = 300; // in seconds, five minutes
      +  protected $version = '1.0';             // hi blaine
      +  protected $signature_methods = array();
      +
      +  protected $data_store;
      +
      +  function __construct($data_store) {
      +    $this->data_store = $data_store;
      +  }
      +
      +  public function add_signature_method($signature_method) {
      +    $this->signature_methods[$signature_method->get_name()] =
      +      $signature_method;
      +  }
      +
      +  // high level functions
      +
      +  /**
      +   * process a request_token request
      +   * returns the request token on success
      +   */
      +  public function fetch_request_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // no token required for the initial token request
      +    $token = NULL;
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $callback = $request->get_parameter('oauth_callback');
      +    $new_token = $this->data_store->new_request_token($consumer, $callback);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * process an access_token request
      +   * returns the access token on success
      +   */
      +  public function fetch_access_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // requires authorized request token
      +    $token = $this->get_token($request, $consumer, "request");
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $verifier = $request->get_parameter('oauth_verifier');
      +    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * verify an api call, checks all the parameters
      +   */
      +  public function verify_request(&$request) {
      +    $this->get_version($request);
      +    $consumer = $this->get_consumer($request);
      +    //echo __file__.__line__.__function__."
      "; var_dump($consumer); die();
      +    $token = $this->get_token($request, $consumer, "access");
      +    $this->check_signature($request, $consumer, $token);
      +    return array($consumer, $token);
      +  }
      +
      +  // Internals from here
      +  /**
      +   * version 1
      +   */
      +  private function get_version(&$request) {
      +    $version = $request->get_parameter("oauth_version");
      +    if (!$version) {
      +      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      +      // Chapter 7.0 ("Accessing Protected Ressources")
      +      $version = '1.0';
      +    }
      +    if ($version !== $this->version) {
      +      throw new OAuthException("OAuth version '$version' not supported");
      +    }
      +    return $version;
      +  }
      +
      +  /**
      +   * figure out the signature with some defaults
      +   */
      +  private function get_signature_method(&$request) {
      +    $signature_method =
      +        @$request->get_parameter("oauth_signature_method");
      +
      +    if (!$signature_method) {
      +      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      +      // parameter is required, and we can't just fallback to PLAINTEXT
      +      throw new OAuthException('No signature method parameter. This parameter is required');
      +    }
      +
      +    if (!in_array($signature_method,
      +                  array_keys($this->signature_methods))) {
      +      throw new OAuthException(
      +        "Signature method '$signature_method' not supported " .
      +        "try one of the following: " .
      +        implode(", ", array_keys($this->signature_methods))
      +      );
      +    }
      +    return $this->signature_methods[$signature_method];
      +  }
      +
      +  /**
      +   * try to find the consumer for the provided request's consumer key
      +   */
      +  private function get_consumer(&$request) {
      +    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      +    if (!$consumer_key) {
      +      throw new OAuthException("Invalid consumer key");
      +    }
      +
      +    $consumer = $this->data_store->lookup_consumer($consumer_key);
      +    if (!$consumer) {
      +      throw new OAuthException("Invalid consumer");
      +    }
      +
      +    return $consumer;
      +  }
      +
      +  /**
      +   * try to find the token for the provided request's token key
      +   */
      +  private function get_token(&$request, $consumer, $token_type="access") {
      +    $token_field = @$request->get_parameter('oauth_token');
      +    $token = $this->data_store->lookup_token(
      +      $consumer, $token_type, $token_field
      +    );
      +    if (!$token) {
      +      throw new OAuthException("Invalid $token_type token: $token_field");
      +    }
      +    return $token;
      +  }
      +
      +  /**
      +   * all-in-one function to check the signature on a request
      +   * should guess the signature method appropriately
      +   */
      +  private function check_signature(&$request, $consumer, $token) {
      +    // this should probably be in a different method
      +    $timestamp = @$request->get_parameter('oauth_timestamp');
      +    $nonce = @$request->get_parameter('oauth_nonce');
      +
      +    $this->check_timestamp($timestamp);
      +    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      +
      +    $signature_method = $this->get_signature_method($request);
      +
      +    $signature = $request->get_parameter('oauth_signature');
      +    $valid_sig = $signature_method->check_signature(
      +      $request,
      +      $consumer,
      +      $token,
      +      $signature
      +    );
      +	
      +
      +    if (!$valid_sig) {
      +      throw new OAuthException("Invalid signature");
      +    }
      +  }
      +
      +  /**
      +   * check that the timestamp is new enough
      +   */
      +  private function check_timestamp($timestamp) {
      +    if( ! $timestamp )
      +      throw new OAuthException(
      +        'Missing timestamp parameter. The parameter is required'
      +      );
      +    
      +    // verify that timestamp is recentish
      +    $now = time();
      +    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      +      throw new OAuthException(
      +        "Expired timestamp, yours $timestamp, ours $now"
      +      );
      +    }
      +  }
      +
      +  /**
      +   * check that the nonce is not repeated
      +   */
      +  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      +    if( ! $nonce )
      +      throw new OAuthException(
      +        'Missing nonce parameter. The parameter is required'
      +      );
      +
      +    // verify that the nonce is uniqueish
      +    $found = $this->data_store->lookup_nonce(
      +      $consumer,
      +      $token,
      +      $nonce,
      +      $timestamp
      +    );
      +    if ($found) {
      +      throw new OAuthException("Nonce already used: $nonce");
      +    }
      +  }
      +
      +}
      +
      +class OAuthDataStore {
      +  function lookup_consumer($consumer_key) {
      +    // implement me
      +  }
      +
      +  function lookup_token($consumer, $token_type, $token) {
      +    // implement me
      +  }
      +
      +  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      +    // implement me
      +  }
      +
      +  function new_request_token($consumer, $callback = null) {
      +    // return a new token attached to this consumer
      +  }
      +
      +  function new_access_token($token, $consumer, $verifier = null) {
      +    // return a new access token attached to this consumer
      +    // for the user associated with this token if the request token
      +    // is authorized
      +    // should also invalidate the request token
      +  }
      +
      +}
      +
      +class OAuthUtil {
      +  public static function urlencode_rfc3986($input) {
      +  if (is_array($input)) {
      +    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      +  } else if (is_scalar($input)) {
      +    return str_replace(
      +      '+',
      +      ' ',
      +      str_replace('%7E', '~', rawurlencode($input))
      +    );
      +  } else {
      +    return '';
      +  }
      +}
      +
      +
      +  // This decode function isn't taking into consideration the above
      +  // modifications to the encoding process. However, this method doesn't
      +  // seem to be used anywhere so leaving it as is.
      +  public static function urldecode_rfc3986($string) {
      +    return urldecode($string);
      +  }
      +
      +  // Utility function for turning the Authorization: header into
      +  // parameters, has to do some unescaping
      +  // Can filter out any non-oauth parameters if needed (default behaviour)
      +  public static function split_header($header, $only_allow_oauth_parameters = true) {
      +    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      +    $offset = 0;
      +    $params = array();
      +    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      +      $match = $matches[0];
      +      $header_name = $matches[2][0];
      +      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      +      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      +        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      +      }
      +      $offset = $match[1] + strlen($match[0]);
      +    }
      +
      +    if (isset($params['realm'])) {
      +      unset($params['realm']);
      +    }
      +
      +    return $params;
      +  }
      +
      +  // helper to try to sort out headers for people who aren't running apache
      +  public static function get_headers() {
      +    if (function_exists('apache_request_headers')) {
      +      // we need this to get the actual Authorization: header
      +      // because apache tends to tell us it doesn't exist
      +      $headers = apache_request_headers();
      +
      +      // sanitize the output of apache_request_headers because
      +      // we always want the keys to be Cased-Like-This and arh()
      +      // returns the headers in the same case as they are in the
      +      // request
      +      $out = array();
      +      foreach( $headers AS $key => $value ) {
      +        $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("-", " ", $key)))
      +          );
      +        $out[$key] = $value;
      +      }
      +    } else {
      +      // otherwise we don't have apache and are just going to have to hope
      +      // that $_SERVER actually contains what we need
      +      $out = array();
      +      if( isset($_SERVER['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      +      if( isset($_ENV['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      +
      +      foreach ($_SERVER as $key => $value) {
      +        if (substr($key, 0, 5) == "HTTP_") {
      +          // this is chaos, basically it is just there to capitalize the first
      +          // letter of every word that is not an initial HTTP and strip HTTP
      +          // code from przemek
      +          $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      +          );
      +          $out[$key] = $value;
      +        }
      +      }
      +    }
      +    return $out;
      +  }
      +
      +  // This function takes a input like a=b&a=c&d=e and returns the parsed
      +  // parameters like this
      +  // array('a' => array('b','c'), 'd' => 'e')
      +  public static function parse_parameters( $input ) {
      +    if (!isset($input) || !$input) return array();
      +
      +    $pairs = explode('&', $input);
      +
      +    $parsed_parameters = array();
      +    foreach ($pairs as $pair) {
      +      $split = explode('=', $pair, 2);
      +      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      +      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      +
      +      if (isset($parsed_parameters[$parameter])) {
      +        // We have already recieved parameter(s) with this name, so add to the list
      +        // of parameters with this name
      +
      +        if (is_scalar($parsed_parameters[$parameter])) {
      +          // This is the first duplicate, so transform scalar (string) into an array
      +          // so we can add the duplicates
      +          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      +        }
      +
      +        $parsed_parameters[$parameter][] = $value;
      +      } else {
      +        $parsed_parameters[$parameter] = $value;
      +      }
      +    }
      +    return $parsed_parameters;
      +  }
      +
      +  public static function build_http_query($params) {
      +    if (!$params) return '';
      +
      +    // Urlencode both keys and values
      +    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      +    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      +    $params = array_combine($keys, $values);
      +
      +    // Parameters are sorted by name, using lexicographical byte value ordering.
      +    // Ref: Spec: 9.1.1 (1)
      +    uksort($params, 'strcmp');
      +
      +    $pairs = array();
      +    foreach ($params as $parameter => $value) {
      +      if (is_array($value)) {
      +        // If two or more parameters share the same name, they are sorted by their value
      +        // Ref: Spec: 9.1.1 (1)
      +        natsort($value);
      +        foreach ($value as $duplicate_value) {
      +          $pairs[] = $parameter . '=' . $duplicate_value;
      +        }
      +      } else {
      +        $pairs[] = $parameter . '=' . $value;
      +      }
      +    }
      +    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      +    // Each name-value pair is separated by an '&' character (ASCII code 38)
      +    return implode('&', $pairs);
      +  }
      +}
      +
      +?>
      diff --git a/statusnet/codebird.php b/statusnet/library/codebirdsn.php
      similarity index 100%
      rename from statusnet/codebird.php
      rename to statusnet/library/codebirdsn.php
      diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php
      new file mode 100644
      index 00000000..beed59e7
      --- /dev/null
      +++ b/statusnet/library/statusnetoauth.php
      @@ -0,0 +1,102 @@
      +get($this->host . 'statusnet/config.json');
      +		return $config->site->textlimit;
      +	}
      +
      +	function accessTokenURL()
      +	{
      +		return $this->host . 'oauth/access_token';
      +	}
      +
      +	function authenticateURL()
      +	{
      +		return $this->host . 'oauth/authenticate';
      +	}
      +
      +	function authorizeURL()
      +	{
      +		return $this->host . 'oauth/authorize';
      +	}
      +
      +	function requestTokenURL()
      +	{
      +		return $this->host . 'oauth/request_token';
      +	}
      +
      +	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      +	{
      +		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      +		$this->host = $apipath;
      +	}
      +
      +	/**
      +	 * Make an HTTP request
      +	 *
      +	 * Copied here from the TwitterOAuth library and complemented by applying the proxy settings of Friendica
      +	 *
      +	 * @param string $method
      +	 * @param string $host
      +	 * @param string $path
      +	 * @param array  $parameters
      +	 *
      +	 * @return array|object API results
      +	 */
      +	function http($url, $method, $postfields = NULL)
      +	{
      +		$this->http_info = [];
      +		$ci = curl_init();
      +		/* Curl settings */
      +		$prx = Config::get('system', 'proxy');
      +		if (strlen($prx)) {
      +			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      +			curl_setopt($ci, CURLOPT_PROXY, $prx);
      +			$prxusr = Config::get('system', 'proxyuser');
      +			if (strlen($prxusr)) {
      +				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      +			}
      +		}
      +		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      +		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      +		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +		switch ($method) {
      +			case 'POST':
      +				curl_setopt($ci, CURLOPT_POST, TRUE);
      +				if (!empty($postfields)) {
      +					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +				}
      +				break;
      +			case 'DELETE':
      +				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +				if (!empty($postfields)) {
      +					$url = "{$url}?{$postfields}";
      +				}
      +		}
      +
      +		curl_setopt($ci, CURLOPT_URL, $url);
      +		$response = curl_exec($ci);
      +		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +		$this->url = $url;
      +		curl_close($ci);
      +		return $response;
      +	}
      +}
      diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php
      new file mode 100644
      index 00000000..323156eb
      --- /dev/null
      +++ b/statusnet/library/twitteroauth.php
      @@ -0,0 +1,280 @@
      +http_status;
      +	}
      +
      +	function lastAPICall()
      +	{
      +		return $this->last_api_call;
      +	}
      +
      +	/**
      +	 * construct TwitterOAuth object
      +	 */
      +	function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      +	{
      +		$this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      +		$this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      +		if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      +			$this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      +		} else {
      +			$this->token = NULL;
      +		}
      +	}
      +
      +	/**
      +	 * Get a request_token from Twitter
      +	 *
      +	 * @returns a key/value array containing oauth_token and oauth_token_secret
      +	 */
      +	function getRequestToken($oauth_callback = NULL)
      +	{
      +		$parameters = array();
      +		if (!empty($oauth_callback)) {
      +			$parameters['oauth_callback'] = $oauth_callback;
      +		}
      +		$request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * Get the authorize URL
      +	 *
      +	 * @returns a string
      +	 */
      +	function getAuthorizeURL($token, $sign_in_with_twitter = TRUE)
      +	{
      +		if (is_array($token)) {
      +			$token = $token['oauth_token'];
      +		}
      +		if (empty($sign_in_with_twitter)) {
      +			return $this->authorizeURL() . "?oauth_token={$token}";
      +		} else {
      +			return $this->authenticateURL() . "?oauth_token={$token}";
      +		}
      +	}
      +
      +	/**
      +	 * Exchange request token and secret for an access token and
      +	 * secret, to sign API calls.
      +	 *
      +	 * @returns array("oauth_token" => "the-access-token",
      +	 *                "oauth_token_secret" => "the-access-secret",
      +	 *                "user_id" => "9436992",
      +	 *                "screen_name" => "abraham")
      +	 */
      +	function getAccessToken($oauth_verifier = FALSE)
      +	{
      +		$parameters = array();
      +		if (!empty($oauth_verifier)) {
      +			$parameters['oauth_verifier'] = $oauth_verifier;
      +		}
      +		$request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * One time exchange of username and password for access token and secret.
      +	 *
      +	 * @returns array("oauth_token" => "the-access-token",
      +	 *                "oauth_token_secret" => "the-access-secret",
      +	 *                "user_id" => "9436992",
      +	 *                "screen_name" => "abraham",
      +	 *                "x_auth_expires" => "0")
      +	 */
      +	function getXAuthToken($username, $password)
      +	{
      +		$parameters = array();
      +		$parameters['x_auth_username'] = $username;
      +		$parameters['x_auth_password'] = $password;
      +		$parameters['x_auth_mode'] = 'client_auth';
      +		$request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * GET wrapper for oAuthRequest.
      +	 */
      +	function get($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'GET', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * POST wrapper for oAuthRequest.
      +	 */
      +	function post($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'POST', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * DELETE wrapper for oAuthReqeust.
      +	 */
      +	function delete($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'DELETE', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * Format and sign an OAuth / API request
      +	 */
      +	function oAuthRequest($url, $method, $parameters)
      +	{
      +		if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      +			$url = "{$this->host}{$url}.{$this->format}";
      +		}
      +		$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      +		$request->sign_request($this->sha1_method, $this->consumer, $this->token);
      +		switch ($method) {
      +			case 'GET':
      +				return $this->http($request->to_url(), 'GET');
      +			case 'UPLOAD':
      +				return $this->http($request->get_normalized_http_url(), 'POST', $request->to_postdata(true));
      +			default:
      +				return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      +		}
      +	}
      +
      +	/**
      +	 * Make an HTTP request
      +	 *
      +	 * @return API results
      +	 */
      +	function http($url, $method, $postfields = NULL)
      +	{
      +		$this->http_info = array();
      +		$ci = curl_init();
      +		/* Curl settings */
      +		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +		curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      +		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +		curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      +		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +		switch ($method) {
      +			case 'POST':
      +				curl_setopt($ci, CURLOPT_POST, TRUE);
      +				if (!empty($postfields)) {
      +					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +				}
      +				break;
      +			case 'DELETE':
      +				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +				if (!empty($postfields)) {
      +					$url = "{$url}?{$postfields}";
      +				}
      +		}
      +
      +		curl_setopt($ci, CURLOPT_URL, $url);
      +		$response = curl_exec($ci);
      +		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +		$this->url = $url;
      +		curl_close($ci);
      +		return $response;
      +	}
      +
      +	/**
      +	 * Get the header info to store.
      +	 */
      +	function getHeader($ch, $header)
      +	{
      +		$i = strpos($header, ':');
      +		if (!empty($i)) {
      +			$key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      +			$value = trim(substr($header, $i + 2));
      +			$this->http_header[$key] = $value;
      +		}
      +		return strlen($header);
      +	}
      +}
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index 7308f223..7ef171f7 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -33,16 +33,9 @@
        * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        *
        */
      -/*
      - * We have to alter the TwitterOAuth class a little bit to work with any GNU Social
      - * installation abroad. Basically it's only make the API path variable and be happy.
      - *
      - * Thank you guys for the Twitter compatible API!
      - */
      -
       define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes
       
      -require_once 'library/twitteroauth.php';
      +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php';
       require_once 'include/enotify.php';
       
       use Friendica\App;
      @@ -60,94 +53,6 @@ use Friendica\Model\Photo;
       use Friendica\Model\User;
       use Friendica\Util\Network;
       
      -class StatusNetOAuth extends TwitterOAuth
      -{
      -	function get_maxlength()
      -	{
      -		$config = $this->get($this->host . 'statusnet/config.json');
      -		return $config->site->textlimit;
      -	}
      -
      -	function accessTokenURL()
      -	{
      -		return $this->host . 'oauth/access_token';
      -	}
      -
      -	function authenticateURL()
      -	{
      -		return $this->host . 'oauth/authenticate';
      -	}
      -
      -	function authorizeURL()
      -	{
      -		return $this->host . 'oauth/authorize';
      -	}
      -
      -	function requestTokenURL()
      -	{
      -		return $this->host . 'oauth/request_token';
      -	}
      -
      -	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      -	{
      -		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      -		$this->host = $apipath;
      -	}
      -
      -	/**
      -	 * Make an HTTP request
      -	 *
      -	 * @return API results
      -	 *
      -	 * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica
      -	 */
      -	function http($url, $method, $postfields = NULL)
      -	{
      -		$this->http_info = [];
      -		$ci = curl_init();
      -		/* Curl settings */
      -		$prx = Config::get('system', 'proxy');
      -		if (strlen($prx)) {
      -			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      -			curl_setopt($ci, CURLOPT_PROXY, $prx);
      -			$prxusr = Config::get('system', 'proxyuser');
      -			if (strlen($prxusr)) {
      -				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      -			}
      -		}
      -		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      -		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      -		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -		switch ($method) {
      -			case 'POST':
      -				curl_setopt($ci, CURLOPT_POST, TRUE);
      -				if (!empty($postfields)) {
      -					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -				}
      -				break;
      -			case 'DELETE':
      -				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -				if (!empty($postfields)) {
      -					$url = "{$url}?{$postfields}";
      -				}
      -		}
      -
      -		curl_setopt($ci, CURLOPT_URL, $url);
      -		$response = curl_exec($ci);
      -		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -		$this->url = $url;
      -		curl_close($ci);
      -		return $response;
      -	}
      -}
      -
       function statusnet_install()
       {
       	//  we need some hooks, for the configuration and for sending tweets
      @@ -671,7 +576,7 @@ function statusnet_post_hook(App $a, &$b)
       			$postdata = ["status" => $msg];
       		}
       
      -		// and now dent it :-)
      +		// and now send it :-)
       		if (strlen($msg)) {
       			if ($iscomment) {
       				$postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength);
      @@ -679,7 +584,7 @@ function statusnet_post_hook(App $a, &$b)
       			}
       
       			// New code that is able to post pictures
      -			require_once "addon/statusnet/codebird.php";
      +			require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
       			$cb = \CodebirdSN\CodebirdSN::getInstance();
       			$cb->setAPIEndpoint($api);
       			$cb->setConsumerKey($ckey, $csecret);
      @@ -1131,9 +1036,9 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
       	$otoken  = PConfig::get($uid, 'statusnet', 'oauthtoken');
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       
      -	require_once "addon/statusnet/codebird.php";
      +	require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
       
      -	$cb = \Codebird\Codebird::getInstance();
      +	$cb = \CodebirdSN\CodebirdSN::getInstance();
       	$cb->setConsumerKey($ckey, $csecret);
       	$cb->setToken($otoken, $osecret);
       
      @@ -1403,7 +1308,6 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
       
       	logger("statusnet_fetchhometimeline: Fetching for user " . $uid, LOGGER_DEBUG);
       
      -	require_once 'library/twitteroauth.php';
       	require_once 'include/items.php';
       
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
      @@ -1604,8 +1508,6 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       	$own_url = PConfig::get($uid, 'statusnet', 'own_url');
       
      -	require_once 'library/twitteroauth.php';
      -
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       	$parameters["count"] = 200;
      @@ -1756,8 +1658,6 @@ function statusnet_fetch_own_contact(App $a, $uid)
       	$contact_id = 0;
       
       	if ($own_url == "") {
      -		require_once 'library/twitteroauth.php';
      -
       		$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       		// Fetching user data
      
      From 715edd98e2b8b5eef20ca1b6b6c7979067d627af Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Sun, 28 Jan 2018 14:43:56 -0500
      Subject: [PATCH 030/116] Move Tumblr addon dependencies to library subfolder
      
      - Move OAuth1 to library/OAuth1.php
      - Move TumblOAuth to library/tumblroauth.php
      ---
       .../OAuth.php => library/OAuth1.php}          | 1748 ++++++++---------
       .../{tumblroauth => library}/tumblroauth.php  |  490 ++---
       tumblr/tumblr.php                             |    3 +-
       3 files changed, 1120 insertions(+), 1121 deletions(-)
       rename tumblr/{tumblroauth/OAuth.php => library/OAuth1.php} (96%)
       rename tumblr/{tumblroauth => library}/tumblroauth.php (95%)
      
      diff --git a/tumblr/tumblroauth/OAuth.php b/tumblr/library/OAuth1.php
      similarity index 96%
      rename from tumblr/tumblroauth/OAuth.php
      rename to tumblr/library/OAuth1.php
      index 982aaa5d..67a94c47 100644
      --- a/tumblr/tumblroauth/OAuth.php
      +++ b/tumblr/library/OAuth1.php
      @@ -1,874 +1,874 @@
      -key = $key;
      -    $this->secret = $secret;
      -    $this->callback_url = $callback_url;
      -  }
      -
      -  function __toString() {
      -    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      -  }
      -}
      -
      -class OAuthToken {
      -  // access tokens and request tokens
      -  public $key;
      -  public $secret;
      -
      -  /**
      -   * key = the token
      -   * secret = the token secret
      -   */
      -  function __construct($key, $secret) {
      -    $this->key = $key;
      -    $this->secret = $secret;
      -  }
      -
      -  /**
      -   * generates the basic string serialization of a token that a server
      -   * would respond to request_token and access_token calls with
      -   */
      -  function to_string() {
      -    return "oauth_token=" .
      -           OAuthUtil::urlencode_rfc3986($this->key) .
      -           "&oauth_token_secret=" .
      -           OAuthUtil::urlencode_rfc3986($this->secret);
      -  }
      -
      -  function __toString() {
      -    return $this->to_string();
      -  }
      -}
      -
      -/**
      - * A class for implementing a Signature Method
      - * See section 9 ("Signing Requests") in the spec
      - */
      -abstract class OAuthSignatureMethod {
      -  /**
      -   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      -   * @return string
      -   */
      -  abstract public function get_name();
      -
      -  /**
      -   * Build up the signature
      -   * NOTE: The output of this function MUST NOT be urlencoded.
      -   * the encoding is handled in OAuthRequest when the final
      -   * request is serialized
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @return string
      -   */
      -  abstract public function build_signature($request, $consumer, $token);
      -
      -  /**
      -   * Verifies that a given signature is correct
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @param string $signature
      -   * @return bool
      -   */
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $built = $this->build_signature($request, $consumer, $token);
      -    return $built == $signature;
      -  }
      -}
      -
      -/**
      - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      - * where the Signature Base String is the text and the key is the concatenated values (each first 
      - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      - * character (ASCII code 38) even if empty.
      - *   - Chapter 9.2 ("HMAC-SHA1")
      - */
      -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -  function get_name() {
      -    return "HMAC-SHA1";
      -  }
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -
      -    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -  }
      -}
      -
      -/**
      - * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      - * over a secure channel such as HTTPS. It does not use the Signature Base String.
      - *   - Chapter 9.4 ("PLAINTEXT")
      - */
      -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "PLAINTEXT";
      -  }
      -
      -  /**
      -   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      -   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      -   * empty. The result MUST be encoded again.
      -   *   - Chapter 9.4.1 ("Generating Signatures")
      -   *
      -   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -   * OAuthRequest handles this!
      -   */
      -  public function build_signature($request, $consumer, $token) {
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -    $request->base_string = $key;
      -
      -    return $key;
      -  }
      -}
      -
      -/**
      - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      - * verified way to the Service Provider, in a manner which is beyond the scope of this 
      - * specification.
      - *   - Chapter 9.3 ("RSA-SHA1")
      - */
      -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "RSA-SHA1";
      -  }
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  // (2) fetch via http using a url provided by the requester
      -  // (3) some sort of specific discovery code based on request
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_public_cert(&$request);
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_private_cert(&$request);
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    // Fetch the private key cert based on the request
      -    $cert = $this->fetch_private_cert($request);
      -
      -    // Pull the private key ID from the certificate
      -    $privatekeyid = openssl_get_privatekey($cert);
      -
      -    // Sign using the key
      -    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($privatekeyid);
      -
      -    return base64_encode($signature);
      -  }
      -
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $decoded_sig = base64_decode($signature);
      -
      -    $base_string = $request->get_signature_base_string();
      -
      -    // Fetch the public key cert based on the request
      -    $cert = $this->fetch_public_cert($request);
      -
      -    // Pull the public key ID from the certificate
      -    $publickeyid = openssl_get_publickey($cert);
      -
      -    // Check the computed signature against the one passed in the query
      -    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($publickeyid);
      -
      -    return $ok == 1;
      -  }
      -}
      -
      -class OAuthRequest {
      -  private $parameters;
      -  private $http_method;
      -  private $http_url;
      -  // for debug purposes
      -  public $base_string;
      -  public static $version = '1.0';
      -  public static $POST_INPUT = 'php://input';
      -
      -  function __construct($http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -    $this->parameters = $parameters;
      -    $this->http_method = $http_method;
      -    $this->http_url = $http_url;
      -  }
      -
      -
      -  /**
      -   * attempt to build up a request from what was passed to the server
      -   */
      -  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -              ? 'http'
      -              : 'https';
      -    @$http_url or $http_url = $scheme .
      -                              '://' . $_SERVER['HTTP_HOST'] .
      -                              ':' .
      -                              $_SERVER['SERVER_PORT'] .
      -                              $_SERVER['REQUEST_URI'];
      -    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -    // We weren't handed any parameters, so let's find the ones relevant to
      -    // this request.
      -    // If you run XML-RPC or similar you should use this to provide your own
      -    // parsed parameter-list
      -    if (!$parameters) {
      -      // Find request headers
      -      $request_headers = OAuthUtil::get_headers();
      -
      -      // Parse the query-string to find GET parameters
      -      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -      // It's a POST request of the proper content-type, so parse POST
      -      // parameters and add those overriding any duplicates from GET
      -      if ($http_method == "POST"
      -          && @strstr($request_headers["Content-Type"],
      -                     "application/x-www-form-urlencoded")
      -          ) {
      -        $post_data = OAuthUtil::parse_parameters(
      -          file_get_contents(self::$POST_INPUT)
      -        );
      -        $parameters = array_merge($parameters, $post_data);
      -      }
      -
      -      // We have a Authorization-header with OAuth data. Parse the header
      -      // and add those overriding any duplicates from GET or POST
      -      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -        $header_parameters = OAuthUtil::split_header(
      -          $request_headers['Authorization']
      -        );
      -        $parameters = array_merge($parameters, $header_parameters);
      -      }
      -
      -    }
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  /**
      -   * pretty much a helper function to set up the request
      -   */
      -  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $defaults = array("oauth_version" => OAuthRequest::$version,
      -                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      -                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -                      "oauth_consumer_key" => $consumer->key);
      -    if ($token)
      -      $defaults['oauth_token'] = $token->key;
      -
      -    $parameters = array_merge($defaults, $parameters);
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  public function set_parameter($name, $value, $allow_duplicates = true) {
      -    if ($allow_duplicates && isset($this->parameters[$name])) {
      -      // We have already added parameter(s) with this name, so add to the list
      -      if (is_scalar($this->parameters[$name])) {
      -        // This is the first duplicate, so transform scalar (string)
      -        // into an array so we can add the duplicates
      -        $this->parameters[$name] = array($this->parameters[$name]);
      -      }
      -
      -      $this->parameters[$name][] = $value;
      -    } else {
      -      $this->parameters[$name] = $value;
      -    }
      -  }
      -
      -  public function get_parameter($name) {
      -    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -  }
      -
      -  public function get_parameters() {
      -    return $this->parameters;
      -  }
      -
      -  public function unset_parameter($name) {
      -    unset($this->parameters[$name]);
      -  }
      -
      -  /**
      -   * The request parameters, sorted and concatenated into a normalized string.
      -   * @return string
      -   */
      -  public function get_signable_parameters() {
      -    // Grab all parameters
      -    $params = $this->parameters;
      -
      -    // Remove oauth_signature if present
      -    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -    if (isset($params['oauth_signature'])) {
      -      unset($params['oauth_signature']);
      -    }
      -
      -    return OAuthUtil::build_http_query($params);
      -  }
      -
      -  /**
      -   * Returns the base string of this request
      -   *
      -   * The base string defined as the method, the url
      -   * and the parameters (normalized), each urlencoded
      -   * and the concated with &.
      -   */
      -  public function get_signature_base_string() {
      -    $parts = array(
      -      $this->get_normalized_http_method(),
      -      $this->get_normalized_http_url(),
      -      $this->get_signable_parameters()
      -    );
      -
      -    $parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -    return implode('&', $parts);
      -  }
      -
      -  /**
      -   * just uppercases the http method
      -   */
      -  public function get_normalized_http_method() {
      -    return strtoupper($this->http_method);
      -  }
      -
      -  /**
      -   * parses the url and rebuilds it to be
      -   * scheme://host/path
      -   */
      -  public function get_normalized_http_url() {
      -    $parts = parse_url($this->http_url);
      -
      -    $port = @$parts['port'];
      -    $scheme = $parts['scheme'];
      -    $host = $parts['host'];
      -    $path = @$parts['path'];
      -
      -    $port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -    if (($scheme == 'https' && $port != '443')
      -        || ($scheme == 'http' && $port != '80')) {
      -      $host = "$host:$port";
      -    }
      -    return "$scheme://$host$path";
      -  }
      -
      -  /**
      -   * builds a url usable for a GET request
      -   */
      -  public function to_url() {
      -    $post_data = $this->to_postdata();
      -    $out = $this->get_normalized_http_url();
      -    if ($post_data) {
      -      $out .= '?'.$post_data;
      -    }
      -    return $out;
      -  }
      -
      -  /**
      -   * builds the data one would send in a POST request
      -   */
      -  public function to_postdata() {
      -    return OAuthUtil::build_http_query($this->parameters);
      -  }
      -
      -  /**
      -   * builds the Authorization: header
      -   */
      -  public function to_header($realm=null) {
      -    $first = true;
      -	if($realm) {
      -      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -      $first = false;
      -    } else
      -      $out = 'Authorization: OAuth';
      -
      -    $total = array();
      -    foreach ($this->parameters as $k => $v) {
      -      if (substr($k, 0, 5) != "oauth") continue;
      -      if (is_array($v)) {
      -        throw new OAuthException('Arrays not supported in headers');
      -      }
      -      $out .= ($first) ? ' ' : ',';
      -      $out .= OAuthUtil::urlencode_rfc3986($k) .
      -              '="' .
      -              OAuthUtil::urlencode_rfc3986($v) .
      -              '"';
      -      $first = false;
      -    }
      -    return $out;
      -  }
      -
      -  public function __toString() {
      -    return $this->to_url();
      -  }
      -
      -
      -  public function sign_request($signature_method, $consumer, $token) {
      -    $this->set_parameter(
      -      "oauth_signature_method",
      -      $signature_method->get_name(),
      -      false
      -    );
      -    $signature = $this->build_signature($signature_method, $consumer, $token);
      -    $this->set_parameter("oauth_signature", $signature, false);
      -  }
      -
      -  public function build_signature($signature_method, $consumer, $token) {
      -    $signature = $signature_method->build_signature($this, $consumer, $token);
      -    return $signature;
      -  }
      -
      -  /**
      -   * util function: current timestamp
      -   */
      -  private static function generate_timestamp() {
      -    return time();
      -  }
      -
      -  /**
      -   * util function: current nonce
      -   */
      -  private static function generate_nonce() {
      -    $mt = microtime();
      -    $rand = mt_rand();
      -
      -    return md5($mt . $rand); // md5s look nicer than numbers
      -  }
      -}
      -
      -class OAuthServer {
      -  protected $timestamp_threshold = 300; // in seconds, five minutes
      -  protected $version = '1.0';             // hi blaine
      -  protected $signature_methods = array();
      -
      -  protected $data_store;
      -
      -  function __construct($data_store) {
      -    $this->data_store = $data_store;
      -  }
      -
      -  public function add_signature_method($signature_method) {
      -    $this->signature_methods[$signature_method->get_name()] =
      -      $signature_method;
      -  }
      -
      -  // high level functions
      -
      -  /**
      -   * process a request_token request
      -   * returns the request token on success
      -   */
      -  public function fetch_request_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // no token required for the initial token request
      -    $token = NULL;
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $callback = $request->get_parameter('oauth_callback');
      -    $new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * process an access_token request
      -   * returns the access token on success
      -   */
      -  public function fetch_access_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // requires authorized request token
      -    $token = $this->get_token($request, $consumer, "request");
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $verifier = $request->get_parameter('oauth_verifier');
      -    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * verify an api call, checks all the parameters
      -   */
      -  public function verify_request(&$request) {
      -    $this->get_version($request);
      -    $consumer = $this->get_consumer($request);
      -    $token = $this->get_token($request, $consumer, "access");
      -    $this->check_signature($request, $consumer, $token);
      -    return array($consumer, $token);
      -  }
      -
      -  // Internals from here
      -  /**
      -   * version 1
      -   */
      -  private function get_version(&$request) {
      -    $version = $request->get_parameter("oauth_version");
      -    if (!$version) {
      -      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      -      // Chapter 7.0 ("Accessing Protected Ressources")
      -      $version = '1.0';
      -    }
      -    if ($version !== $this->version) {
      -      throw new OAuthException("OAuth version '$version' not supported");
      -    }
      -    return $version;
      -  }
      -
      -  /**
      -   * figure out the signature with some defaults
      -   */
      -  private function get_signature_method(&$request) {
      -    $signature_method =
      -        @$request->get_parameter("oauth_signature_method");
      -
      -    if (!$signature_method) {
      -      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -      // parameter is required, and we can't just fallback to PLAINTEXT
      -      throw new OAuthException('No signature method parameter. This parameter is required');
      -    }
      -
      -    if (!in_array($signature_method,
      -                  array_keys($this->signature_methods))) {
      -      throw new OAuthException(
      -        "Signature method '$signature_method' not supported " .
      -        "try one of the following: " .
      -        implode(", ", array_keys($this->signature_methods))
      -      );
      -    }
      -    return $this->signature_methods[$signature_method];
      -  }
      -
      -  /**
      -   * try to find the consumer for the provided request's consumer key
      -   */
      -  private function get_consumer(&$request) {
      -    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      -    if (!$consumer_key) {
      -      throw new OAuthException("Invalid consumer key");
      -    }
      -
      -    $consumer = $this->data_store->lookup_consumer($consumer_key);
      -    if (!$consumer) {
      -      throw new OAuthException("Invalid consumer");
      -    }
      -
      -    return $consumer;
      -  }
      -
      -  /**
      -   * try to find the token for the provided request's token key
      -   */
      -  private function get_token(&$request, $consumer, $token_type="access") {
      -    $token_field = @$request->get_parameter('oauth_token');
      -    $token = $this->data_store->lookup_token(
      -      $consumer, $token_type, $token_field
      -    );
      -    if (!$token) {
      -      throw new OAuthException("Invalid $token_type token: $token_field");
      -    }
      -    return $token;
      -  }
      -
      -  /**
      -   * all-in-one function to check the signature on a request
      -   * should guess the signature method appropriately
      -   */
      -  private function check_signature(&$request, $consumer, $token) {
      -    // this should probably be in a different method
      -    $timestamp = @$request->get_parameter('oauth_timestamp');
      -    $nonce = @$request->get_parameter('oauth_nonce');
      -
      -    $this->check_timestamp($timestamp);
      -    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -    $signature_method = $this->get_signature_method($request);
      -
      -    $signature = $request->get_parameter('oauth_signature');
      -    $valid_sig = $signature_method->check_signature(
      -      $request,
      -      $consumer,
      -      $token,
      -      $signature
      -    );
      -
      -    if (!$valid_sig) {
      -      throw new OAuthException("Invalid signature");
      -    }
      -  }
      -
      -  /**
      -   * check that the timestamp is new enough
      -   */
      -  private function check_timestamp($timestamp) {
      -    if( ! $timestamp )
      -      throw new OAuthException(
      -        'Missing timestamp parameter. The parameter is required'
      -      );
      -    
      -    // verify that timestamp is recentish
      -    $now = time();
      -    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -      throw new OAuthException(
      -        "Expired timestamp, yours $timestamp, ours $now"
      -      );
      -    }
      -  }
      -
      -  /**
      -   * check that the nonce is not repeated
      -   */
      -  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -    if( ! $nonce )
      -      throw new OAuthException(
      -        'Missing nonce parameter. The parameter is required'
      -      );
      -
      -    // verify that the nonce is uniqueish
      -    $found = $this->data_store->lookup_nonce(
      -      $consumer,
      -      $token,
      -      $nonce,
      -      $timestamp
      -    );
      -    if ($found) {
      -      throw new OAuthException("Nonce already used: $nonce");
      -    }
      -  }
      -
      -}
      -
      -class OAuthDataStore {
      -  function lookup_consumer($consumer_key) {
      -    // implement me
      -  }
      -
      -  function lookup_token($consumer, $token_type, $token) {
      -    // implement me
      -  }
      -
      -  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -    // implement me
      -  }
      -
      -  function new_request_token($consumer, $callback = null) {
      -    // return a new token attached to this consumer
      -  }
      -
      -  function new_access_token($token, $consumer, $verifier = null) {
      -    // return a new access token attached to this consumer
      -    // for the user associated with this token if the request token
      -    // is authorized
      -    // should also invalidate the request token
      -  }
      -
      -}
      -
      -class OAuthUtil {
      -  public static function urlencode_rfc3986($input) {
      -  if (is_array($input)) {
      -    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -  } else if (is_scalar($input)) {
      -    return str_replace(
      -      '+',
      -      ' ',
      -      str_replace('%7E', '~', rawurlencode($input))
      -    );
      -  } else {
      -    return '';
      -  }
      -}
      -
      -
      -  // This decode function isn't taking into consideration the above
      -  // modifications to the encoding process. However, this method doesn't
      -  // seem to be used anywhere so leaving it as is.
      -  public static function urldecode_rfc3986($string) {
      -    return urldecode($string);
      -  }
      -
      -  // Utility function for turning the Authorization: header into
      -  // parameters, has to do some unescaping
      -  // Can filter out any non-oauth parameters if needed (default behaviour)
      -  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -    $offset = 0;
      -    $params = array();
      -    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -      $match = $matches[0];
      -      $header_name = $matches[2][0];
      -      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -      }
      -      $offset = $match[1] + strlen($match[0]);
      -    }
      -
      -    if (isset($params['realm'])) {
      -      unset($params['realm']);
      -    }
      -
      -    return $params;
      -  }
      -
      -  // helper to try to sort out headers for people who aren't running apache
      -  public static function get_headers() {
      -    if (function_exists('apache_request_headers')) {
      -      // we need this to get the actual Authorization: header
      -      // because apache tends to tell us it doesn't exist
      -      $headers = apache_request_headers();
      -
      -      // sanitize the output of apache_request_headers because
      -      // we always want the keys to be Cased-Like-This and arh()
      -      // returns the headers in the same case as they are in the
      -      // request
      -      $out = array();
      -      foreach( $headers AS $key => $value ) {
      -        $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("-", " ", $key)))
      -          );
      -        $out[$key] = $value;
      -      }
      -    } else {
      -      // otherwise we don't have apache and are just going to have to hope
      -      // that $_SERVER actually contains what we need
      -      $out = array();
      -      if( isset($_SERVER['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -      if( isset($_ENV['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -      foreach ($_SERVER as $key => $value) {
      -        if (substr($key, 0, 5) == "HTTP_") {
      -          // this is chaos, basically it is just there to capitalize the first
      -          // letter of every word that is not an initial HTTP and strip HTTP
      -          // code from przemek
      -          $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -          );
      -          $out[$key] = $value;
      -        }
      -      }
      -    }
      -    return $out;
      -  }
      -
      -  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -  // parameters like this
      -  // array('a' => array('b','c'), 'd' => 'e')
      -  public static function parse_parameters( $input ) {
      -    if (!isset($input) || !$input) return array();
      -
      -    $pairs = explode('&', $input);
      -
      -    $parsed_parameters = array();
      -    foreach ($pairs as $pair) {
      -      $split = explode('=', $pair, 2);
      -      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -      if (isset($parsed_parameters[$parameter])) {
      -        // We have already recieved parameter(s) with this name, so add to the list
      -        // of parameters with this name
      -
      -        if (is_scalar($parsed_parameters[$parameter])) {
      -          // This is the first duplicate, so transform scalar (string) into an array
      -          // so we can add the duplicates
      -          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -        }
      -
      -        $parsed_parameters[$parameter][] = $value;
      -      } else {
      -        $parsed_parameters[$parameter] = $value;
      -      }
      -    }
      -    return $parsed_parameters;
      -  }
      -
      -  public static function build_http_query($params) {
      -    if (!$params) return '';
      -
      -    // Urlencode both keys and values
      -    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -    $params = array_combine($keys, $values);
      -
      -    // Parameters are sorted by name, using lexicographical byte value ordering.
      -    // Ref: Spec: 9.1.1 (1)
      -    uksort($params, 'strcmp');
      -
      -    $pairs = array();
      -    foreach ($params as $parameter => $value) {
      -      if (is_array($value)) {
      -        // If two or more parameters share the same name, they are sorted by their value
      -        // Ref: Spec: 9.1.1 (1)
      -        natsort($value);
      -        foreach ($value as $duplicate_value) {
      -          $pairs[] = $parameter . '=' . $duplicate_value;
      -        }
      -      } else {
      -        $pairs[] = $parameter . '=' . $value;
      -      }
      -    }
      -    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -    // Each name-value pair is separated by an '&' character (ASCII code 38)
      -    return implode('&', $pairs);
      -  }
      -}
      -
      -?>
      +key = $key;
      +    $this->secret = $secret;
      +    $this->callback_url = $callback_url;
      +  }
      +
      +  function __toString() {
      +    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      +  }
      +}
      +
      +class OAuthToken {
      +  // access tokens and request tokens
      +  public $key;
      +  public $secret;
      +
      +  /**
      +   * key = the token
      +   * secret = the token secret
      +   */
      +  function __construct($key, $secret) {
      +    $this->key = $key;
      +    $this->secret = $secret;
      +  }
      +
      +  /**
      +   * generates the basic string serialization of a token that a server
      +   * would respond to request_token and access_token calls with
      +   */
      +  function to_string() {
      +    return "oauth_token=" .
      +           OAuthUtil::urlencode_rfc3986($this->key) .
      +           "&oauth_token_secret=" .
      +           OAuthUtil::urlencode_rfc3986($this->secret);
      +  }
      +
      +  function __toString() {
      +    return $this->to_string();
      +  }
      +}
      +
      +/**
      + * A class for implementing a Signature Method
      + * See section 9 ("Signing Requests") in the spec
      + */
      +abstract class OAuthSignatureMethod {
      +  /**
      +   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      +   * @return string
      +   */
      +  abstract public function get_name();
      +
      +  /**
      +   * Build up the signature
      +   * NOTE: The output of this function MUST NOT be urlencoded.
      +   * the encoding is handled in OAuthRequest when the final
      +   * request is serialized
      +   * @param OAuthRequest $request
      +   * @param OAuthConsumer $consumer
      +   * @param OAuthToken $token
      +   * @return string
      +   */
      +  abstract public function build_signature($request, $consumer, $token);
      +
      +  /**
      +   * Verifies that a given signature is correct
      +   * @param OAuthRequest $request
      +   * @param OAuthConsumer $consumer
      +   * @param OAuthToken $token
      +   * @param string $signature
      +   * @return bool
      +   */
      +  public function check_signature($request, $consumer, $token, $signature) {
      +    $built = $this->build_signature($request, $consumer, $token);
      +    return $built == $signature;
      +  }
      +}
      +
      +/**
      + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      + * where the Signature Base String is the text and the key is the concatenated values (each first 
      + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      + * character (ASCII code 38) even if empty.
      + *   - Chapter 9.2 ("HMAC-SHA1")
      + */
      +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      +  function get_name() {
      +    return "HMAC-SHA1";
      +  }
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +
      +    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      +  }
      +}
      +
      +/**
      + * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      + * over a secure channel such as HTTPS. It does not use the Signature Base String.
      + *   - Chapter 9.4 ("PLAINTEXT")
      + */
      +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "PLAINTEXT";
      +  }
      +
      +  /**
      +   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      +   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      +   * empty. The result MUST be encoded again.
      +   *   - Chapter 9.4.1 ("Generating Signatures")
      +   *
      +   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      +   * OAuthRequest handles this!
      +   */
      +  public function build_signature($request, $consumer, $token) {
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +    $request->base_string = $key;
      +
      +    return $key;
      +  }
      +}
      +
      +/**
      + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      + * verified way to the Service Provider, in a manner which is beyond the scope of this 
      + * specification.
      + *   - Chapter 9.3 ("RSA-SHA1")
      + */
      +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "RSA-SHA1";
      +  }
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  // (2) fetch via http using a url provided by the requester
      +  // (3) some sort of specific discovery code based on request
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_public_cert(&$request);
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_private_cert(&$request);
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    // Fetch the private key cert based on the request
      +    $cert = $this->fetch_private_cert($request);
      +
      +    // Pull the private key ID from the certificate
      +    $privatekeyid = openssl_get_privatekey($cert);
      +
      +    // Sign using the key
      +    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($privatekeyid);
      +
      +    return base64_encode($signature);
      +  }
      +
      +  public function check_signature($request, $consumer, $token, $signature) {
      +    $decoded_sig = base64_decode($signature);
      +
      +    $base_string = $request->get_signature_base_string();
      +
      +    // Fetch the public key cert based on the request
      +    $cert = $this->fetch_public_cert($request);
      +
      +    // Pull the public key ID from the certificate
      +    $publickeyid = openssl_get_publickey($cert);
      +
      +    // Check the computed signature against the one passed in the query
      +    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($publickeyid);
      +
      +    return $ok == 1;
      +  }
      +}
      +
      +class OAuthRequest {
      +  private $parameters;
      +  private $http_method;
      +  private $http_url;
      +  // for debug purposes
      +  public $base_string;
      +  public static $version = '1.0';
      +  public static $POST_INPUT = 'php://input';
      +
      +  function __construct($http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      +    $this->parameters = $parameters;
      +    $this->http_method = $http_method;
      +    $this->http_url = $http_url;
      +  }
      +
      +
      +  /**
      +   * attempt to build up a request from what was passed to the server
      +   */
      +  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      +    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      +              ? 'http'
      +              : 'https';
      +    @$http_url or $http_url = $scheme .
      +                              '://' . $_SERVER['HTTP_HOST'] .
      +                              ':' .
      +                              $_SERVER['SERVER_PORT'] .
      +                              $_SERVER['REQUEST_URI'];
      +    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      +
      +    // We weren't handed any parameters, so let's find the ones relevant to
      +    // this request.
      +    // If you run XML-RPC or similar you should use this to provide your own
      +    // parsed parameter-list
      +    if (!$parameters) {
      +      // Find request headers
      +      $request_headers = OAuthUtil::get_headers();
      +
      +      // Parse the query-string to find GET parameters
      +      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      +
      +      // It's a POST request of the proper content-type, so parse POST
      +      // parameters and add those overriding any duplicates from GET
      +      if ($http_method == "POST"
      +          && @strstr($request_headers["Content-Type"],
      +                     "application/x-www-form-urlencoded")
      +          ) {
      +        $post_data = OAuthUtil::parse_parameters(
      +          file_get_contents(self::$POST_INPUT)
      +        );
      +        $parameters = array_merge($parameters, $post_data);
      +      }
      +
      +      // We have a Authorization-header with OAuth data. Parse the header
      +      // and add those overriding any duplicates from GET or POST
      +      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      +        $header_parameters = OAuthUtil::split_header(
      +          $request_headers['Authorization']
      +        );
      +        $parameters = array_merge($parameters, $header_parameters);
      +      }
      +
      +    }
      +
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  /**
      +   * pretty much a helper function to set up the request
      +   */
      +  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $defaults = array("oauth_version" => OAuthRequest::$version,
      +                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      +                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      +                      "oauth_consumer_key" => $consumer->key);
      +    if ($token)
      +      $defaults['oauth_token'] = $token->key;
      +
      +    $parameters = array_merge($defaults, $parameters);
      +
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  public function set_parameter($name, $value, $allow_duplicates = true) {
      +    if ($allow_duplicates && isset($this->parameters[$name])) {
      +      // We have already added parameter(s) with this name, so add to the list
      +      if (is_scalar($this->parameters[$name])) {
      +        // This is the first duplicate, so transform scalar (string)
      +        // into an array so we can add the duplicates
      +        $this->parameters[$name] = array($this->parameters[$name]);
      +      }
      +
      +      $this->parameters[$name][] = $value;
      +    } else {
      +      $this->parameters[$name] = $value;
      +    }
      +  }
      +
      +  public function get_parameter($name) {
      +    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      +  }
      +
      +  public function get_parameters() {
      +    return $this->parameters;
      +  }
      +
      +  public function unset_parameter($name) {
      +    unset($this->parameters[$name]);
      +  }
      +
      +  /**
      +   * The request parameters, sorted and concatenated into a normalized string.
      +   * @return string
      +   */
      +  public function get_signable_parameters() {
      +    // Grab all parameters
      +    $params = $this->parameters;
      +
      +    // Remove oauth_signature if present
      +    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      +    if (isset($params['oauth_signature'])) {
      +      unset($params['oauth_signature']);
      +    }
      +
      +    return OAuthUtil::build_http_query($params);
      +  }
      +
      +  /**
      +   * Returns the base string of this request
      +   *
      +   * The base string defined as the method, the url
      +   * and the parameters (normalized), each urlencoded
      +   * and the concated with &.
      +   */
      +  public function get_signature_base_string() {
      +    $parts = array(
      +      $this->get_normalized_http_method(),
      +      $this->get_normalized_http_url(),
      +      $this->get_signable_parameters()
      +    );
      +
      +    $parts = OAuthUtil::urlencode_rfc3986($parts);
      +
      +    return implode('&', $parts);
      +  }
      +
      +  /**
      +   * just uppercases the http method
      +   */
      +  public function get_normalized_http_method() {
      +    return strtoupper($this->http_method);
      +  }
      +
      +  /**
      +   * parses the url and rebuilds it to be
      +   * scheme://host/path
      +   */
      +  public function get_normalized_http_url() {
      +    $parts = parse_url($this->http_url);
      +
      +    $port = @$parts['port'];
      +    $scheme = $parts['scheme'];
      +    $host = $parts['host'];
      +    $path = @$parts['path'];
      +
      +    $port or $port = ($scheme == 'https') ? '443' : '80';
      +
      +    if (($scheme == 'https' && $port != '443')
      +        || ($scheme == 'http' && $port != '80')) {
      +      $host = "$host:$port";
      +    }
      +    return "$scheme://$host$path";
      +  }
      +
      +  /**
      +   * builds a url usable for a GET request
      +   */
      +  public function to_url() {
      +    $post_data = $this->to_postdata();
      +    $out = $this->get_normalized_http_url();
      +    if ($post_data) {
      +      $out .= '?'.$post_data;
      +    }
      +    return $out;
      +  }
      +
      +  /**
      +   * builds the data one would send in a POST request
      +   */
      +  public function to_postdata() {
      +    return OAuthUtil::build_http_query($this->parameters);
      +  }
      +
      +  /**
      +   * builds the Authorization: header
      +   */
      +  public function to_header($realm=null) {
      +    $first = true;
      +	if($realm) {
      +      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      +      $first = false;
      +    } else
      +      $out = 'Authorization: OAuth';
      +
      +    $total = array();
      +    foreach ($this->parameters as $k => $v) {
      +      if (substr($k, 0, 5) != "oauth") continue;
      +      if (is_array($v)) {
      +        throw new OAuthException('Arrays not supported in headers');
      +      }
      +      $out .= ($first) ? ' ' : ',';
      +      $out .= OAuthUtil::urlencode_rfc3986($k) .
      +              '="' .
      +              OAuthUtil::urlencode_rfc3986($v) .
      +              '"';
      +      $first = false;
      +    }
      +    return $out;
      +  }
      +
      +  public function __toString() {
      +    return $this->to_url();
      +  }
      +
      +
      +  public function sign_request($signature_method, $consumer, $token) {
      +    $this->set_parameter(
      +      "oauth_signature_method",
      +      $signature_method->get_name(),
      +      false
      +    );
      +    $signature = $this->build_signature($signature_method, $consumer, $token);
      +    $this->set_parameter("oauth_signature", $signature, false);
      +  }
      +
      +  public function build_signature($signature_method, $consumer, $token) {
      +    $signature = $signature_method->build_signature($this, $consumer, $token);
      +    return $signature;
      +  }
      +
      +  /**
      +   * util function: current timestamp
      +   */
      +  private static function generate_timestamp() {
      +    return time();
      +  }
      +
      +  /**
      +   * util function: current nonce
      +   */
      +  private static function generate_nonce() {
      +    $mt = microtime();
      +    $rand = mt_rand();
      +
      +    return md5($mt . $rand); // md5s look nicer than numbers
      +  }
      +}
      +
      +class OAuthServer {
      +  protected $timestamp_threshold = 300; // in seconds, five minutes
      +  protected $version = '1.0';             // hi blaine
      +  protected $signature_methods = array();
      +
      +  protected $data_store;
      +
      +  function __construct($data_store) {
      +    $this->data_store = $data_store;
      +  }
      +
      +  public function add_signature_method($signature_method) {
      +    $this->signature_methods[$signature_method->get_name()] =
      +      $signature_method;
      +  }
      +
      +  // high level functions
      +
      +  /**
      +   * process a request_token request
      +   * returns the request token on success
      +   */
      +  public function fetch_request_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // no token required for the initial token request
      +    $token = NULL;
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $callback = $request->get_parameter('oauth_callback');
      +    $new_token = $this->data_store->new_request_token($consumer, $callback);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * process an access_token request
      +   * returns the access token on success
      +   */
      +  public function fetch_access_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // requires authorized request token
      +    $token = $this->get_token($request, $consumer, "request");
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $verifier = $request->get_parameter('oauth_verifier');
      +    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * verify an api call, checks all the parameters
      +   */
      +  public function verify_request(&$request) {
      +    $this->get_version($request);
      +    $consumer = $this->get_consumer($request);
      +    $token = $this->get_token($request, $consumer, "access");
      +    $this->check_signature($request, $consumer, $token);
      +    return array($consumer, $token);
      +  }
      +
      +  // Internals from here
      +  /**
      +   * version 1
      +   */
      +  private function get_version(&$request) {
      +    $version = $request->get_parameter("oauth_version");
      +    if (!$version) {
      +      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      +      // Chapter 7.0 ("Accessing Protected Ressources")
      +      $version = '1.0';
      +    }
      +    if ($version !== $this->version) {
      +      throw new OAuthException("OAuth version '$version' not supported");
      +    }
      +    return $version;
      +  }
      +
      +  /**
      +   * figure out the signature with some defaults
      +   */
      +  private function get_signature_method(&$request) {
      +    $signature_method =
      +        @$request->get_parameter("oauth_signature_method");
      +
      +    if (!$signature_method) {
      +      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      +      // parameter is required, and we can't just fallback to PLAINTEXT
      +      throw new OAuthException('No signature method parameter. This parameter is required');
      +    }
      +
      +    if (!in_array($signature_method,
      +                  array_keys($this->signature_methods))) {
      +      throw new OAuthException(
      +        "Signature method '$signature_method' not supported " .
      +        "try one of the following: " .
      +        implode(", ", array_keys($this->signature_methods))
      +      );
      +    }
      +    return $this->signature_methods[$signature_method];
      +  }
      +
      +  /**
      +   * try to find the consumer for the provided request's consumer key
      +   */
      +  private function get_consumer(&$request) {
      +    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      +    if (!$consumer_key) {
      +      throw new OAuthException("Invalid consumer key");
      +    }
      +
      +    $consumer = $this->data_store->lookup_consumer($consumer_key);
      +    if (!$consumer) {
      +      throw new OAuthException("Invalid consumer");
      +    }
      +
      +    return $consumer;
      +  }
      +
      +  /**
      +   * try to find the token for the provided request's token key
      +   */
      +  private function get_token(&$request, $consumer, $token_type="access") {
      +    $token_field = @$request->get_parameter('oauth_token');
      +    $token = $this->data_store->lookup_token(
      +      $consumer, $token_type, $token_field
      +    );
      +    if (!$token) {
      +      throw new OAuthException("Invalid $token_type token: $token_field");
      +    }
      +    return $token;
      +  }
      +
      +  /**
      +   * all-in-one function to check the signature on a request
      +   * should guess the signature method appropriately
      +   */
      +  private function check_signature(&$request, $consumer, $token) {
      +    // this should probably be in a different method
      +    $timestamp = @$request->get_parameter('oauth_timestamp');
      +    $nonce = @$request->get_parameter('oauth_nonce');
      +
      +    $this->check_timestamp($timestamp);
      +    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      +
      +    $signature_method = $this->get_signature_method($request);
      +
      +    $signature = $request->get_parameter('oauth_signature');
      +    $valid_sig = $signature_method->check_signature(
      +      $request,
      +      $consumer,
      +      $token,
      +      $signature
      +    );
      +
      +    if (!$valid_sig) {
      +      throw new OAuthException("Invalid signature");
      +    }
      +  }
      +
      +  /**
      +   * check that the timestamp is new enough
      +   */
      +  private function check_timestamp($timestamp) {
      +    if( ! $timestamp )
      +      throw new OAuthException(
      +        'Missing timestamp parameter. The parameter is required'
      +      );
      +    
      +    // verify that timestamp is recentish
      +    $now = time();
      +    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      +      throw new OAuthException(
      +        "Expired timestamp, yours $timestamp, ours $now"
      +      );
      +    }
      +  }
      +
      +  /**
      +   * check that the nonce is not repeated
      +   */
      +  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      +    if( ! $nonce )
      +      throw new OAuthException(
      +        'Missing nonce parameter. The parameter is required'
      +      );
      +
      +    // verify that the nonce is uniqueish
      +    $found = $this->data_store->lookup_nonce(
      +      $consumer,
      +      $token,
      +      $nonce,
      +      $timestamp
      +    );
      +    if ($found) {
      +      throw new OAuthException("Nonce already used: $nonce");
      +    }
      +  }
      +
      +}
      +
      +class OAuthDataStore {
      +  function lookup_consumer($consumer_key) {
      +    // implement me
      +  }
      +
      +  function lookup_token($consumer, $token_type, $token) {
      +    // implement me
      +  }
      +
      +  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      +    // implement me
      +  }
      +
      +  function new_request_token($consumer, $callback = null) {
      +    // return a new token attached to this consumer
      +  }
      +
      +  function new_access_token($token, $consumer, $verifier = null) {
      +    // return a new access token attached to this consumer
      +    // for the user associated with this token if the request token
      +    // is authorized
      +    // should also invalidate the request token
      +  }
      +
      +}
      +
      +class OAuthUtil {
      +  public static function urlencode_rfc3986($input) {
      +  if (is_array($input)) {
      +    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      +  } else if (is_scalar($input)) {
      +    return str_replace(
      +      '+',
      +      ' ',
      +      str_replace('%7E', '~', rawurlencode($input))
      +    );
      +  } else {
      +    return '';
      +  }
      +}
      +
      +
      +  // This decode function isn't taking into consideration the above
      +  // modifications to the encoding process. However, this method doesn't
      +  // seem to be used anywhere so leaving it as is.
      +  public static function urldecode_rfc3986($string) {
      +    return urldecode($string);
      +  }
      +
      +  // Utility function for turning the Authorization: header into
      +  // parameters, has to do some unescaping
      +  // Can filter out any non-oauth parameters if needed (default behaviour)
      +  public static function split_header($header, $only_allow_oauth_parameters = true) {
      +    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      +    $offset = 0;
      +    $params = array();
      +    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      +      $match = $matches[0];
      +      $header_name = $matches[2][0];
      +      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      +      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      +        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      +      }
      +      $offset = $match[1] + strlen($match[0]);
      +    }
      +
      +    if (isset($params['realm'])) {
      +      unset($params['realm']);
      +    }
      +
      +    return $params;
      +  }
      +
      +  // helper to try to sort out headers for people who aren't running apache
      +  public static function get_headers() {
      +    if (function_exists('apache_request_headers')) {
      +      // we need this to get the actual Authorization: header
      +      // because apache tends to tell us it doesn't exist
      +      $headers = apache_request_headers();
      +
      +      // sanitize the output of apache_request_headers because
      +      // we always want the keys to be Cased-Like-This and arh()
      +      // returns the headers in the same case as they are in the
      +      // request
      +      $out = array();
      +      foreach( $headers AS $key => $value ) {
      +        $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("-", " ", $key)))
      +          );
      +        $out[$key] = $value;
      +      }
      +    } else {
      +      // otherwise we don't have apache and are just going to have to hope
      +      // that $_SERVER actually contains what we need
      +      $out = array();
      +      if( isset($_SERVER['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      +      if( isset($_ENV['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      +
      +      foreach ($_SERVER as $key => $value) {
      +        if (substr($key, 0, 5) == "HTTP_") {
      +          // this is chaos, basically it is just there to capitalize the first
      +          // letter of every word that is not an initial HTTP and strip HTTP
      +          // code from przemek
      +          $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      +          );
      +          $out[$key] = $value;
      +        }
      +      }
      +    }
      +    return $out;
      +  }
      +
      +  // This function takes a input like a=b&a=c&d=e and returns the parsed
      +  // parameters like this
      +  // array('a' => array('b','c'), 'd' => 'e')
      +  public static function parse_parameters( $input ) {
      +    if (!isset($input) || !$input) return array();
      +
      +    $pairs = explode('&', $input);
      +
      +    $parsed_parameters = array();
      +    foreach ($pairs as $pair) {
      +      $split = explode('=', $pair, 2);
      +      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      +      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      +
      +      if (isset($parsed_parameters[$parameter])) {
      +        // We have already recieved parameter(s) with this name, so add to the list
      +        // of parameters with this name
      +
      +        if (is_scalar($parsed_parameters[$parameter])) {
      +          // This is the first duplicate, so transform scalar (string) into an array
      +          // so we can add the duplicates
      +          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      +        }
      +
      +        $parsed_parameters[$parameter][] = $value;
      +      } else {
      +        $parsed_parameters[$parameter] = $value;
      +      }
      +    }
      +    return $parsed_parameters;
      +  }
      +
      +  public static function build_http_query($params) {
      +    if (!$params) return '';
      +
      +    // Urlencode both keys and values
      +    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      +    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      +    $params = array_combine($keys, $values);
      +
      +    // Parameters are sorted by name, using lexicographical byte value ordering.
      +    // Ref: Spec: 9.1.1 (1)
      +    uksort($params, 'strcmp');
      +
      +    $pairs = array();
      +    foreach ($params as $parameter => $value) {
      +      if (is_array($value)) {
      +        // If two or more parameters share the same name, they are sorted by their value
      +        // Ref: Spec: 9.1.1 (1)
      +        natsort($value);
      +        foreach ($value as $duplicate_value) {
      +          $pairs[] = $parameter . '=' . $duplicate_value;
      +        }
      +      } else {
      +        $pairs[] = $parameter . '=' . $value;
      +      }
      +    }
      +    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      +    // Each name-value pair is separated by an '&' character (ASCII code 38)
      +    return implode('&', $pairs);
      +  }
      +}
      +
      +?>
      diff --git a/tumblr/tumblroauth/tumblroauth.php b/tumblr/library/tumblroauth.php
      similarity index 95%
      rename from tumblr/tumblroauth/tumblroauth.php
      rename to tumblr/library/tumblroauth.php
      index 3c6f13c1..365744eb 100644
      --- a/tumblr/tumblroauth/tumblroauth.php
      +++ b/tumblr/library/tumblroauth.php
      @@ -1,245 +1,245 @@
      -http_status; }
      -  function lastAPICall() { return $this->last_api_call; }
      -
      -  /**
      -   * construct TumblrOAuth object
      -   */
      -  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      -    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      -    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      -    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      -      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      -    } else {
      -      $this->token = NULL;
      -    }
      -  }
      -
      -
      -  /**
      -   * Get a request_token from Tumblr
      -   *
      -   * @returns a key/value array containing oauth_token and oauth_token_secret
      -   */
      -  function getRequestToken($oauth_callback = NULL) {
      -    $parameters = array();
      -    if (!empty($oauth_callback)) {
      -      $parameters['oauth_callback'] = $oauth_callback;
      -    } 
      -    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * Get the authorize URL
      -   *
      -   * @returns a string
      -   */
      -  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      -    if (is_array($token)) {
      -      $token = $token['oauth_token'];
      -    }
      -    if (empty($sign_in_with_tumblr)) {
      -      return $this->authorizeURL() . "?oauth_token={$token}";
      -    } else {
      -       return $this->authenticateURL() . "?oauth_token={$token}";
      -    }
      -  }
      -
      -  /**
      -   * Exchange request token and secret for an access token and
      -   * secret, to sign API calls.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham")
      -   */
      -  function getAccessToken($oauth_verifier = FALSE) {
      -    $parameters = array();
      -    if (!empty($oauth_verifier)) {
      -      $parameters['oauth_verifier'] = $oauth_verifier;
      -    }
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * One time exchange of username and password for access token and secret.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham",
      -   *                "x_auth_expires" => "0")
      -   */  
      -  function getXAuthToken($username, $password) {
      -    $parameters = array();
      -    $parameters['x_auth_username'] = $username;
      -    $parameters['x_auth_password'] = $password;
      -    $parameters['x_auth_mode'] = 'client_auth';
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * GET wrapper for oAuthRequest.
      -   */
      -  function get($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'GET', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -  
      -  /**
      -   * POST wrapper for oAuthRequest.
      -   */
      -  function post($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'POST', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * DELETE wrapper for oAuthReqeust.
      -   */
      -  function delete($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * Format and sign an OAuth / API request
      -   */
      -  function oAuthRequest($url, $method, $parameters) {
      -    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      -      $url = "{$this->host}{$url}";
      -    }
      -    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      -    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      -    switch ($method) {
      -    case 'GET':
      -      return $this->http($request->to_url(), 'GET');
      -    default:
      -      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      -    }
      -  }
      -
      -  /**
      -   * Make an HTTP request
      -   *
      -   * @return API results
      -   */
      -  function http($url, $method, $postfields = NULL) {
      -    $this->http_info = array();
      -    $ci = curl_init();
      -    /* Curl settings */
      -    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      -    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      -    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -    switch ($method) {
      -      case 'POST':
      -        curl_setopt($ci, CURLOPT_POST, TRUE);
      -        if (!empty($postfields)) {
      -          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -        }
      -        break;
      -      case 'DELETE':
      -        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -        if (!empty($postfields)) {
      -          $url = "{$url}?{$postfields}";
      -        }
      -    }
      -
      -    curl_setopt($ci, CURLOPT_URL, $url);
      -    $response = curl_exec($ci);
      -    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -    $this->url = $url;
      -    curl_close ($ci);
      -    return $response;
      -  }
      -
      -  /**
      -   * Get the header info to store.
      -   */
      -  function getHeader($ch, $header) {
      -    $i = strpos($header, ':');
      -    if (!empty($i)) {
      -      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      -      $value = trim(substr($header, $i + 2));
      -      $this->http_header[$key] = $value;
      -    }
      -    return strlen($header);
      -  }
      -}
      +http_status; }
      +  function lastAPICall() { return $this->last_api_call; }
      +
      +  /**
      +   * construct TumblrOAuth object
      +   */
      +  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      +    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      +    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      +    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      +      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      +    } else {
      +      $this->token = NULL;
      +    }
      +  }
      +
      +
      +  /**
      +   * Get a request_token from Tumblr
      +   *
      +   * @returns a key/value array containing oauth_token and oauth_token_secret
      +   */
      +  function getRequestToken($oauth_callback = NULL) {
      +    $parameters = array();
      +    if (!empty($oauth_callback)) {
      +      $parameters['oauth_callback'] = $oauth_callback;
      +    }
      +    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * Get the authorize URL
      +   *
      +   * @returns a string
      +   */
      +  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      +    if (is_array($token)) {
      +      $token = $token['oauth_token'];
      +    }
      +    if (empty($sign_in_with_tumblr)) {
      +      return $this->authorizeURL() . "?oauth_token={$token}";
      +    } else {
      +       return $this->authenticateURL() . "?oauth_token={$token}";
      +    }
      +  }
      +
      +  /**
      +   * Exchange request token and secret for an access token and
      +   * secret, to sign API calls.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham")
      +   */
      +  function getAccessToken($oauth_verifier = FALSE) {
      +    $parameters = array();
      +    if (!empty($oauth_verifier)) {
      +      $parameters['oauth_verifier'] = $oauth_verifier;
      +    }
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * One time exchange of username and password for access token and secret.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham",
      +   *                "x_auth_expires" => "0")
      +   */
      +  function getXAuthToken($username, $password) {
      +    $parameters = array();
      +    $parameters['x_auth_username'] = $username;
      +    $parameters['x_auth_password'] = $password;
      +    $parameters['x_auth_mode'] = 'client_auth';
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * GET wrapper for oAuthRequest.
      +   */
      +  function get($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'GET', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * POST wrapper for oAuthRequest.
      +   */
      +  function post($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'POST', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * DELETE wrapper for oAuthReqeust.
      +   */
      +  function delete($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * Format and sign an OAuth / API request
      +   */
      +  function oAuthRequest($url, $method, $parameters) {
      +    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      +      $url = "{$this->host}{$url}";
      +    }
      +    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      +    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      +    switch ($method) {
      +    case 'GET':
      +      return $this->http($request->to_url(), 'GET');
      +    default:
      +      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      +    }
      +  }
      +
      +  /**
      +   * Make an HTTP request
      +   *
      +   * @return API results
      +   */
      +  function http($url, $method, $postfields = NULL) {
      +    $this->http_info = array();
      +    $ci = curl_init();
      +    /* Curl settings */
      +    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      +    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      +    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +    switch ($method) {
      +      case 'POST':
      +        curl_setopt($ci, CURLOPT_POST, TRUE);
      +        if (!empty($postfields)) {
      +          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +        }
      +        break;
      +      case 'DELETE':
      +        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +        if (!empty($postfields)) {
      +          $url = "{$url}?{$postfields}";
      +        }
      +    }
      +
      +    curl_setopt($ci, CURLOPT_URL, $url);
      +    $response = curl_exec($ci);
      +    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +    $this->url = $url;
      +    curl_close ($ci);
      +    return $response;
      +  }
      +
      +  /**
      +   * Get the header info to store.
      +   */
      +  function getHeader($ch, $header) {
      +    $i = strpos($header, ':');
      +    if (!empty($i)) {
      +      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      +      $value = trim(substr($header, $i + 2));
      +      $this->http_header[$key] = $value;
      +    }
      +    return strlen($header);
      +  }
      +}
      diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php
      index 20a27f45..8f258f56 100644
      --- a/tumblr/tumblr.php
      +++ b/tumblr/tumblr.php
      @@ -7,8 +7,7 @@
        * Author: Michael Vogel 
        */
       
      -require_once 'library/OAuth1.php';
      -require_once 'addon/tumblr/tumblroauth/tumblroauth.php';
      +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'tumblroauth.php';
       
       use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
      
      From e090ee2990350ad051d894eac9fdeb509a3f2c51 Mon Sep 17 00:00:00 2001
      From: Michael Vogel 
      Date: Sun, 28 Jan 2018 23:47:32 +0100
      Subject: [PATCH 031/116] Revert "Move TwitterOAuth to Composer, part 2 :
       StatusNet and Tumblr"
      
      ---
       .../{library/codebirdsn.php => codebird.php}  |    0
       statusnet/library/OAuth1.php                  |  893 ---------
       statusnet/library/statusnetoauth.php          |  102 -
       statusnet/library/twitteroauth.php            |  280 ---
       statusnet/statusnet.php                       |  110 +-
       tumblr/tumblr.php                             |    3 +-
       .../OAuth1.php => tumblroauth/OAuth.php}      | 1748 ++++++++---------
       .../{library => tumblroauth}/tumblroauth.php  |  490 ++---
       8 files changed, 1226 insertions(+), 2400 deletions(-)
       rename statusnet/{library/codebirdsn.php => codebird.php} (100%)
       delete mode 100644 statusnet/library/OAuth1.php
       delete mode 100644 statusnet/library/statusnetoauth.php
       delete mode 100644 statusnet/library/twitteroauth.php
       rename tumblr/{library/OAuth1.php => tumblroauth/OAuth.php} (96%)
       rename tumblr/{library => tumblroauth}/tumblroauth.php (95%)
      
      diff --git a/statusnet/library/codebirdsn.php b/statusnet/codebird.php
      similarity index 100%
      rename from statusnet/library/codebirdsn.php
      rename to statusnet/codebird.php
      diff --git a/statusnet/library/OAuth1.php b/statusnet/library/OAuth1.php
      deleted file mode 100644
      index a2097be0..00000000
      --- a/statusnet/library/OAuth1.php
      +++ /dev/null
      @@ -1,893 +0,0 @@
      -key = $key;
      -    $this->secret = $secret;
      -    $this->callback_url = $callback_url;
      -  }
      -
      -  function __toString() {
      -    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      -  }
      -}
      -
      -class OAuthToken {
      -  // access tokens and request tokens
      -  public $key;
      -  public $secret;
      -
      -  public $expires;
      -  public $scope;
      -  public $uid;
      -
      -  /**
      -   * key = the token
      -   * secret = the token secret
      -   */
      -  function __construct($key, $secret) {
      -    $this->key = $key;
      -    $this->secret = $secret;
      -  }
      -
      -  /**
      -   * generates the basic string serialization of a token that a server
      -   * would respond to request_token and access_token calls with
      -   */
      -  function to_string() {
      -    return "oauth_token=" .
      -           OAuthUtil::urlencode_rfc3986($this->key) .
      -           "&oauth_token_secret=" .
      -           OAuthUtil::urlencode_rfc3986($this->secret);
      -  }
      -
      -  function __toString() {
      -    return $this->to_string();
      -  }
      -}
      -
      -/**
      - * A class for implementing a Signature Method
      - * See section 9 ("Signing Requests") in the spec
      - */
      -abstract class OAuthSignatureMethod {
      -  /**
      -   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      -   * @return string
      -   */
      -  abstract public function get_name();
      -
      -  /**
      -   * Build up the signature
      -   * NOTE: The output of this function MUST NOT be urlencoded.
      -   * the encoding is handled in OAuthRequest when the final
      -   * request is serialized
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @return string
      -   */
      -  abstract public function build_signature($request, $consumer, $token);
      -
      -  /**
      -   * Verifies that a given signature is correct
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @param string $signature
      -   * @return bool
      -   */
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $built = $this->build_signature($request, $consumer, $token);
      -    //echo "
      "; var_dump($signature, $built, ($built == $signature)); killme();
      -    return ($built == $signature);
      -  }
      -}
      -
      -/**
      - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      - * where the Signature Base String is the text and the key is the concatenated values (each first 
      - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      - * character (ASCII code 38) even if empty.
      - *   - Chapter 9.2 ("HMAC-SHA1")
      - */
      -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -  function get_name() {
      -    return "HMAC-SHA1";
      -  }
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -
      -
      -    $r = base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -    return $r;
      -  }
      -}
      -
      -/**
      - * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      - * over a secure channel such as HTTPS. It does not use the Signature Base String.
      - *   - Chapter 9.4 ("PLAINTEXT")
      - */
      -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "PLAINTEXT";
      -  }
      -
      -  /**
      -   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      -   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      -   * empty. The result MUST be encoded again.
      -   *   - Chapter 9.4.1 ("Generating Signatures")
      -   *
      -   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -   * OAuthRequest handles this!
      -   */
      -  public function build_signature($request, $consumer, $token) {
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -    $request->base_string = $key;
      -
      -    return $key;
      -  }
      -}
      -
      -/**
      - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      - * verified way to the Service Provider, in a manner which is beyond the scope of this 
      - * specification.
      - *   - Chapter 9.3 ("RSA-SHA1")
      - */
      -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "RSA-SHA1";
      -  }
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  // (2) fetch via http using a url provided by the requester
      -  // (3) some sort of specific discovery code based on request
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_public_cert(&$request);
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_private_cert(&$request);
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    // Fetch the private key cert based on the request
      -    $cert = $this->fetch_private_cert($request);
      -
      -    // Pull the private key ID from the certificate
      -    $privatekeyid = openssl_get_privatekey($cert);
      -
      -    // Sign using the key
      -    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($privatekeyid);
      -
      -    return base64_encode($signature);
      -  }
      -
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $decoded_sig = base64_decode($signature);
      -
      -    $base_string = $request->get_signature_base_string();
      -
      -    // Fetch the public key cert based on the request
      -    $cert = $this->fetch_public_cert($request);
      -
      -    // Pull the public key ID from the certificate
      -    $publickeyid = openssl_get_publickey($cert);
      -
      -    // Check the computed signature against the one passed in the query
      -    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($publickeyid);
      -
      -    return $ok == 1;
      -  }
      -}
      -
      -class OAuthRequest {
      -  private $parameters;
      -  private $http_method;
      -  private $http_url;
      -  // for debug purposes
      -  public $base_string;
      -  public static $version = '1.0';
      -  public static $POST_INPUT = 'php://input';
      -
      -  function __construct($http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -    $this->parameters = $parameters;
      -    $this->http_method = $http_method;
      -    $this->http_url = $http_url;
      -  }
      -
      -
      -  /**
      -   * attempt to build up a request from what was passed to the server
      -   */
      -  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -              ? 'http'
      -              : 'https';
      -    @$http_url or $http_url = $scheme .
      -                              '://' . $_SERVER['HTTP_HOST'] .
      -                              ':' .
      -                              $_SERVER['SERVER_PORT'] .
      -                              $_SERVER['REQUEST_URI'];
      -    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -    // We weren't handed any parameters, so let's find the ones relevant to
      -    // this request.
      -    // If you run XML-RPC or similar you should use this to provide your own
      -    // parsed parameter-list
      -    if (!$parameters) {
      -      // Find request headers
      -      $request_headers = OAuthUtil::get_headers();
      -
      -      // Parse the query-string to find GET parameters
      -      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -      // It's a POST request of the proper content-type, so parse POST
      -      // parameters and add those overriding any duplicates from GET
      -      if ($http_method == "POST"
      -          && @strstr($request_headers["Content-Type"],
      -                     "application/x-www-form-urlencoded")
      -          ) {
      -        $post_data = OAuthUtil::parse_parameters(
      -          file_get_contents(self::$POST_INPUT)
      -        );
      -        $parameters = array_merge($parameters, $post_data);
      -      }
      -
      -      // We have a Authorization-header with OAuth data. Parse the header
      -      // and add those overriding any duplicates from GET or POST
      -      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -        $header_parameters = OAuthUtil::split_header(
      -          $request_headers['Authorization']
      -        );
      -        $parameters = array_merge($parameters, $header_parameters);
      -      }
      -
      -    }
      -    // fix for friendica redirect system
      -    
      -    $http_url =  substr($http_url, 0, strpos($http_url,$parameters['pagename'])+strlen($parameters['pagename']));
      -    unset( $parameters['pagename'] );
      -    
      -	//echo "
      ".__function__."\n"; var_dump($http_method, $http_url, $parameters, $_SERVER['REQUEST_URI']); killme();
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  /**
      -   * pretty much a helper function to set up the request
      -   */
      -  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $defaults = array("oauth_version" => OAuthRequest::$version,
      -                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      -                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -                      "oauth_consumer_key" => $consumer->key);
      -    if ($token)
      -      $defaults['oauth_token'] = $token->key;
      -
      -    $parameters = array_merge($defaults, $parameters);
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  public function set_parameter($name, $value, $allow_duplicates = true) {
      -    if ($allow_duplicates && isset($this->parameters[$name])) {
      -      // We have already added parameter(s) with this name, so add to the list
      -      if (is_scalar($this->parameters[$name])) {
      -        // This is the first duplicate, so transform scalar (string)
      -        // into an array so we can add the duplicates
      -        $this->parameters[$name] = array($this->parameters[$name]);
      -      }
      -
      -      $this->parameters[$name][] = $value;
      -    } else {
      -      $this->parameters[$name] = $value;
      -    }
      -  }
      -
      -  public function get_parameter($name) {
      -    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -  }
      -
      -  public function get_parameters() {
      -    return $this->parameters;
      -  }
      -
      -  public function unset_parameter($name) {
      -    unset($this->parameters[$name]);
      -  }
      -
      -  /**
      -   * The request parameters, sorted and concatenated into a normalized string.
      -   * @return string
      -   */
      -  public function get_signable_parameters() {
      -    // Grab all parameters
      -    $params = $this->parameters;
      -
      -    // Remove oauth_signature if present
      -    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -    if (isset($params['oauth_signature'])) {
      -      unset($params['oauth_signature']);
      -    }
      -
      -    return OAuthUtil::build_http_query($params);
      -  }
      -
      -  /**
      -   * Returns the base string of this request
      -   *
      -   * The base string defined as the method, the url
      -   * and the parameters (normalized), each urlencoded
      -   * and the concated with &.
      -   */
      -  public function get_signature_base_string() {
      -    $parts = array(
      -      $this->get_normalized_http_method(),
      -      $this->get_normalized_http_url(),
      -      $this->get_signable_parameters()
      -    );
      -
      -    $parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -    return implode('&', $parts);
      -  }
      -
      -  /**
      -   * just uppercases the http method
      -   */
      -  public function get_normalized_http_method() {
      -    return strtoupper($this->http_method);
      -  }
      -
      -  /**
      -   * parses the url and rebuilds it to be
      -   * scheme://host/path
      -   */
      -  public function get_normalized_http_url() {
      -    $parts = parse_url($this->http_url);
      -
      -    $port = @$parts['port'];
      -    $scheme = $parts['scheme'];
      -    $host = $parts['host'];
      -    $path = @$parts['path'];
      -
      -    $port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -    if (($scheme == 'https' && $port != '443')
      -        || ($scheme == 'http' && $port != '80')) {
      -      $host = "$host:$port";
      -    }
      -    return "$scheme://$host$path";
      -  }
      -
      -  /**
      -   * builds a url usable for a GET request
      -   */
      -  public function to_url() {
      -    $post_data = $this->to_postdata();
      -    $out = $this->get_normalized_http_url();
      -    if ($post_data) {
      -      $out .= '?'.$post_data;
      -    }
      -    return $out;
      -  }
      -
      -  /**
      -   * builds the data one would send in a POST request
      -   */
      -  public function to_postdata($raw = false) {
      -    if ($raw)
      -      return($this->parameters);
      -    else
      -      return OAuthUtil::build_http_query($this->parameters);
      -  }
      -
      -  /**
      -   * builds the Authorization: header
      -   */
      -  public function to_header($realm=null) {
      -    $first = true;
      -	if($realm) {
      -      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -      $first = false;
      -    } else
      -      $out = 'Authorization: OAuth';
      -
      -    $total = array();
      -    foreach ($this->parameters as $k => $v) {
      -      if (substr($k, 0, 5) != "oauth") continue;
      -      if (is_array($v)) {
      -        throw new OAuthException('Arrays not supported in headers');
      -      }
      -      $out .= ($first) ? ' ' : ',';
      -      $out .= OAuthUtil::urlencode_rfc3986($k) .
      -              '="' .
      -              OAuthUtil::urlencode_rfc3986($v) .
      -              '"';
      -      $first = false;
      -    }
      -    return $out;
      -  }
      -
      -  public function __toString() {
      -    return $this->to_url();
      -  }
      -
      -
      -  public function sign_request($signature_method, $consumer, $token) {
      -    $this->set_parameter(
      -      "oauth_signature_method",
      -      $signature_method->get_name(),
      -      false
      -    );
      -    $signature = $this->build_signature($signature_method, $consumer, $token);
      -    $this->set_parameter("oauth_signature", $signature, false);
      -  }
      -
      -  public function build_signature($signature_method, $consumer, $token) {
      -    $signature = $signature_method->build_signature($this, $consumer, $token);
      -    return $signature;
      -  }
      -
      -  /**
      -   * util function: current timestamp
      -   */
      -  private static function generate_timestamp() {
      -    return time();
      -  }
      -
      -  /**
      -   * util function: current nonce
      -   */
      -  private static function generate_nonce() {
      -    $mt = microtime();
      -    $rand = mt_rand();
      -
      -    return md5($mt . $rand); // md5s look nicer than numbers
      -  }
      -}
      -
      -class OAuthServer {
      -  protected $timestamp_threshold = 300; // in seconds, five minutes
      -  protected $version = '1.0';             // hi blaine
      -  protected $signature_methods = array();
      -
      -  protected $data_store;
      -
      -  function __construct($data_store) {
      -    $this->data_store = $data_store;
      -  }
      -
      -  public function add_signature_method($signature_method) {
      -    $this->signature_methods[$signature_method->get_name()] =
      -      $signature_method;
      -  }
      -
      -  // high level functions
      -
      -  /**
      -   * process a request_token request
      -   * returns the request token on success
      -   */
      -  public function fetch_request_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // no token required for the initial token request
      -    $token = NULL;
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $callback = $request->get_parameter('oauth_callback');
      -    $new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * process an access_token request
      -   * returns the access token on success
      -   */
      -  public function fetch_access_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // requires authorized request token
      -    $token = $this->get_token($request, $consumer, "request");
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $verifier = $request->get_parameter('oauth_verifier');
      -    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * verify an api call, checks all the parameters
      -   */
      -  public function verify_request(&$request) {
      -    $this->get_version($request);
      -    $consumer = $this->get_consumer($request);
      -    //echo __file__.__line__.__function__."
      "; var_dump($consumer); die();
      -    $token = $this->get_token($request, $consumer, "access");
      -    $this->check_signature($request, $consumer, $token);
      -    return array($consumer, $token);
      -  }
      -
      -  // Internals from here
      -  /**
      -   * version 1
      -   */
      -  private function get_version(&$request) {
      -    $version = $request->get_parameter("oauth_version");
      -    if (!$version) {
      -      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      -      // Chapter 7.0 ("Accessing Protected Ressources")
      -      $version = '1.0';
      -    }
      -    if ($version !== $this->version) {
      -      throw new OAuthException("OAuth version '$version' not supported");
      -    }
      -    return $version;
      -  }
      -
      -  /**
      -   * figure out the signature with some defaults
      -   */
      -  private function get_signature_method(&$request) {
      -    $signature_method =
      -        @$request->get_parameter("oauth_signature_method");
      -
      -    if (!$signature_method) {
      -      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -      // parameter is required, and we can't just fallback to PLAINTEXT
      -      throw new OAuthException('No signature method parameter. This parameter is required');
      -    }
      -
      -    if (!in_array($signature_method,
      -                  array_keys($this->signature_methods))) {
      -      throw new OAuthException(
      -        "Signature method '$signature_method' not supported " .
      -        "try one of the following: " .
      -        implode(", ", array_keys($this->signature_methods))
      -      );
      -    }
      -    return $this->signature_methods[$signature_method];
      -  }
      -
      -  /**
      -   * try to find the consumer for the provided request's consumer key
      -   */
      -  private function get_consumer(&$request) {
      -    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      -    if (!$consumer_key) {
      -      throw new OAuthException("Invalid consumer key");
      -    }
      -
      -    $consumer = $this->data_store->lookup_consumer($consumer_key);
      -    if (!$consumer) {
      -      throw new OAuthException("Invalid consumer");
      -    }
      -
      -    return $consumer;
      -  }
      -
      -  /**
      -   * try to find the token for the provided request's token key
      -   */
      -  private function get_token(&$request, $consumer, $token_type="access") {
      -    $token_field = @$request->get_parameter('oauth_token');
      -    $token = $this->data_store->lookup_token(
      -      $consumer, $token_type, $token_field
      -    );
      -    if (!$token) {
      -      throw new OAuthException("Invalid $token_type token: $token_field");
      -    }
      -    return $token;
      -  }
      -
      -  /**
      -   * all-in-one function to check the signature on a request
      -   * should guess the signature method appropriately
      -   */
      -  private function check_signature(&$request, $consumer, $token) {
      -    // this should probably be in a different method
      -    $timestamp = @$request->get_parameter('oauth_timestamp');
      -    $nonce = @$request->get_parameter('oauth_nonce');
      -
      -    $this->check_timestamp($timestamp);
      -    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -    $signature_method = $this->get_signature_method($request);
      -
      -    $signature = $request->get_parameter('oauth_signature');
      -    $valid_sig = $signature_method->check_signature(
      -      $request,
      -      $consumer,
      -      $token,
      -      $signature
      -    );
      -	
      -
      -    if (!$valid_sig) {
      -      throw new OAuthException("Invalid signature");
      -    }
      -  }
      -
      -  /**
      -   * check that the timestamp is new enough
      -   */
      -  private function check_timestamp($timestamp) {
      -    if( ! $timestamp )
      -      throw new OAuthException(
      -        'Missing timestamp parameter. The parameter is required'
      -      );
      -    
      -    // verify that timestamp is recentish
      -    $now = time();
      -    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -      throw new OAuthException(
      -        "Expired timestamp, yours $timestamp, ours $now"
      -      );
      -    }
      -  }
      -
      -  /**
      -   * check that the nonce is not repeated
      -   */
      -  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -    if( ! $nonce )
      -      throw new OAuthException(
      -        'Missing nonce parameter. The parameter is required'
      -      );
      -
      -    // verify that the nonce is uniqueish
      -    $found = $this->data_store->lookup_nonce(
      -      $consumer,
      -      $token,
      -      $nonce,
      -      $timestamp
      -    );
      -    if ($found) {
      -      throw new OAuthException("Nonce already used: $nonce");
      -    }
      -  }
      -
      -}
      -
      -class OAuthDataStore {
      -  function lookup_consumer($consumer_key) {
      -    // implement me
      -  }
      -
      -  function lookup_token($consumer, $token_type, $token) {
      -    // implement me
      -  }
      -
      -  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -    // implement me
      -  }
      -
      -  function new_request_token($consumer, $callback = null) {
      -    // return a new token attached to this consumer
      -  }
      -
      -  function new_access_token($token, $consumer, $verifier = null) {
      -    // return a new access token attached to this consumer
      -    // for the user associated with this token if the request token
      -    // is authorized
      -    // should also invalidate the request token
      -  }
      -
      -}
      -
      -class OAuthUtil {
      -  public static function urlencode_rfc3986($input) {
      -  if (is_array($input)) {
      -    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -  } else if (is_scalar($input)) {
      -    return str_replace(
      -      '+',
      -      ' ',
      -      str_replace('%7E', '~', rawurlencode($input))
      -    );
      -  } else {
      -    return '';
      -  }
      -}
      -
      -
      -  // This decode function isn't taking into consideration the above
      -  // modifications to the encoding process. However, this method doesn't
      -  // seem to be used anywhere so leaving it as is.
      -  public static function urldecode_rfc3986($string) {
      -    return urldecode($string);
      -  }
      -
      -  // Utility function for turning the Authorization: header into
      -  // parameters, has to do some unescaping
      -  // Can filter out any non-oauth parameters if needed (default behaviour)
      -  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -    $offset = 0;
      -    $params = array();
      -    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -      $match = $matches[0];
      -      $header_name = $matches[2][0];
      -      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -      }
      -      $offset = $match[1] + strlen($match[0]);
      -    }
      -
      -    if (isset($params['realm'])) {
      -      unset($params['realm']);
      -    }
      -
      -    return $params;
      -  }
      -
      -  // helper to try to sort out headers for people who aren't running apache
      -  public static function get_headers() {
      -    if (function_exists('apache_request_headers')) {
      -      // we need this to get the actual Authorization: header
      -      // because apache tends to tell us it doesn't exist
      -      $headers = apache_request_headers();
      -
      -      // sanitize the output of apache_request_headers because
      -      // we always want the keys to be Cased-Like-This and arh()
      -      // returns the headers in the same case as they are in the
      -      // request
      -      $out = array();
      -      foreach( $headers AS $key => $value ) {
      -        $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("-", " ", $key)))
      -          );
      -        $out[$key] = $value;
      -      }
      -    } else {
      -      // otherwise we don't have apache and are just going to have to hope
      -      // that $_SERVER actually contains what we need
      -      $out = array();
      -      if( isset($_SERVER['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -      if( isset($_ENV['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -      foreach ($_SERVER as $key => $value) {
      -        if (substr($key, 0, 5) == "HTTP_") {
      -          // this is chaos, basically it is just there to capitalize the first
      -          // letter of every word that is not an initial HTTP and strip HTTP
      -          // code from przemek
      -          $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -          );
      -          $out[$key] = $value;
      -        }
      -      }
      -    }
      -    return $out;
      -  }
      -
      -  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -  // parameters like this
      -  // array('a' => array('b','c'), 'd' => 'e')
      -  public static function parse_parameters( $input ) {
      -    if (!isset($input) || !$input) return array();
      -
      -    $pairs = explode('&', $input);
      -
      -    $parsed_parameters = array();
      -    foreach ($pairs as $pair) {
      -      $split = explode('=', $pair, 2);
      -      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -      if (isset($parsed_parameters[$parameter])) {
      -        // We have already recieved parameter(s) with this name, so add to the list
      -        // of parameters with this name
      -
      -        if (is_scalar($parsed_parameters[$parameter])) {
      -          // This is the first duplicate, so transform scalar (string) into an array
      -          // so we can add the duplicates
      -          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -        }
      -
      -        $parsed_parameters[$parameter][] = $value;
      -      } else {
      -        $parsed_parameters[$parameter] = $value;
      -      }
      -    }
      -    return $parsed_parameters;
      -  }
      -
      -  public static function build_http_query($params) {
      -    if (!$params) return '';
      -
      -    // Urlencode both keys and values
      -    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -    $params = array_combine($keys, $values);
      -
      -    // Parameters are sorted by name, using lexicographical byte value ordering.
      -    // Ref: Spec: 9.1.1 (1)
      -    uksort($params, 'strcmp');
      -
      -    $pairs = array();
      -    foreach ($params as $parameter => $value) {
      -      if (is_array($value)) {
      -        // If two or more parameters share the same name, they are sorted by their value
      -        // Ref: Spec: 9.1.1 (1)
      -        natsort($value);
      -        foreach ($value as $duplicate_value) {
      -          $pairs[] = $parameter . '=' . $duplicate_value;
      -        }
      -      } else {
      -        $pairs[] = $parameter . '=' . $value;
      -      }
      -    }
      -    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -    // Each name-value pair is separated by an '&' character (ASCII code 38)
      -    return implode('&', $pairs);
      -  }
      -}
      -
      -?>
      diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php
      deleted file mode 100644
      index beed59e7..00000000
      --- a/statusnet/library/statusnetoauth.php
      +++ /dev/null
      @@ -1,102 +0,0 @@
      -get($this->host . 'statusnet/config.json');
      -		return $config->site->textlimit;
      -	}
      -
      -	function accessTokenURL()
      -	{
      -		return $this->host . 'oauth/access_token';
      -	}
      -
      -	function authenticateURL()
      -	{
      -		return $this->host . 'oauth/authenticate';
      -	}
      -
      -	function authorizeURL()
      -	{
      -		return $this->host . 'oauth/authorize';
      -	}
      -
      -	function requestTokenURL()
      -	{
      -		return $this->host . 'oauth/request_token';
      -	}
      -
      -	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      -	{
      -		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      -		$this->host = $apipath;
      -	}
      -
      -	/**
      -	 * Make an HTTP request
      -	 *
      -	 * Copied here from the TwitterOAuth library and complemented by applying the proxy settings of Friendica
      -	 *
      -	 * @param string $method
      -	 * @param string $host
      -	 * @param string $path
      -	 * @param array  $parameters
      -	 *
      -	 * @return array|object API results
      -	 */
      -	function http($url, $method, $postfields = NULL)
      -	{
      -		$this->http_info = [];
      -		$ci = curl_init();
      -		/* Curl settings */
      -		$prx = Config::get('system', 'proxy');
      -		if (strlen($prx)) {
      -			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      -			curl_setopt($ci, CURLOPT_PROXY, $prx);
      -			$prxusr = Config::get('system', 'proxyuser');
      -			if (strlen($prxusr)) {
      -				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      -			}
      -		}
      -		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      -		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      -		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -		switch ($method) {
      -			case 'POST':
      -				curl_setopt($ci, CURLOPT_POST, TRUE);
      -				if (!empty($postfields)) {
      -					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -				}
      -				break;
      -			case 'DELETE':
      -				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -				if (!empty($postfields)) {
      -					$url = "{$url}?{$postfields}";
      -				}
      -		}
      -
      -		curl_setopt($ci, CURLOPT_URL, $url);
      -		$response = curl_exec($ci);
      -		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -		$this->url = $url;
      -		curl_close($ci);
      -		return $response;
      -	}
      -}
      diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php
      deleted file mode 100644
      index 323156eb..00000000
      --- a/statusnet/library/twitteroauth.php
      +++ /dev/null
      @@ -1,280 +0,0 @@
      -http_status;
      -	}
      -
      -	function lastAPICall()
      -	{
      -		return $this->last_api_call;
      -	}
      -
      -	/**
      -	 * construct TwitterOAuth object
      -	 */
      -	function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      -	{
      -		$this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      -		$this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      -		if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      -			$this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      -		} else {
      -			$this->token = NULL;
      -		}
      -	}
      -
      -	/**
      -	 * Get a request_token from Twitter
      -	 *
      -	 * @returns a key/value array containing oauth_token and oauth_token_secret
      -	 */
      -	function getRequestToken($oauth_callback = NULL)
      -	{
      -		$parameters = array();
      -		if (!empty($oauth_callback)) {
      -			$parameters['oauth_callback'] = $oauth_callback;
      -		}
      -		$request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      -		$token = OAuthUtil::parse_parameters($request);
      -		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -		return $token;
      -	}
      -
      -	/**
      -	 * Get the authorize URL
      -	 *
      -	 * @returns a string
      -	 */
      -	function getAuthorizeURL($token, $sign_in_with_twitter = TRUE)
      -	{
      -		if (is_array($token)) {
      -			$token = $token['oauth_token'];
      -		}
      -		if (empty($sign_in_with_twitter)) {
      -			return $this->authorizeURL() . "?oauth_token={$token}";
      -		} else {
      -			return $this->authenticateURL() . "?oauth_token={$token}";
      -		}
      -	}
      -
      -	/**
      -	 * Exchange request token and secret for an access token and
      -	 * secret, to sign API calls.
      -	 *
      -	 * @returns array("oauth_token" => "the-access-token",
      -	 *                "oauth_token_secret" => "the-access-secret",
      -	 *                "user_id" => "9436992",
      -	 *                "screen_name" => "abraham")
      -	 */
      -	function getAccessToken($oauth_verifier = FALSE)
      -	{
      -		$parameters = array();
      -		if (!empty($oauth_verifier)) {
      -			$parameters['oauth_verifier'] = $oauth_verifier;
      -		}
      -		$request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      -		$token = OAuthUtil::parse_parameters($request);
      -		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -		return $token;
      -	}
      -
      -	/**
      -	 * One time exchange of username and password for access token and secret.
      -	 *
      -	 * @returns array("oauth_token" => "the-access-token",
      -	 *                "oauth_token_secret" => "the-access-secret",
      -	 *                "user_id" => "9436992",
      -	 *                "screen_name" => "abraham",
      -	 *                "x_auth_expires" => "0")
      -	 */
      -	function getXAuthToken($username, $password)
      -	{
      -		$parameters = array();
      -		$parameters['x_auth_username'] = $username;
      -		$parameters['x_auth_password'] = $password;
      -		$parameters['x_auth_mode'] = 'client_auth';
      -		$request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      -		$token = OAuthUtil::parse_parameters($request);
      -		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -		return $token;
      -	}
      -
      -	/**
      -	 * GET wrapper for oAuthRequest.
      -	 */
      -	function get($url, $parameters = array())
      -	{
      -		$response = $this->oAuthRequest($url, 'GET', $parameters);
      -		if ($this->format === 'json' && $this->decode_json) {
      -			return json_decode($response);
      -		}
      -		return $response;
      -	}
      -
      -	/**
      -	 * POST wrapper for oAuthRequest.
      -	 */
      -	function post($url, $parameters = array())
      -	{
      -		$response = $this->oAuthRequest($url, 'POST', $parameters);
      -		if ($this->format === 'json' && $this->decode_json) {
      -			return json_decode($response);
      -		}
      -		return $response;
      -	}
      -
      -	/**
      -	 * DELETE wrapper for oAuthReqeust.
      -	 */
      -	function delete($url, $parameters = array())
      -	{
      -		$response = $this->oAuthRequest($url, 'DELETE', $parameters);
      -		if ($this->format === 'json' && $this->decode_json) {
      -			return json_decode($response);
      -		}
      -		return $response;
      -	}
      -
      -	/**
      -	 * Format and sign an OAuth / API request
      -	 */
      -	function oAuthRequest($url, $method, $parameters)
      -	{
      -		if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      -			$url = "{$this->host}{$url}.{$this->format}";
      -		}
      -		$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      -		$request->sign_request($this->sha1_method, $this->consumer, $this->token);
      -		switch ($method) {
      -			case 'GET':
      -				return $this->http($request->to_url(), 'GET');
      -			case 'UPLOAD':
      -				return $this->http($request->get_normalized_http_url(), 'POST', $request->to_postdata(true));
      -			default:
      -				return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      -		}
      -	}
      -
      -	/**
      -	 * Make an HTTP request
      -	 *
      -	 * @return API results
      -	 */
      -	function http($url, $method, $postfields = NULL)
      -	{
      -		$this->http_info = array();
      -		$ci = curl_init();
      -		/* Curl settings */
      -		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -		curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      -		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -		curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      -		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -		switch ($method) {
      -			case 'POST':
      -				curl_setopt($ci, CURLOPT_POST, TRUE);
      -				if (!empty($postfields)) {
      -					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -				}
      -				break;
      -			case 'DELETE':
      -				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -				if (!empty($postfields)) {
      -					$url = "{$url}?{$postfields}";
      -				}
      -		}
      -
      -		curl_setopt($ci, CURLOPT_URL, $url);
      -		$response = curl_exec($ci);
      -		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -		$this->url = $url;
      -		curl_close($ci);
      -		return $response;
      -	}
      -
      -	/**
      -	 * Get the header info to store.
      -	 */
      -	function getHeader($ch, $header)
      -	{
      -		$i = strpos($header, ':');
      -		if (!empty($i)) {
      -			$key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      -			$value = trim(substr($header, $i + 2));
      -			$this->http_header[$key] = $value;
      -		}
      -		return strlen($header);
      -	}
      -}
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index 7ef171f7..7308f223 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -33,9 +33,16 @@
        * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        *
        */
      +/*
      + * We have to alter the TwitterOAuth class a little bit to work with any GNU Social
      + * installation abroad. Basically it's only make the API path variable and be happy.
      + *
      + * Thank you guys for the Twitter compatible API!
      + */
      +
       define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes
       
      -require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php';
      +require_once 'library/twitteroauth.php';
       require_once 'include/enotify.php';
       
       use Friendica\App;
      @@ -53,6 +60,94 @@ use Friendica\Model\Photo;
       use Friendica\Model\User;
       use Friendica\Util\Network;
       
      +class StatusNetOAuth extends TwitterOAuth
      +{
      +	function get_maxlength()
      +	{
      +		$config = $this->get($this->host . 'statusnet/config.json');
      +		return $config->site->textlimit;
      +	}
      +
      +	function accessTokenURL()
      +	{
      +		return $this->host . 'oauth/access_token';
      +	}
      +
      +	function authenticateURL()
      +	{
      +		return $this->host . 'oauth/authenticate';
      +	}
      +
      +	function authorizeURL()
      +	{
      +		return $this->host . 'oauth/authorize';
      +	}
      +
      +	function requestTokenURL()
      +	{
      +		return $this->host . 'oauth/request_token';
      +	}
      +
      +	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      +	{
      +		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      +		$this->host = $apipath;
      +	}
      +
      +	/**
      +	 * Make an HTTP request
      +	 *
      +	 * @return API results
      +	 *
      +	 * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica
      +	 */
      +	function http($url, $method, $postfields = NULL)
      +	{
      +		$this->http_info = [];
      +		$ci = curl_init();
      +		/* Curl settings */
      +		$prx = Config::get('system', 'proxy');
      +		if (strlen($prx)) {
      +			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      +			curl_setopt($ci, CURLOPT_PROXY, $prx);
      +			$prxusr = Config::get('system', 'proxyuser');
      +			if (strlen($prxusr)) {
      +				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      +			}
      +		}
      +		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      +		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      +		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +		switch ($method) {
      +			case 'POST':
      +				curl_setopt($ci, CURLOPT_POST, TRUE);
      +				if (!empty($postfields)) {
      +					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +				}
      +				break;
      +			case 'DELETE':
      +				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +				if (!empty($postfields)) {
      +					$url = "{$url}?{$postfields}";
      +				}
      +		}
      +
      +		curl_setopt($ci, CURLOPT_URL, $url);
      +		$response = curl_exec($ci);
      +		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +		$this->url = $url;
      +		curl_close($ci);
      +		return $response;
      +	}
      +}
      +
       function statusnet_install()
       {
       	//  we need some hooks, for the configuration and for sending tweets
      @@ -576,7 +671,7 @@ function statusnet_post_hook(App $a, &$b)
       			$postdata = ["status" => $msg];
       		}
       
      -		// and now send it :-)
      +		// and now dent it :-)
       		if (strlen($msg)) {
       			if ($iscomment) {
       				$postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength);
      @@ -584,7 +679,7 @@ function statusnet_post_hook(App $a, &$b)
       			}
       
       			// New code that is able to post pictures
      -			require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
      +			require_once "addon/statusnet/codebird.php";
       			$cb = \CodebirdSN\CodebirdSN::getInstance();
       			$cb->setAPIEndpoint($api);
       			$cb->setConsumerKey($ckey, $csecret);
      @@ -1036,9 +1131,9 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
       	$otoken  = PConfig::get($uid, 'statusnet', 'oauthtoken');
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       
      -	require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
      +	require_once "addon/statusnet/codebird.php";
       
      -	$cb = \CodebirdSN\CodebirdSN::getInstance();
      +	$cb = \Codebird\Codebird::getInstance();
       	$cb->setConsumerKey($ckey, $csecret);
       	$cb->setToken($otoken, $osecret);
       
      @@ -1308,6 +1403,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
       
       	logger("statusnet_fetchhometimeline: Fetching for user " . $uid, LOGGER_DEBUG);
       
      +	require_once 'library/twitteroauth.php';
       	require_once 'include/items.php';
       
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
      @@ -1508,6 +1604,8 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       	$own_url = PConfig::get($uid, 'statusnet', 'own_url');
       
      +	require_once 'library/twitteroauth.php';
      +
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       	$parameters["count"] = 200;
      @@ -1658,6 +1756,8 @@ function statusnet_fetch_own_contact(App $a, $uid)
       	$contact_id = 0;
       
       	if ($own_url == "") {
      +		require_once 'library/twitteroauth.php';
      +
       		$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       		// Fetching user data
      diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php
      index 8f258f56..20a27f45 100644
      --- a/tumblr/tumblr.php
      +++ b/tumblr/tumblr.php
      @@ -7,7 +7,8 @@
        * Author: Michael Vogel 
        */
       
      -require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'tumblroauth.php';
      +require_once 'library/OAuth1.php';
      +require_once 'addon/tumblr/tumblroauth/tumblroauth.php';
       
       use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
      diff --git a/tumblr/library/OAuth1.php b/tumblr/tumblroauth/OAuth.php
      similarity index 96%
      rename from tumblr/library/OAuth1.php
      rename to tumblr/tumblroauth/OAuth.php
      index 67a94c47..982aaa5d 100644
      --- a/tumblr/library/OAuth1.php
      +++ b/tumblr/tumblroauth/OAuth.php
      @@ -1,874 +1,874 @@
      -key = $key;
      -    $this->secret = $secret;
      -    $this->callback_url = $callback_url;
      -  }
      -
      -  function __toString() {
      -    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      -  }
      -}
      -
      -class OAuthToken {
      -  // access tokens and request tokens
      -  public $key;
      -  public $secret;
      -
      -  /**
      -   * key = the token
      -   * secret = the token secret
      -   */
      -  function __construct($key, $secret) {
      -    $this->key = $key;
      -    $this->secret = $secret;
      -  }
      -
      -  /**
      -   * generates the basic string serialization of a token that a server
      -   * would respond to request_token and access_token calls with
      -   */
      -  function to_string() {
      -    return "oauth_token=" .
      -           OAuthUtil::urlencode_rfc3986($this->key) .
      -           "&oauth_token_secret=" .
      -           OAuthUtil::urlencode_rfc3986($this->secret);
      -  }
      -
      -  function __toString() {
      -    return $this->to_string();
      -  }
      -}
      -
      -/**
      - * A class for implementing a Signature Method
      - * See section 9 ("Signing Requests") in the spec
      - */
      -abstract class OAuthSignatureMethod {
      -  /**
      -   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      -   * @return string
      -   */
      -  abstract public function get_name();
      -
      -  /**
      -   * Build up the signature
      -   * NOTE: The output of this function MUST NOT be urlencoded.
      -   * the encoding is handled in OAuthRequest when the final
      -   * request is serialized
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @return string
      -   */
      -  abstract public function build_signature($request, $consumer, $token);
      -
      -  /**
      -   * Verifies that a given signature is correct
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @param string $signature
      -   * @return bool
      -   */
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $built = $this->build_signature($request, $consumer, $token);
      -    return $built == $signature;
      -  }
      -}
      -
      -/**
      - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      - * where the Signature Base String is the text and the key is the concatenated values (each first 
      - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      - * character (ASCII code 38) even if empty.
      - *   - Chapter 9.2 ("HMAC-SHA1")
      - */
      -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -  function get_name() {
      -    return "HMAC-SHA1";
      -  }
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -
      -    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -  }
      -}
      -
      -/**
      - * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      - * over a secure channel such as HTTPS. It does not use the Signature Base String.
      - *   - Chapter 9.4 ("PLAINTEXT")
      - */
      -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "PLAINTEXT";
      -  }
      -
      -  /**
      -   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      -   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      -   * empty. The result MUST be encoded again.
      -   *   - Chapter 9.4.1 ("Generating Signatures")
      -   *
      -   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -   * OAuthRequest handles this!
      -   */
      -  public function build_signature($request, $consumer, $token) {
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -    $request->base_string = $key;
      -
      -    return $key;
      -  }
      -}
      -
      -/**
      - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      - * verified way to the Service Provider, in a manner which is beyond the scope of this 
      - * specification.
      - *   - Chapter 9.3 ("RSA-SHA1")
      - */
      -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "RSA-SHA1";
      -  }
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  // (2) fetch via http using a url provided by the requester
      -  // (3) some sort of specific discovery code based on request
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_public_cert(&$request);
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_private_cert(&$request);
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    // Fetch the private key cert based on the request
      -    $cert = $this->fetch_private_cert($request);
      -
      -    // Pull the private key ID from the certificate
      -    $privatekeyid = openssl_get_privatekey($cert);
      -
      -    // Sign using the key
      -    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($privatekeyid);
      -
      -    return base64_encode($signature);
      -  }
      -
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $decoded_sig = base64_decode($signature);
      -
      -    $base_string = $request->get_signature_base_string();
      -
      -    // Fetch the public key cert based on the request
      -    $cert = $this->fetch_public_cert($request);
      -
      -    // Pull the public key ID from the certificate
      -    $publickeyid = openssl_get_publickey($cert);
      -
      -    // Check the computed signature against the one passed in the query
      -    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($publickeyid);
      -
      -    return $ok == 1;
      -  }
      -}
      -
      -class OAuthRequest {
      -  private $parameters;
      -  private $http_method;
      -  private $http_url;
      -  // for debug purposes
      -  public $base_string;
      -  public static $version = '1.0';
      -  public static $POST_INPUT = 'php://input';
      -
      -  function __construct($http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -    $this->parameters = $parameters;
      -    $this->http_method = $http_method;
      -    $this->http_url = $http_url;
      -  }
      -
      -
      -  /**
      -   * attempt to build up a request from what was passed to the server
      -   */
      -  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -              ? 'http'
      -              : 'https';
      -    @$http_url or $http_url = $scheme .
      -                              '://' . $_SERVER['HTTP_HOST'] .
      -                              ':' .
      -                              $_SERVER['SERVER_PORT'] .
      -                              $_SERVER['REQUEST_URI'];
      -    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -    // We weren't handed any parameters, so let's find the ones relevant to
      -    // this request.
      -    // If you run XML-RPC or similar you should use this to provide your own
      -    // parsed parameter-list
      -    if (!$parameters) {
      -      // Find request headers
      -      $request_headers = OAuthUtil::get_headers();
      -
      -      // Parse the query-string to find GET parameters
      -      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -      // It's a POST request of the proper content-type, so parse POST
      -      // parameters and add those overriding any duplicates from GET
      -      if ($http_method == "POST"
      -          && @strstr($request_headers["Content-Type"],
      -                     "application/x-www-form-urlencoded")
      -          ) {
      -        $post_data = OAuthUtil::parse_parameters(
      -          file_get_contents(self::$POST_INPUT)
      -        );
      -        $parameters = array_merge($parameters, $post_data);
      -      }
      -
      -      // We have a Authorization-header with OAuth data. Parse the header
      -      // and add those overriding any duplicates from GET or POST
      -      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -        $header_parameters = OAuthUtil::split_header(
      -          $request_headers['Authorization']
      -        );
      -        $parameters = array_merge($parameters, $header_parameters);
      -      }
      -
      -    }
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  /**
      -   * pretty much a helper function to set up the request
      -   */
      -  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $defaults = array("oauth_version" => OAuthRequest::$version,
      -                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      -                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -                      "oauth_consumer_key" => $consumer->key);
      -    if ($token)
      -      $defaults['oauth_token'] = $token->key;
      -
      -    $parameters = array_merge($defaults, $parameters);
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  public function set_parameter($name, $value, $allow_duplicates = true) {
      -    if ($allow_duplicates && isset($this->parameters[$name])) {
      -      // We have already added parameter(s) with this name, so add to the list
      -      if (is_scalar($this->parameters[$name])) {
      -        // This is the first duplicate, so transform scalar (string)
      -        // into an array so we can add the duplicates
      -        $this->parameters[$name] = array($this->parameters[$name]);
      -      }
      -
      -      $this->parameters[$name][] = $value;
      -    } else {
      -      $this->parameters[$name] = $value;
      -    }
      -  }
      -
      -  public function get_parameter($name) {
      -    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -  }
      -
      -  public function get_parameters() {
      -    return $this->parameters;
      -  }
      -
      -  public function unset_parameter($name) {
      -    unset($this->parameters[$name]);
      -  }
      -
      -  /**
      -   * The request parameters, sorted and concatenated into a normalized string.
      -   * @return string
      -   */
      -  public function get_signable_parameters() {
      -    // Grab all parameters
      -    $params = $this->parameters;
      -
      -    // Remove oauth_signature if present
      -    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -    if (isset($params['oauth_signature'])) {
      -      unset($params['oauth_signature']);
      -    }
      -
      -    return OAuthUtil::build_http_query($params);
      -  }
      -
      -  /**
      -   * Returns the base string of this request
      -   *
      -   * The base string defined as the method, the url
      -   * and the parameters (normalized), each urlencoded
      -   * and the concated with &.
      -   */
      -  public function get_signature_base_string() {
      -    $parts = array(
      -      $this->get_normalized_http_method(),
      -      $this->get_normalized_http_url(),
      -      $this->get_signable_parameters()
      -    );
      -
      -    $parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -    return implode('&', $parts);
      -  }
      -
      -  /**
      -   * just uppercases the http method
      -   */
      -  public function get_normalized_http_method() {
      -    return strtoupper($this->http_method);
      -  }
      -
      -  /**
      -   * parses the url and rebuilds it to be
      -   * scheme://host/path
      -   */
      -  public function get_normalized_http_url() {
      -    $parts = parse_url($this->http_url);
      -
      -    $port = @$parts['port'];
      -    $scheme = $parts['scheme'];
      -    $host = $parts['host'];
      -    $path = @$parts['path'];
      -
      -    $port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -    if (($scheme == 'https' && $port != '443')
      -        || ($scheme == 'http' && $port != '80')) {
      -      $host = "$host:$port";
      -    }
      -    return "$scheme://$host$path";
      -  }
      -
      -  /**
      -   * builds a url usable for a GET request
      -   */
      -  public function to_url() {
      -    $post_data = $this->to_postdata();
      -    $out = $this->get_normalized_http_url();
      -    if ($post_data) {
      -      $out .= '?'.$post_data;
      -    }
      -    return $out;
      -  }
      -
      -  /**
      -   * builds the data one would send in a POST request
      -   */
      -  public function to_postdata() {
      -    return OAuthUtil::build_http_query($this->parameters);
      -  }
      -
      -  /**
      -   * builds the Authorization: header
      -   */
      -  public function to_header($realm=null) {
      -    $first = true;
      -	if($realm) {
      -      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -      $first = false;
      -    } else
      -      $out = 'Authorization: OAuth';
      -
      -    $total = array();
      -    foreach ($this->parameters as $k => $v) {
      -      if (substr($k, 0, 5) != "oauth") continue;
      -      if (is_array($v)) {
      -        throw new OAuthException('Arrays not supported in headers');
      -      }
      -      $out .= ($first) ? ' ' : ',';
      -      $out .= OAuthUtil::urlencode_rfc3986($k) .
      -              '="' .
      -              OAuthUtil::urlencode_rfc3986($v) .
      -              '"';
      -      $first = false;
      -    }
      -    return $out;
      -  }
      -
      -  public function __toString() {
      -    return $this->to_url();
      -  }
      -
      -
      -  public function sign_request($signature_method, $consumer, $token) {
      -    $this->set_parameter(
      -      "oauth_signature_method",
      -      $signature_method->get_name(),
      -      false
      -    );
      -    $signature = $this->build_signature($signature_method, $consumer, $token);
      -    $this->set_parameter("oauth_signature", $signature, false);
      -  }
      -
      -  public function build_signature($signature_method, $consumer, $token) {
      -    $signature = $signature_method->build_signature($this, $consumer, $token);
      -    return $signature;
      -  }
      -
      -  /**
      -   * util function: current timestamp
      -   */
      -  private static function generate_timestamp() {
      -    return time();
      -  }
      -
      -  /**
      -   * util function: current nonce
      -   */
      -  private static function generate_nonce() {
      -    $mt = microtime();
      -    $rand = mt_rand();
      -
      -    return md5($mt . $rand); // md5s look nicer than numbers
      -  }
      -}
      -
      -class OAuthServer {
      -  protected $timestamp_threshold = 300; // in seconds, five minutes
      -  protected $version = '1.0';             // hi blaine
      -  protected $signature_methods = array();
      -
      -  protected $data_store;
      -
      -  function __construct($data_store) {
      -    $this->data_store = $data_store;
      -  }
      -
      -  public function add_signature_method($signature_method) {
      -    $this->signature_methods[$signature_method->get_name()] =
      -      $signature_method;
      -  }
      -
      -  // high level functions
      -
      -  /**
      -   * process a request_token request
      -   * returns the request token on success
      -   */
      -  public function fetch_request_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // no token required for the initial token request
      -    $token = NULL;
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $callback = $request->get_parameter('oauth_callback');
      -    $new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * process an access_token request
      -   * returns the access token on success
      -   */
      -  public function fetch_access_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // requires authorized request token
      -    $token = $this->get_token($request, $consumer, "request");
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $verifier = $request->get_parameter('oauth_verifier');
      -    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * verify an api call, checks all the parameters
      -   */
      -  public function verify_request(&$request) {
      -    $this->get_version($request);
      -    $consumer = $this->get_consumer($request);
      -    $token = $this->get_token($request, $consumer, "access");
      -    $this->check_signature($request, $consumer, $token);
      -    return array($consumer, $token);
      -  }
      -
      -  // Internals from here
      -  /**
      -   * version 1
      -   */
      -  private function get_version(&$request) {
      -    $version = $request->get_parameter("oauth_version");
      -    if (!$version) {
      -      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      -      // Chapter 7.0 ("Accessing Protected Ressources")
      -      $version = '1.0';
      -    }
      -    if ($version !== $this->version) {
      -      throw new OAuthException("OAuth version '$version' not supported");
      -    }
      -    return $version;
      -  }
      -
      -  /**
      -   * figure out the signature with some defaults
      -   */
      -  private function get_signature_method(&$request) {
      -    $signature_method =
      -        @$request->get_parameter("oauth_signature_method");
      -
      -    if (!$signature_method) {
      -      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -      // parameter is required, and we can't just fallback to PLAINTEXT
      -      throw new OAuthException('No signature method parameter. This parameter is required');
      -    }
      -
      -    if (!in_array($signature_method,
      -                  array_keys($this->signature_methods))) {
      -      throw new OAuthException(
      -        "Signature method '$signature_method' not supported " .
      -        "try one of the following: " .
      -        implode(", ", array_keys($this->signature_methods))
      -      );
      -    }
      -    return $this->signature_methods[$signature_method];
      -  }
      -
      -  /**
      -   * try to find the consumer for the provided request's consumer key
      -   */
      -  private function get_consumer(&$request) {
      -    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      -    if (!$consumer_key) {
      -      throw new OAuthException("Invalid consumer key");
      -    }
      -
      -    $consumer = $this->data_store->lookup_consumer($consumer_key);
      -    if (!$consumer) {
      -      throw new OAuthException("Invalid consumer");
      -    }
      -
      -    return $consumer;
      -  }
      -
      -  /**
      -   * try to find the token for the provided request's token key
      -   */
      -  private function get_token(&$request, $consumer, $token_type="access") {
      -    $token_field = @$request->get_parameter('oauth_token');
      -    $token = $this->data_store->lookup_token(
      -      $consumer, $token_type, $token_field
      -    );
      -    if (!$token) {
      -      throw new OAuthException("Invalid $token_type token: $token_field");
      -    }
      -    return $token;
      -  }
      -
      -  /**
      -   * all-in-one function to check the signature on a request
      -   * should guess the signature method appropriately
      -   */
      -  private function check_signature(&$request, $consumer, $token) {
      -    // this should probably be in a different method
      -    $timestamp = @$request->get_parameter('oauth_timestamp');
      -    $nonce = @$request->get_parameter('oauth_nonce');
      -
      -    $this->check_timestamp($timestamp);
      -    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -    $signature_method = $this->get_signature_method($request);
      -
      -    $signature = $request->get_parameter('oauth_signature');
      -    $valid_sig = $signature_method->check_signature(
      -      $request,
      -      $consumer,
      -      $token,
      -      $signature
      -    );
      -
      -    if (!$valid_sig) {
      -      throw new OAuthException("Invalid signature");
      -    }
      -  }
      -
      -  /**
      -   * check that the timestamp is new enough
      -   */
      -  private function check_timestamp($timestamp) {
      -    if( ! $timestamp )
      -      throw new OAuthException(
      -        'Missing timestamp parameter. The parameter is required'
      -      );
      -    
      -    // verify that timestamp is recentish
      -    $now = time();
      -    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -      throw new OAuthException(
      -        "Expired timestamp, yours $timestamp, ours $now"
      -      );
      -    }
      -  }
      -
      -  /**
      -   * check that the nonce is not repeated
      -   */
      -  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -    if( ! $nonce )
      -      throw new OAuthException(
      -        'Missing nonce parameter. The parameter is required'
      -      );
      -
      -    // verify that the nonce is uniqueish
      -    $found = $this->data_store->lookup_nonce(
      -      $consumer,
      -      $token,
      -      $nonce,
      -      $timestamp
      -    );
      -    if ($found) {
      -      throw new OAuthException("Nonce already used: $nonce");
      -    }
      -  }
      -
      -}
      -
      -class OAuthDataStore {
      -  function lookup_consumer($consumer_key) {
      -    // implement me
      -  }
      -
      -  function lookup_token($consumer, $token_type, $token) {
      -    // implement me
      -  }
      -
      -  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -    // implement me
      -  }
      -
      -  function new_request_token($consumer, $callback = null) {
      -    // return a new token attached to this consumer
      -  }
      -
      -  function new_access_token($token, $consumer, $verifier = null) {
      -    // return a new access token attached to this consumer
      -    // for the user associated with this token if the request token
      -    // is authorized
      -    // should also invalidate the request token
      -  }
      -
      -}
      -
      -class OAuthUtil {
      -  public static function urlencode_rfc3986($input) {
      -  if (is_array($input)) {
      -    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -  } else if (is_scalar($input)) {
      -    return str_replace(
      -      '+',
      -      ' ',
      -      str_replace('%7E', '~', rawurlencode($input))
      -    );
      -  } else {
      -    return '';
      -  }
      -}
      -
      -
      -  // This decode function isn't taking into consideration the above
      -  // modifications to the encoding process. However, this method doesn't
      -  // seem to be used anywhere so leaving it as is.
      -  public static function urldecode_rfc3986($string) {
      -    return urldecode($string);
      -  }
      -
      -  // Utility function for turning the Authorization: header into
      -  // parameters, has to do some unescaping
      -  // Can filter out any non-oauth parameters if needed (default behaviour)
      -  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -    $offset = 0;
      -    $params = array();
      -    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -      $match = $matches[0];
      -      $header_name = $matches[2][0];
      -      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -      }
      -      $offset = $match[1] + strlen($match[0]);
      -    }
      -
      -    if (isset($params['realm'])) {
      -      unset($params['realm']);
      -    }
      -
      -    return $params;
      -  }
      -
      -  // helper to try to sort out headers for people who aren't running apache
      -  public static function get_headers() {
      -    if (function_exists('apache_request_headers')) {
      -      // we need this to get the actual Authorization: header
      -      // because apache tends to tell us it doesn't exist
      -      $headers = apache_request_headers();
      -
      -      // sanitize the output of apache_request_headers because
      -      // we always want the keys to be Cased-Like-This and arh()
      -      // returns the headers in the same case as they are in the
      -      // request
      -      $out = array();
      -      foreach( $headers AS $key => $value ) {
      -        $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("-", " ", $key)))
      -          );
      -        $out[$key] = $value;
      -      }
      -    } else {
      -      // otherwise we don't have apache and are just going to have to hope
      -      // that $_SERVER actually contains what we need
      -      $out = array();
      -      if( isset($_SERVER['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -      if( isset($_ENV['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -      foreach ($_SERVER as $key => $value) {
      -        if (substr($key, 0, 5) == "HTTP_") {
      -          // this is chaos, basically it is just there to capitalize the first
      -          // letter of every word that is not an initial HTTP and strip HTTP
      -          // code from przemek
      -          $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -          );
      -          $out[$key] = $value;
      -        }
      -      }
      -    }
      -    return $out;
      -  }
      -
      -  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -  // parameters like this
      -  // array('a' => array('b','c'), 'd' => 'e')
      -  public static function parse_parameters( $input ) {
      -    if (!isset($input) || !$input) return array();
      -
      -    $pairs = explode('&', $input);
      -
      -    $parsed_parameters = array();
      -    foreach ($pairs as $pair) {
      -      $split = explode('=', $pair, 2);
      -      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -      if (isset($parsed_parameters[$parameter])) {
      -        // We have already recieved parameter(s) with this name, so add to the list
      -        // of parameters with this name
      -
      -        if (is_scalar($parsed_parameters[$parameter])) {
      -          // This is the first duplicate, so transform scalar (string) into an array
      -          // so we can add the duplicates
      -          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -        }
      -
      -        $parsed_parameters[$parameter][] = $value;
      -      } else {
      -        $parsed_parameters[$parameter] = $value;
      -      }
      -    }
      -    return $parsed_parameters;
      -  }
      -
      -  public static function build_http_query($params) {
      -    if (!$params) return '';
      -
      -    // Urlencode both keys and values
      -    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -    $params = array_combine($keys, $values);
      -
      -    // Parameters are sorted by name, using lexicographical byte value ordering.
      -    // Ref: Spec: 9.1.1 (1)
      -    uksort($params, 'strcmp');
      -
      -    $pairs = array();
      -    foreach ($params as $parameter => $value) {
      -      if (is_array($value)) {
      -        // If two or more parameters share the same name, they are sorted by their value
      -        // Ref: Spec: 9.1.1 (1)
      -        natsort($value);
      -        foreach ($value as $duplicate_value) {
      -          $pairs[] = $parameter . '=' . $duplicate_value;
      -        }
      -      } else {
      -        $pairs[] = $parameter . '=' . $value;
      -      }
      -    }
      -    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -    // Each name-value pair is separated by an '&' character (ASCII code 38)
      -    return implode('&', $pairs);
      -  }
      -}
      -
      -?>
      +key = $key;
      +    $this->secret = $secret;
      +    $this->callback_url = $callback_url;
      +  }
      +
      +  function __toString() {
      +    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      +  }
      +}
      +
      +class OAuthToken {
      +  // access tokens and request tokens
      +  public $key;
      +  public $secret;
      +
      +  /**
      +   * key = the token
      +   * secret = the token secret
      +   */
      +  function __construct($key, $secret) {
      +    $this->key = $key;
      +    $this->secret = $secret;
      +  }
      +
      +  /**
      +   * generates the basic string serialization of a token that a server
      +   * would respond to request_token and access_token calls with
      +   */
      +  function to_string() {
      +    return "oauth_token=" .
      +           OAuthUtil::urlencode_rfc3986($this->key) .
      +           "&oauth_token_secret=" .
      +           OAuthUtil::urlencode_rfc3986($this->secret);
      +  }
      +
      +  function __toString() {
      +    return $this->to_string();
      +  }
      +}
      +
      +/**
      + * A class for implementing a Signature Method
      + * See section 9 ("Signing Requests") in the spec
      + */
      +abstract class OAuthSignatureMethod {
      +  /**
      +   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      +   * @return string
      +   */
      +  abstract public function get_name();
      +
      +  /**
      +   * Build up the signature
      +   * NOTE: The output of this function MUST NOT be urlencoded.
      +   * the encoding is handled in OAuthRequest when the final
      +   * request is serialized
      +   * @param OAuthRequest $request
      +   * @param OAuthConsumer $consumer
      +   * @param OAuthToken $token
      +   * @return string
      +   */
      +  abstract public function build_signature($request, $consumer, $token);
      +
      +  /**
      +   * Verifies that a given signature is correct
      +   * @param OAuthRequest $request
      +   * @param OAuthConsumer $consumer
      +   * @param OAuthToken $token
      +   * @param string $signature
      +   * @return bool
      +   */
      +  public function check_signature($request, $consumer, $token, $signature) {
      +    $built = $this->build_signature($request, $consumer, $token);
      +    return $built == $signature;
      +  }
      +}
      +
      +/**
      + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      + * where the Signature Base String is the text and the key is the concatenated values (each first 
      + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      + * character (ASCII code 38) even if empty.
      + *   - Chapter 9.2 ("HMAC-SHA1")
      + */
      +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      +  function get_name() {
      +    return "HMAC-SHA1";
      +  }
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +
      +    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      +  }
      +}
      +
      +/**
      + * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      + * over a secure channel such as HTTPS. It does not use the Signature Base String.
      + *   - Chapter 9.4 ("PLAINTEXT")
      + */
      +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "PLAINTEXT";
      +  }
      +
      +  /**
      +   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      +   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      +   * empty. The result MUST be encoded again.
      +   *   - Chapter 9.4.1 ("Generating Signatures")
      +   *
      +   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      +   * OAuthRequest handles this!
      +   */
      +  public function build_signature($request, $consumer, $token) {
      +    $key_parts = array(
      +      $consumer->secret,
      +      ($token) ? $token->secret : ""
      +    );
      +
      +    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +    $key = implode('&', $key_parts);
      +    $request->base_string = $key;
      +
      +    return $key;
      +  }
      +}
      +
      +/**
      + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      + * verified way to the Service Provider, in a manner which is beyond the scope of this 
      + * specification.
      + *   - Chapter 9.3 ("RSA-SHA1")
      + */
      +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      +  public function get_name() {
      +    return "RSA-SHA1";
      +  }
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  // (2) fetch via http using a url provided by the requester
      +  // (3) some sort of specific discovery code based on request
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_public_cert(&$request);
      +
      +  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +  //
      +  // Either way should return a string representation of the certificate
      +  protected abstract function fetch_private_cert(&$request);
      +
      +  public function build_signature($request, $consumer, $token) {
      +    $base_string = $request->get_signature_base_string();
      +    $request->base_string = $base_string;
      +
      +    // Fetch the private key cert based on the request
      +    $cert = $this->fetch_private_cert($request);
      +
      +    // Pull the private key ID from the certificate
      +    $privatekeyid = openssl_get_privatekey($cert);
      +
      +    // Sign using the key
      +    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($privatekeyid);
      +
      +    return base64_encode($signature);
      +  }
      +
      +  public function check_signature($request, $consumer, $token, $signature) {
      +    $decoded_sig = base64_decode($signature);
      +
      +    $base_string = $request->get_signature_base_string();
      +
      +    // Fetch the public key cert based on the request
      +    $cert = $this->fetch_public_cert($request);
      +
      +    // Pull the public key ID from the certificate
      +    $publickeyid = openssl_get_publickey($cert);
      +
      +    // Check the computed signature against the one passed in the query
      +    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      +
      +    // Release the key resource
      +    openssl_free_key($publickeyid);
      +
      +    return $ok == 1;
      +  }
      +}
      +
      +class OAuthRequest {
      +  private $parameters;
      +  private $http_method;
      +  private $http_url;
      +  // for debug purposes
      +  public $base_string;
      +  public static $version = '1.0';
      +  public static $POST_INPUT = 'php://input';
      +
      +  function __construct($http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      +    $this->parameters = $parameters;
      +    $this->http_method = $http_method;
      +    $this->http_url = $http_url;
      +  }
      +
      +
      +  /**
      +   * attempt to build up a request from what was passed to the server
      +   */
      +  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      +    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      +              ? 'http'
      +              : 'https';
      +    @$http_url or $http_url = $scheme .
      +                              '://' . $_SERVER['HTTP_HOST'] .
      +                              ':' .
      +                              $_SERVER['SERVER_PORT'] .
      +                              $_SERVER['REQUEST_URI'];
      +    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      +
      +    // We weren't handed any parameters, so let's find the ones relevant to
      +    // this request.
      +    // If you run XML-RPC or similar you should use this to provide your own
      +    // parsed parameter-list
      +    if (!$parameters) {
      +      // Find request headers
      +      $request_headers = OAuthUtil::get_headers();
      +
      +      // Parse the query-string to find GET parameters
      +      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      +
      +      // It's a POST request of the proper content-type, so parse POST
      +      // parameters and add those overriding any duplicates from GET
      +      if ($http_method == "POST"
      +          && @strstr($request_headers["Content-Type"],
      +                     "application/x-www-form-urlencoded")
      +          ) {
      +        $post_data = OAuthUtil::parse_parameters(
      +          file_get_contents(self::$POST_INPUT)
      +        );
      +        $parameters = array_merge($parameters, $post_data);
      +      }
      +
      +      // We have a Authorization-header with OAuth data. Parse the header
      +      // and add those overriding any duplicates from GET or POST
      +      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      +        $header_parameters = OAuthUtil::split_header(
      +          $request_headers['Authorization']
      +        );
      +        $parameters = array_merge($parameters, $header_parameters);
      +      }
      +
      +    }
      +
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  /**
      +   * pretty much a helper function to set up the request
      +   */
      +  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      +    @$parameters or $parameters = array();
      +    $defaults = array("oauth_version" => OAuthRequest::$version,
      +                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      +                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      +                      "oauth_consumer_key" => $consumer->key);
      +    if ($token)
      +      $defaults['oauth_token'] = $token->key;
      +
      +    $parameters = array_merge($defaults, $parameters);
      +
      +    return new OAuthRequest($http_method, $http_url, $parameters);
      +  }
      +
      +  public function set_parameter($name, $value, $allow_duplicates = true) {
      +    if ($allow_duplicates && isset($this->parameters[$name])) {
      +      // We have already added parameter(s) with this name, so add to the list
      +      if (is_scalar($this->parameters[$name])) {
      +        // This is the first duplicate, so transform scalar (string)
      +        // into an array so we can add the duplicates
      +        $this->parameters[$name] = array($this->parameters[$name]);
      +      }
      +
      +      $this->parameters[$name][] = $value;
      +    } else {
      +      $this->parameters[$name] = $value;
      +    }
      +  }
      +
      +  public function get_parameter($name) {
      +    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      +  }
      +
      +  public function get_parameters() {
      +    return $this->parameters;
      +  }
      +
      +  public function unset_parameter($name) {
      +    unset($this->parameters[$name]);
      +  }
      +
      +  /**
      +   * The request parameters, sorted and concatenated into a normalized string.
      +   * @return string
      +   */
      +  public function get_signable_parameters() {
      +    // Grab all parameters
      +    $params = $this->parameters;
      +
      +    // Remove oauth_signature if present
      +    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      +    if (isset($params['oauth_signature'])) {
      +      unset($params['oauth_signature']);
      +    }
      +
      +    return OAuthUtil::build_http_query($params);
      +  }
      +
      +  /**
      +   * Returns the base string of this request
      +   *
      +   * The base string defined as the method, the url
      +   * and the parameters (normalized), each urlencoded
      +   * and the concated with &.
      +   */
      +  public function get_signature_base_string() {
      +    $parts = array(
      +      $this->get_normalized_http_method(),
      +      $this->get_normalized_http_url(),
      +      $this->get_signable_parameters()
      +    );
      +
      +    $parts = OAuthUtil::urlencode_rfc3986($parts);
      +
      +    return implode('&', $parts);
      +  }
      +
      +  /**
      +   * just uppercases the http method
      +   */
      +  public function get_normalized_http_method() {
      +    return strtoupper($this->http_method);
      +  }
      +
      +  /**
      +   * parses the url and rebuilds it to be
      +   * scheme://host/path
      +   */
      +  public function get_normalized_http_url() {
      +    $parts = parse_url($this->http_url);
      +
      +    $port = @$parts['port'];
      +    $scheme = $parts['scheme'];
      +    $host = $parts['host'];
      +    $path = @$parts['path'];
      +
      +    $port or $port = ($scheme == 'https') ? '443' : '80';
      +
      +    if (($scheme == 'https' && $port != '443')
      +        || ($scheme == 'http' && $port != '80')) {
      +      $host = "$host:$port";
      +    }
      +    return "$scheme://$host$path";
      +  }
      +
      +  /**
      +   * builds a url usable for a GET request
      +   */
      +  public function to_url() {
      +    $post_data = $this->to_postdata();
      +    $out = $this->get_normalized_http_url();
      +    if ($post_data) {
      +      $out .= '?'.$post_data;
      +    }
      +    return $out;
      +  }
      +
      +  /**
      +   * builds the data one would send in a POST request
      +   */
      +  public function to_postdata() {
      +    return OAuthUtil::build_http_query($this->parameters);
      +  }
      +
      +  /**
      +   * builds the Authorization: header
      +   */
      +  public function to_header($realm=null) {
      +    $first = true;
      +	if($realm) {
      +      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      +      $first = false;
      +    } else
      +      $out = 'Authorization: OAuth';
      +
      +    $total = array();
      +    foreach ($this->parameters as $k => $v) {
      +      if (substr($k, 0, 5) != "oauth") continue;
      +      if (is_array($v)) {
      +        throw new OAuthException('Arrays not supported in headers');
      +      }
      +      $out .= ($first) ? ' ' : ',';
      +      $out .= OAuthUtil::urlencode_rfc3986($k) .
      +              '="' .
      +              OAuthUtil::urlencode_rfc3986($v) .
      +              '"';
      +      $first = false;
      +    }
      +    return $out;
      +  }
      +
      +  public function __toString() {
      +    return $this->to_url();
      +  }
      +
      +
      +  public function sign_request($signature_method, $consumer, $token) {
      +    $this->set_parameter(
      +      "oauth_signature_method",
      +      $signature_method->get_name(),
      +      false
      +    );
      +    $signature = $this->build_signature($signature_method, $consumer, $token);
      +    $this->set_parameter("oauth_signature", $signature, false);
      +  }
      +
      +  public function build_signature($signature_method, $consumer, $token) {
      +    $signature = $signature_method->build_signature($this, $consumer, $token);
      +    return $signature;
      +  }
      +
      +  /**
      +   * util function: current timestamp
      +   */
      +  private static function generate_timestamp() {
      +    return time();
      +  }
      +
      +  /**
      +   * util function: current nonce
      +   */
      +  private static function generate_nonce() {
      +    $mt = microtime();
      +    $rand = mt_rand();
      +
      +    return md5($mt . $rand); // md5s look nicer than numbers
      +  }
      +}
      +
      +class OAuthServer {
      +  protected $timestamp_threshold = 300; // in seconds, five minutes
      +  protected $version = '1.0';             // hi blaine
      +  protected $signature_methods = array();
      +
      +  protected $data_store;
      +
      +  function __construct($data_store) {
      +    $this->data_store = $data_store;
      +  }
      +
      +  public function add_signature_method($signature_method) {
      +    $this->signature_methods[$signature_method->get_name()] =
      +      $signature_method;
      +  }
      +
      +  // high level functions
      +
      +  /**
      +   * process a request_token request
      +   * returns the request token on success
      +   */
      +  public function fetch_request_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // no token required for the initial token request
      +    $token = NULL;
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $callback = $request->get_parameter('oauth_callback');
      +    $new_token = $this->data_store->new_request_token($consumer, $callback);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * process an access_token request
      +   * returns the access token on success
      +   */
      +  public function fetch_access_token(&$request) {
      +    $this->get_version($request);
      +
      +    $consumer = $this->get_consumer($request);
      +
      +    // requires authorized request token
      +    $token = $this->get_token($request, $consumer, "request");
      +
      +    $this->check_signature($request, $consumer, $token);
      +
      +    // Rev A change
      +    $verifier = $request->get_parameter('oauth_verifier');
      +    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      +
      +    return $new_token;
      +  }
      +
      +  /**
      +   * verify an api call, checks all the parameters
      +   */
      +  public function verify_request(&$request) {
      +    $this->get_version($request);
      +    $consumer = $this->get_consumer($request);
      +    $token = $this->get_token($request, $consumer, "access");
      +    $this->check_signature($request, $consumer, $token);
      +    return array($consumer, $token);
      +  }
      +
      +  // Internals from here
      +  /**
      +   * version 1
      +   */
      +  private function get_version(&$request) {
      +    $version = $request->get_parameter("oauth_version");
      +    if (!$version) {
      +      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      +      // Chapter 7.0 ("Accessing Protected Ressources")
      +      $version = '1.0';
      +    }
      +    if ($version !== $this->version) {
      +      throw new OAuthException("OAuth version '$version' not supported");
      +    }
      +    return $version;
      +  }
      +
      +  /**
      +   * figure out the signature with some defaults
      +   */
      +  private function get_signature_method(&$request) {
      +    $signature_method =
      +        @$request->get_parameter("oauth_signature_method");
      +
      +    if (!$signature_method) {
      +      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      +      // parameter is required, and we can't just fallback to PLAINTEXT
      +      throw new OAuthException('No signature method parameter. This parameter is required');
      +    }
      +
      +    if (!in_array($signature_method,
      +                  array_keys($this->signature_methods))) {
      +      throw new OAuthException(
      +        "Signature method '$signature_method' not supported " .
      +        "try one of the following: " .
      +        implode(", ", array_keys($this->signature_methods))
      +      );
      +    }
      +    return $this->signature_methods[$signature_method];
      +  }
      +
      +  /**
      +   * try to find the consumer for the provided request's consumer key
      +   */
      +  private function get_consumer(&$request) {
      +    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      +    if (!$consumer_key) {
      +      throw new OAuthException("Invalid consumer key");
      +    }
      +
      +    $consumer = $this->data_store->lookup_consumer($consumer_key);
      +    if (!$consumer) {
      +      throw new OAuthException("Invalid consumer");
      +    }
      +
      +    return $consumer;
      +  }
      +
      +  /**
      +   * try to find the token for the provided request's token key
      +   */
      +  private function get_token(&$request, $consumer, $token_type="access") {
      +    $token_field = @$request->get_parameter('oauth_token');
      +    $token = $this->data_store->lookup_token(
      +      $consumer, $token_type, $token_field
      +    );
      +    if (!$token) {
      +      throw new OAuthException("Invalid $token_type token: $token_field");
      +    }
      +    return $token;
      +  }
      +
      +  /**
      +   * all-in-one function to check the signature on a request
      +   * should guess the signature method appropriately
      +   */
      +  private function check_signature(&$request, $consumer, $token) {
      +    // this should probably be in a different method
      +    $timestamp = @$request->get_parameter('oauth_timestamp');
      +    $nonce = @$request->get_parameter('oauth_nonce');
      +
      +    $this->check_timestamp($timestamp);
      +    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      +
      +    $signature_method = $this->get_signature_method($request);
      +
      +    $signature = $request->get_parameter('oauth_signature');
      +    $valid_sig = $signature_method->check_signature(
      +      $request,
      +      $consumer,
      +      $token,
      +      $signature
      +    );
      +
      +    if (!$valid_sig) {
      +      throw new OAuthException("Invalid signature");
      +    }
      +  }
      +
      +  /**
      +   * check that the timestamp is new enough
      +   */
      +  private function check_timestamp($timestamp) {
      +    if( ! $timestamp )
      +      throw new OAuthException(
      +        'Missing timestamp parameter. The parameter is required'
      +      );
      +    
      +    // verify that timestamp is recentish
      +    $now = time();
      +    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      +      throw new OAuthException(
      +        "Expired timestamp, yours $timestamp, ours $now"
      +      );
      +    }
      +  }
      +
      +  /**
      +   * check that the nonce is not repeated
      +   */
      +  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      +    if( ! $nonce )
      +      throw new OAuthException(
      +        'Missing nonce parameter. The parameter is required'
      +      );
      +
      +    // verify that the nonce is uniqueish
      +    $found = $this->data_store->lookup_nonce(
      +      $consumer,
      +      $token,
      +      $nonce,
      +      $timestamp
      +    );
      +    if ($found) {
      +      throw new OAuthException("Nonce already used: $nonce");
      +    }
      +  }
      +
      +}
      +
      +class OAuthDataStore {
      +  function lookup_consumer($consumer_key) {
      +    // implement me
      +  }
      +
      +  function lookup_token($consumer, $token_type, $token) {
      +    // implement me
      +  }
      +
      +  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      +    // implement me
      +  }
      +
      +  function new_request_token($consumer, $callback = null) {
      +    // return a new token attached to this consumer
      +  }
      +
      +  function new_access_token($token, $consumer, $verifier = null) {
      +    // return a new access token attached to this consumer
      +    // for the user associated with this token if the request token
      +    // is authorized
      +    // should also invalidate the request token
      +  }
      +
      +}
      +
      +class OAuthUtil {
      +  public static function urlencode_rfc3986($input) {
      +  if (is_array($input)) {
      +    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      +  } else if (is_scalar($input)) {
      +    return str_replace(
      +      '+',
      +      ' ',
      +      str_replace('%7E', '~', rawurlencode($input))
      +    );
      +  } else {
      +    return '';
      +  }
      +}
      +
      +
      +  // This decode function isn't taking into consideration the above
      +  // modifications to the encoding process. However, this method doesn't
      +  // seem to be used anywhere so leaving it as is.
      +  public static function urldecode_rfc3986($string) {
      +    return urldecode($string);
      +  }
      +
      +  // Utility function for turning the Authorization: header into
      +  // parameters, has to do some unescaping
      +  // Can filter out any non-oauth parameters if needed (default behaviour)
      +  public static function split_header($header, $only_allow_oauth_parameters = true) {
      +    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      +    $offset = 0;
      +    $params = array();
      +    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      +      $match = $matches[0];
      +      $header_name = $matches[2][0];
      +      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      +      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      +        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      +      }
      +      $offset = $match[1] + strlen($match[0]);
      +    }
      +
      +    if (isset($params['realm'])) {
      +      unset($params['realm']);
      +    }
      +
      +    return $params;
      +  }
      +
      +  // helper to try to sort out headers for people who aren't running apache
      +  public static function get_headers() {
      +    if (function_exists('apache_request_headers')) {
      +      // we need this to get the actual Authorization: header
      +      // because apache tends to tell us it doesn't exist
      +      $headers = apache_request_headers();
      +
      +      // sanitize the output of apache_request_headers because
      +      // we always want the keys to be Cased-Like-This and arh()
      +      // returns the headers in the same case as they are in the
      +      // request
      +      $out = array();
      +      foreach( $headers AS $key => $value ) {
      +        $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("-", " ", $key)))
      +          );
      +        $out[$key] = $value;
      +      }
      +    } else {
      +      // otherwise we don't have apache and are just going to have to hope
      +      // that $_SERVER actually contains what we need
      +      $out = array();
      +      if( isset($_SERVER['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      +      if( isset($_ENV['CONTENT_TYPE']) )
      +        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      +
      +      foreach ($_SERVER as $key => $value) {
      +        if (substr($key, 0, 5) == "HTTP_") {
      +          // this is chaos, basically it is just there to capitalize the first
      +          // letter of every word that is not an initial HTTP and strip HTTP
      +          // code from przemek
      +          $key = str_replace(
      +            " ",
      +            "-",
      +            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      +          );
      +          $out[$key] = $value;
      +        }
      +      }
      +    }
      +    return $out;
      +  }
      +
      +  // This function takes a input like a=b&a=c&d=e and returns the parsed
      +  // parameters like this
      +  // array('a' => array('b','c'), 'd' => 'e')
      +  public static function parse_parameters( $input ) {
      +    if (!isset($input) || !$input) return array();
      +
      +    $pairs = explode('&', $input);
      +
      +    $parsed_parameters = array();
      +    foreach ($pairs as $pair) {
      +      $split = explode('=', $pair, 2);
      +      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      +      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      +
      +      if (isset($parsed_parameters[$parameter])) {
      +        // We have already recieved parameter(s) with this name, so add to the list
      +        // of parameters with this name
      +
      +        if (is_scalar($parsed_parameters[$parameter])) {
      +          // This is the first duplicate, so transform scalar (string) into an array
      +          // so we can add the duplicates
      +          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      +        }
      +
      +        $parsed_parameters[$parameter][] = $value;
      +      } else {
      +        $parsed_parameters[$parameter] = $value;
      +      }
      +    }
      +    return $parsed_parameters;
      +  }
      +
      +  public static function build_http_query($params) {
      +    if (!$params) return '';
      +
      +    // Urlencode both keys and values
      +    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      +    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      +    $params = array_combine($keys, $values);
      +
      +    // Parameters are sorted by name, using lexicographical byte value ordering.
      +    // Ref: Spec: 9.1.1 (1)
      +    uksort($params, 'strcmp');
      +
      +    $pairs = array();
      +    foreach ($params as $parameter => $value) {
      +      if (is_array($value)) {
      +        // If two or more parameters share the same name, they are sorted by their value
      +        // Ref: Spec: 9.1.1 (1)
      +        natsort($value);
      +        foreach ($value as $duplicate_value) {
      +          $pairs[] = $parameter . '=' . $duplicate_value;
      +        }
      +      } else {
      +        $pairs[] = $parameter . '=' . $value;
      +      }
      +    }
      +    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      +    // Each name-value pair is separated by an '&' character (ASCII code 38)
      +    return implode('&', $pairs);
      +  }
      +}
      +
      +?>
      diff --git a/tumblr/library/tumblroauth.php b/tumblr/tumblroauth/tumblroauth.php
      similarity index 95%
      rename from tumblr/library/tumblroauth.php
      rename to tumblr/tumblroauth/tumblroauth.php
      index 365744eb..3c6f13c1 100644
      --- a/tumblr/library/tumblroauth.php
      +++ b/tumblr/tumblroauth/tumblroauth.php
      @@ -1,245 +1,245 @@
      -http_status; }
      -  function lastAPICall() { return $this->last_api_call; }
      -
      -  /**
      -   * construct TumblrOAuth object
      -   */
      -  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      -    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      -    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      -    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      -      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      -    } else {
      -      $this->token = NULL;
      -    }
      -  }
      -
      -
      -  /**
      -   * Get a request_token from Tumblr
      -   *
      -   * @returns a key/value array containing oauth_token and oauth_token_secret
      -   */
      -  function getRequestToken($oauth_callback = NULL) {
      -    $parameters = array();
      -    if (!empty($oauth_callback)) {
      -      $parameters['oauth_callback'] = $oauth_callback;
      -    }
      -    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * Get the authorize URL
      -   *
      -   * @returns a string
      -   */
      -  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      -    if (is_array($token)) {
      -      $token = $token['oauth_token'];
      -    }
      -    if (empty($sign_in_with_tumblr)) {
      -      return $this->authorizeURL() . "?oauth_token={$token}";
      -    } else {
      -       return $this->authenticateURL() . "?oauth_token={$token}";
      -    }
      -  }
      -
      -  /**
      -   * Exchange request token and secret for an access token and
      -   * secret, to sign API calls.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham")
      -   */
      -  function getAccessToken($oauth_verifier = FALSE) {
      -    $parameters = array();
      -    if (!empty($oauth_verifier)) {
      -      $parameters['oauth_verifier'] = $oauth_verifier;
      -    }
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * One time exchange of username and password for access token and secret.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham",
      -   *                "x_auth_expires" => "0")
      -   */
      -  function getXAuthToken($username, $password) {
      -    $parameters = array();
      -    $parameters['x_auth_username'] = $username;
      -    $parameters['x_auth_password'] = $password;
      -    $parameters['x_auth_mode'] = 'client_auth';
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * GET wrapper for oAuthRequest.
      -   */
      -  function get($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'GET', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * POST wrapper for oAuthRequest.
      -   */
      -  function post($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'POST', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * DELETE wrapper for oAuthReqeust.
      -   */
      -  function delete($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * Format and sign an OAuth / API request
      -   */
      -  function oAuthRequest($url, $method, $parameters) {
      -    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      -      $url = "{$this->host}{$url}";
      -    }
      -    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      -    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      -    switch ($method) {
      -    case 'GET':
      -      return $this->http($request->to_url(), 'GET');
      -    default:
      -      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      -    }
      -  }
      -
      -  /**
      -   * Make an HTTP request
      -   *
      -   * @return API results
      -   */
      -  function http($url, $method, $postfields = NULL) {
      -    $this->http_info = array();
      -    $ci = curl_init();
      -    /* Curl settings */
      -    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      -    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      -    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -    switch ($method) {
      -      case 'POST':
      -        curl_setopt($ci, CURLOPT_POST, TRUE);
      -        if (!empty($postfields)) {
      -          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -        }
      -        break;
      -      case 'DELETE':
      -        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -        if (!empty($postfields)) {
      -          $url = "{$url}?{$postfields}";
      -        }
      -    }
      -
      -    curl_setopt($ci, CURLOPT_URL, $url);
      -    $response = curl_exec($ci);
      -    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -    $this->url = $url;
      -    curl_close ($ci);
      -    return $response;
      -  }
      -
      -  /**
      -   * Get the header info to store.
      -   */
      -  function getHeader($ch, $header) {
      -    $i = strpos($header, ':');
      -    if (!empty($i)) {
      -      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      -      $value = trim(substr($header, $i + 2));
      -      $this->http_header[$key] = $value;
      -    }
      -    return strlen($header);
      -  }
      -}
      +http_status; }
      +  function lastAPICall() { return $this->last_api_call; }
      +
      +  /**
      +   * construct TumblrOAuth object
      +   */
      +  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      +    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      +    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      +    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      +      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      +    } else {
      +      $this->token = NULL;
      +    }
      +  }
      +
      +
      +  /**
      +   * Get a request_token from Tumblr
      +   *
      +   * @returns a key/value array containing oauth_token and oauth_token_secret
      +   */
      +  function getRequestToken($oauth_callback = NULL) {
      +    $parameters = array();
      +    if (!empty($oauth_callback)) {
      +      $parameters['oauth_callback'] = $oauth_callback;
      +    } 
      +    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * Get the authorize URL
      +   *
      +   * @returns a string
      +   */
      +  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      +    if (is_array($token)) {
      +      $token = $token['oauth_token'];
      +    }
      +    if (empty($sign_in_with_tumblr)) {
      +      return $this->authorizeURL() . "?oauth_token={$token}";
      +    } else {
      +       return $this->authenticateURL() . "?oauth_token={$token}";
      +    }
      +  }
      +
      +  /**
      +   * Exchange request token and secret for an access token and
      +   * secret, to sign API calls.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham")
      +   */
      +  function getAccessToken($oauth_verifier = FALSE) {
      +    $parameters = array();
      +    if (!empty($oauth_verifier)) {
      +      $parameters['oauth_verifier'] = $oauth_verifier;
      +    }
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * One time exchange of username and password for access token and secret.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham",
      +   *                "x_auth_expires" => "0")
      +   */  
      +  function getXAuthToken($username, $password) {
      +    $parameters = array();
      +    $parameters['x_auth_username'] = $username;
      +    $parameters['x_auth_password'] = $password;
      +    $parameters['x_auth_mode'] = 'client_auth';
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * GET wrapper for oAuthRequest.
      +   */
      +  function get($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'GET', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +  
      +  /**
      +   * POST wrapper for oAuthRequest.
      +   */
      +  function post($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'POST', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * DELETE wrapper for oAuthReqeust.
      +   */
      +  function delete($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * Format and sign an OAuth / API request
      +   */
      +  function oAuthRequest($url, $method, $parameters) {
      +    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      +      $url = "{$this->host}{$url}";
      +    }
      +    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      +    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      +    switch ($method) {
      +    case 'GET':
      +      return $this->http($request->to_url(), 'GET');
      +    default:
      +      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      +    }
      +  }
      +
      +  /**
      +   * Make an HTTP request
      +   *
      +   * @return API results
      +   */
      +  function http($url, $method, $postfields = NULL) {
      +    $this->http_info = array();
      +    $ci = curl_init();
      +    /* Curl settings */
      +    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      +    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      +    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +    switch ($method) {
      +      case 'POST':
      +        curl_setopt($ci, CURLOPT_POST, TRUE);
      +        if (!empty($postfields)) {
      +          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +        }
      +        break;
      +      case 'DELETE':
      +        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +        if (!empty($postfields)) {
      +          $url = "{$url}?{$postfields}";
      +        }
      +    }
      +
      +    curl_setopt($ci, CURLOPT_URL, $url);
      +    $response = curl_exec($ci);
      +    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +    $this->url = $url;
      +    curl_close ($ci);
      +    return $response;
      +  }
      +
      +  /**
      +   * Get the header info to store.
      +   */
      +  function getHeader($ch, $header) {
      +    $i = strpos($header, ':');
      +    if (!empty($i)) {
      +      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      +      $value = trim(substr($header, $i + 2));
      +      $this->http_header[$key] = $value;
      +    }
      +    return strlen($header);
      +  }
      +}
      
      From 429448786d52475085e2266ae07add8dce5d9b4c Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Sun, 28 Jan 2018 14:33:47 -0500
      Subject: [PATCH 032/116] Move StatusNet addon dependencies in own library
       subfolder
      
      - Move CodebirdSN to library/codebirdsn.php
      - Move StatusNetOAuth class to library/statusnetoauth.php
      - Copy TwitterOAuth to library/twitteroauth.php
      - Copy OAuth1 to library/OAuth1.php
      ---
       statusnet/library/OAuth1.php                  | 891 ++++++++++++++++++
       .../{codebird.php => library/codebirdsn.php}  |   0
       statusnet/library/statusnetoauth.php          | 102 ++
       statusnet/library/twitteroauth.php            | 280 ++++++
       statusnet/statusnet.php                       | 110 +--
       5 files changed, 1278 insertions(+), 105 deletions(-)
       create mode 100644 statusnet/library/OAuth1.php
       rename statusnet/{codebird.php => library/codebirdsn.php} (100%)
       create mode 100644 statusnet/library/statusnetoauth.php
       create mode 100644 statusnet/library/twitteroauth.php
      
      diff --git a/statusnet/library/OAuth1.php b/statusnet/library/OAuth1.php
      new file mode 100644
      index 00000000..57481f5d
      --- /dev/null
      +++ b/statusnet/library/OAuth1.php
      @@ -0,0 +1,891 @@
      +key = $key;
      +		$this->secret = $secret;
      +		$this->callback_url = $callback_url;
      +	  }
      +
      +	  function __toString() {
      +		return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      +	  }
      +	}
      +
      +	class OAuthToken {
      +	  // access tokens and request tokens
      +	  public $key;
      +	  public $secret;
      +
      +	  public $expires;
      +	  public $scope;
      +	  public $uid;
      +
      +	  /**
      +	   * key = the token
      +	   * secret = the token secret
      +	   */
      +	  function __construct($key, $secret) {
      +		$this->key = $key;
      +		$this->secret = $secret;
      +	  }
      +
      +	  /**
      +	   * generates the basic string serialization of a token that a server
      +	   * would respond to request_token and access_token calls with
      +	   */
      +	  function to_string() {
      +		return "oauth_token=" .
      +			   OAuthUtil::urlencode_rfc3986($this->key) .
      +			   "&oauth_token_secret=" .
      +			   OAuthUtil::urlencode_rfc3986($this->secret);
      +	  }
      +
      +	  function __toString() {
      +		return $this->to_string();
      +	  }
      +	}
      +
      +	/**
      +	 * A class for implementing a Signature Method
      +	 * See section 9 ("Signing Requests") in the spec
      +	 */
      +	abstract class OAuthSignatureMethod {
      +	  /**
      +	   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      +	   * @return string
      +	   */
      +	  abstract public function get_name();
      +
      +	  /**
      +	   * Build up the signature
      +	   * NOTE: The output of this function MUST NOT be urlencoded.
      +	   * the encoding is handled in OAuthRequest when the final
      +	   * request is serialized
      +	   * @param OAuthRequest $request
      +	   * @param OAuthConsumer $consumer
      +	   * @param OAuthToken $token
      +	   * @return string
      +	   */
      +	  abstract public function build_signature($request, $consumer, $token);
      +
      +	  /**
      +	   * Verifies that a given signature is correct
      +	   * @param OAuthRequest $request
      +	   * @param OAuthConsumer $consumer
      +	   * @param OAuthToken $token
      +	   * @param string $signature
      +	   * @return bool
      +	   */
      +	  public function check_signature($request, $consumer, $token, $signature) {
      +		$built = $this->build_signature($request, $consumer, $token);
      +		//echo "
      "; var_dump($signature, $built, ($built == $signature)); killme();
      +		return ($built == $signature);
      +	  }
      +	}
      +
      +	/**
      +	 * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
      +	 * where the Signature Base String is the text and the key is the concatenated values (each first
      +	 * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
      +	 * character (ASCII code 38) even if empty.
      +	 *   - Chapter 9.2 ("HMAC-SHA1")
      +	 */
      +	class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      +	  function get_name() {
      +		return "HMAC-SHA1";
      +	  }
      +
      +	  public function build_signature($request, $consumer, $token) {
      +		$base_string = $request->get_signature_base_string();
      +		$request->base_string = $base_string;
      +
      +		$key_parts = array(
      +		  $consumer->secret,
      +		  ($token) ? $token->secret : ""
      +		);
      +
      +		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +		$key = implode('&', $key_parts);
      +
      +
      +		$r = base64_encode(hash_hmac('sha1', $base_string, $key, true));
      +		return $r;
      +	  }
      +	}
      +
      +	/**
      +	 * The PLAINTEXT method does not provide any security protection and SHOULD only be used
      +	 * over a secure channel such as HTTPS. It does not use the Signature Base String.
      +	 *   - Chapter 9.4 ("PLAINTEXT")
      +	 */
      +	class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      +	  public function get_name() {
      +		return "PLAINTEXT";
      +	  }
      +
      +	  /**
      +	   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
      +	   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
      +	   * empty. The result MUST be encoded again.
      +	   *   - Chapter 9.4.1 ("Generating Signatures")
      +	   *
      +	   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      +	   * OAuthRequest handles this!
      +	   */
      +	  public function build_signature($request, $consumer, $token) {
      +		$key_parts = array(
      +		  $consumer->secret,
      +		  ($token) ? $token->secret : ""
      +		);
      +
      +		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +		$key = implode('&', $key_parts);
      +		$request->base_string = $key;
      +
      +		return $key;
      +	  }
      +	}
      +
      +	/**
      +	 * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
      +	 * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
      +	 * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
      +	 * verified way to the Service Provider, in a manner which is beyond the scope of this
      +	 * specification.
      +	 *   - Chapter 9.3 ("RSA-SHA1")
      +	 */
      +	abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      +	  public function get_name() {
      +		return "RSA-SHA1";
      +	  }
      +
      +	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +	  // (2) fetch via http using a url provided by the requester
      +	  // (3) some sort of specific discovery code based on request
      +	  //
      +	  // Either way should return a string representation of the certificate
      +	  protected abstract function fetch_public_cert(&$request);
      +
      +	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +	  //
      +	  // Either way should return a string representation of the certificate
      +	  protected abstract function fetch_private_cert(&$request);
      +
      +	  public function build_signature($request, $consumer, $token) {
      +		$base_string = $request->get_signature_base_string();
      +		$request->base_string = $base_string;
      +
      +		// Fetch the private key cert based on the request
      +		$cert = $this->fetch_private_cert($request);
      +
      +		// Pull the private key ID from the certificate
      +		$privatekeyid = openssl_get_privatekey($cert);
      +
      +		// Sign using the key
      +		$ok = openssl_sign($base_string, $signature, $privatekeyid);
      +
      +		// Release the key resource
      +		openssl_free_key($privatekeyid);
      +
      +		return base64_encode($signature);
      +	  }
      +
      +	  public function check_signature($request, $consumer, $token, $signature) {
      +		$decoded_sig = base64_decode($signature);
      +
      +		$base_string = $request->get_signature_base_string();
      +
      +		// Fetch the public key cert based on the request
      +		$cert = $this->fetch_public_cert($request);
      +
      +		// Pull the public key ID from the certificate
      +		$publickeyid = openssl_get_publickey($cert);
      +
      +		// Check the computed signature against the one passed in the query
      +		$ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      +
      +		// Release the key resource
      +		openssl_free_key($publickeyid);
      +
      +		return $ok == 1;
      +	  }
      +	}
      +
      +	class OAuthRequest {
      +	  private $parameters;
      +	  private $http_method;
      +	  private $http_url;
      +	  // for debug purposes
      +	  public $base_string;
      +	  public static $version = '1.0';
      +	  public static $POST_INPUT = 'php://input';
      +
      +	  function __construct($http_method, $http_url, $parameters=NULL) {
      +		@$parameters or $parameters = array();
      +		$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      +		$this->parameters = $parameters;
      +		$this->http_method = $http_method;
      +		$this->http_url = $http_url;
      +	  }
      +
      +
      +	  /**
      +	   * attempt to build up a request from what was passed to the server
      +	   */
      +	  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      +		$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      +				  ? 'http'
      +				  : 'https';
      +		@$http_url or $http_url = $scheme .
      +								  '://' . $_SERVER['HTTP_HOST'] .
      +								  ':' .
      +								  $_SERVER['SERVER_PORT'] .
      +								  $_SERVER['REQUEST_URI'];
      +		@$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      +
      +		// We weren't handed any parameters, so let's find the ones relevant to
      +		// this request.
      +		// If you run XML-RPC or similar you should use this to provide your own
      +		// parsed parameter-list
      +		if (!$parameters) {
      +		  // Find request headers
      +		  $request_headers = OAuthUtil::get_headers();
      +
      +		  // Parse the query-string to find GET parameters
      +		  $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      +
      +		  // It's a POST request of the proper content-type, so parse POST
      +		  // parameters and add those overriding any duplicates from GET
      +		  if ($http_method == "POST"
      +			  && @strstr($request_headers["Content-Type"],
      +						 "application/x-www-form-urlencoded")
      +			  ) {
      +			$post_data = OAuthUtil::parse_parameters(
      +			  file_get_contents(self::$POST_INPUT)
      +			);
      +			$parameters = array_merge($parameters, $post_data);
      +		  }
      +
      +		  // We have a Authorization-header with OAuth data. Parse the header
      +		  // and add those overriding any duplicates from GET or POST
      +		  if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      +			$header_parameters = OAuthUtil::split_header(
      +			  $request_headers['Authorization']
      +			);
      +			$parameters = array_merge($parameters, $header_parameters);
      +		  }
      +
      +		}
      +		// fix for friendica redirect system
      +
      +		$http_url =  substr($http_url, 0, strpos($http_url,$parameters['pagename'])+strlen($parameters['pagename']));
      +		unset( $parameters['pagename'] );
      +
      +		//echo "
      ".__function__."\n"; var_dump($http_method, $http_url, $parameters, $_SERVER['REQUEST_URI']); killme();
      +		return new OAuthRequest($http_method, $http_url, $parameters);
      +	  }
      +
      +	  /**
      +	   * pretty much a helper function to set up the request
      +	   */
      +	  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      +		@$parameters or $parameters = array();
      +		$defaults = array("oauth_version" => OAuthRequest::$version,
      +						  "oauth_nonce" => OAuthRequest::generate_nonce(),
      +						  "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      +						  "oauth_consumer_key" => $consumer->key);
      +		if ($token)
      +		  $defaults['oauth_token'] = $token->key;
      +
      +		$parameters = array_merge($defaults, $parameters);
      +
      +		return new OAuthRequest($http_method, $http_url, $parameters);
      +	  }
      +
      +	  public function set_parameter($name, $value, $allow_duplicates = true) {
      +		if ($allow_duplicates && isset($this->parameters[$name])) {
      +		  // We have already added parameter(s) with this name, so add to the list
      +		  if (is_scalar($this->parameters[$name])) {
      +			// This is the first duplicate, so transform scalar (string)
      +			// into an array so we can add the duplicates
      +			$this->parameters[$name] = array($this->parameters[$name]);
      +		  }
      +
      +		  $this->parameters[$name][] = $value;
      +		} else {
      +		  $this->parameters[$name] = $value;
      +		}
      +	  }
      +
      +	  public function get_parameter($name) {
      +		return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      +	  }
      +
      +	  public function get_parameters() {
      +		return $this->parameters;
      +	  }
      +
      +	  public function unset_parameter($name) {
      +		unset($this->parameters[$name]);
      +	  }
      +
      +	  /**
      +	   * The request parameters, sorted and concatenated into a normalized string.
      +	   * @return string
      +	   */
      +	  public function get_signable_parameters() {
      +		// Grab all parameters
      +		$params = $this->parameters;
      +
      +		// Remove oauth_signature if present
      +		// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      +		if (isset($params['oauth_signature'])) {
      +		  unset($params['oauth_signature']);
      +		}
      +
      +		return OAuthUtil::build_http_query($params);
      +	  }
      +
      +	  /**
      +	   * Returns the base string of this request
      +	   *
      +	   * The base string defined as the method, the url
      +	   * and the parameters (normalized), each urlencoded
      +	   * and the concated with &.
      +	   */
      +	  public function get_signature_base_string() {
      +		$parts = array(
      +		  $this->get_normalized_http_method(),
      +		  $this->get_normalized_http_url(),
      +		  $this->get_signable_parameters()
      +		);
      +
      +		$parts = OAuthUtil::urlencode_rfc3986($parts);
      +
      +		return implode('&', $parts);
      +	  }
      +
      +	  /**
      +	   * just uppercases the http method
      +	   */
      +	  public function get_normalized_http_method() {
      +		return strtoupper($this->http_method);
      +	  }
      +
      +	  /**
      +	   * parses the url and rebuilds it to be
      +	   * scheme://host/path
      +	   */
      +	  public function get_normalized_http_url() {
      +		$parts = parse_url($this->http_url);
      +
      +		$port = @$parts['port'];
      +		$scheme = $parts['scheme'];
      +		$host = $parts['host'];
      +		$path = @$parts['path'];
      +
      +		$port or $port = ($scheme == 'https') ? '443' : '80';
      +
      +		if (($scheme == 'https' && $port != '443')
      +			|| ($scheme == 'http' && $port != '80')) {
      +		  $host = "$host:$port";
      +		}
      +		return "$scheme://$host$path";
      +	  }
      +
      +	  /**
      +	   * builds a url usable for a GET request
      +	   */
      +	  public function to_url() {
      +		$post_data = $this->to_postdata();
      +		$out = $this->get_normalized_http_url();
      +		if ($post_data) {
      +		  $out .= '?'.$post_data;
      +		}
      +		return $out;
      +	  }
      +
      +	  /**
      +	   * builds the data one would send in a POST request
      +	   */
      +	  public function to_postdata($raw = false) {
      +		if ($raw)
      +		  return($this->parameters);
      +		else
      +		  return OAuthUtil::build_http_query($this->parameters);
      +	  }
      +
      +	  /**
      +	   * builds the Authorization: header
      +	   */
      +	  public function to_header($realm=null) {
      +		$first = true;
      +		if($realm) {
      +		  $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      +		  $first = false;
      +		} else
      +		  $out = 'Authorization: OAuth';
      +
      +		$total = array();
      +		foreach ($this->parameters as $k => $v) {
      +		  if (substr($k, 0, 5) != "oauth") continue;
      +		  if (is_array($v)) {
      +			throw new OAuthException('Arrays not supported in headers');
      +		  }
      +		  $out .= ($first) ? ' ' : ',';
      +		  $out .= OAuthUtil::urlencode_rfc3986($k) .
      +				  '="' .
      +				  OAuthUtil::urlencode_rfc3986($v) .
      +				  '"';
      +		  $first = false;
      +		}
      +		return $out;
      +	  }
      +
      +	  public function __toString() {
      +		return $this->to_url();
      +	  }
      +
      +
      +	  public function sign_request($signature_method, $consumer, $token) {
      +		$this->set_parameter(
      +		  "oauth_signature_method",
      +		  $signature_method->get_name(),
      +		  false
      +		);
      +		$signature = $this->build_signature($signature_method, $consumer, $token);
      +		$this->set_parameter("oauth_signature", $signature, false);
      +	  }
      +
      +	  public function build_signature($signature_method, $consumer, $token) {
      +		$signature = $signature_method->build_signature($this, $consumer, $token);
      +		return $signature;
      +	  }
      +
      +	  /**
      +	   * util function: current timestamp
      +	   */
      +	  private static function generate_timestamp() {
      +		return time();
      +	  }
      +
      +	  /**
      +	   * util function: current nonce
      +	   */
      +	  private static function generate_nonce() {
      +		$mt = microtime();
      +		$rand = mt_rand();
      +
      +		return md5($mt . $rand); // md5s look nicer than numbers
      +	  }
      +	}
      +
      +	class OAuthServer {
      +	  protected $timestamp_threshold = 300; // in seconds, five minutes
      +	  protected $version = '1.0';             // hi blaine
      +	  protected $signature_methods = array();
      +
      +	  protected $data_store;
      +
      +	  function __construct($data_store) {
      +		$this->data_store = $data_store;
      +	  }
      +
      +	  public function add_signature_method($signature_method) {
      +		$this->signature_methods[$signature_method->get_name()] =
      +		  $signature_method;
      +	  }
      +
      +	  // high level functions
      +
      +	  /**
      +	   * process a request_token request
      +	   * returns the request token on success
      +	   */
      +	  public function fetch_request_token(&$request) {
      +		$this->get_version($request);
      +
      +		$consumer = $this->get_consumer($request);
      +
      +		// no token required for the initial token request
      +		$token = NULL;
      +
      +		$this->check_signature($request, $consumer, $token);
      +
      +		// Rev A change
      +		$callback = $request->get_parameter('oauth_callback');
      +		$new_token = $this->data_store->new_request_token($consumer, $callback);
      +
      +		return $new_token;
      +	  }
      +
      +	  /**
      +	   * process an access_token request
      +	   * returns the access token on success
      +	   */
      +	  public function fetch_access_token(&$request) {
      +		$this->get_version($request);
      +
      +		$consumer = $this->get_consumer($request);
      +
      +		// requires authorized request token
      +		$token = $this->get_token($request, $consumer, "request");
      +
      +		$this->check_signature($request, $consumer, $token);
      +
      +		// Rev A change
      +		$verifier = $request->get_parameter('oauth_verifier');
      +		$new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      +
      +		return $new_token;
      +	  }
      +
      +	  /**
      +	   * verify an api call, checks all the parameters
      +	   */
      +	  public function verify_request(&$request) {
      +		$this->get_version($request);
      +		$consumer = $this->get_consumer($request);
      +		//echo __file__.__line__.__function__."
      "; var_dump($consumer); die();
      +		$token = $this->get_token($request, $consumer, "access");
      +		$this->check_signature($request, $consumer, $token);
      +		return array($consumer, $token);
      +	  }
      +
      +	  // Internals from here
      +	  /**
      +	   * version 1
      +	   */
      +	  private function get_version(&$request) {
      +		$version = $request->get_parameter("oauth_version");
      +		if (!$version) {
      +		  // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
      +		  // Chapter 7.0 ("Accessing Protected Ressources")
      +		  $version = '1.0';
      +		}
      +		if ($version !== $this->version) {
      +		  throw new OAuthException("OAuth version '$version' not supported");
      +		}
      +		return $version;
      +	  }
      +
      +	  /**
      +	   * figure out the signature with some defaults
      +	   */
      +	  private function get_signature_method(&$request) {
      +		$signature_method =
      +			@$request->get_parameter("oauth_signature_method");
      +
      +		if (!$signature_method) {
      +		  // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      +		  // parameter is required, and we can't just fallback to PLAINTEXT
      +		  throw new OAuthException('No signature method parameter. This parameter is required');
      +		}
      +
      +		if (!in_array($signature_method,
      +					  array_keys($this->signature_methods))) {
      +		  throw new OAuthException(
      +			"Signature method '$signature_method' not supported " .
      +			"try one of the following: " .
      +			implode(", ", array_keys($this->signature_methods))
      +		  );
      +		}
      +		return $this->signature_methods[$signature_method];
      +	  }
      +
      +	  /**
      +	   * try to find the consumer for the provided request's consumer key
      +	   */
      +	  private function get_consumer(&$request) {
      +		$consumer_key = @$request->get_parameter("oauth_consumer_key");
      +		if (!$consumer_key) {
      +		  throw new OAuthException("Invalid consumer key");
      +		}
      +
      +		$consumer = $this->data_store->lookup_consumer($consumer_key);
      +		if (!$consumer) {
      +		  throw new OAuthException("Invalid consumer");
      +		}
      +
      +		return $consumer;
      +	  }
      +
      +	  /**
      +	   * try to find the token for the provided request's token key
      +	   */
      +	  private function get_token(&$request, $consumer, $token_type="access") {
      +		$token_field = @$request->get_parameter('oauth_token');
      +		$token = $this->data_store->lookup_token(
      +		  $consumer, $token_type, $token_field
      +		);
      +		if (!$token) {
      +		  throw new OAuthException("Invalid $token_type token: $token_field");
      +		}
      +		return $token;
      +	  }
      +
      +	  /**
      +	   * all-in-one function to check the signature on a request
      +	   * should guess the signature method appropriately
      +	   */
      +	  private function check_signature(&$request, $consumer, $token) {
      +		// this should probably be in a different method
      +		$timestamp = @$request->get_parameter('oauth_timestamp');
      +		$nonce = @$request->get_parameter('oauth_nonce');
      +
      +		$this->check_timestamp($timestamp);
      +		$this->check_nonce($consumer, $token, $nonce, $timestamp);
      +
      +		$signature_method = $this->get_signature_method($request);
      +
      +		$signature = $request->get_parameter('oauth_signature');
      +		$valid_sig = $signature_method->check_signature(
      +		  $request,
      +		  $consumer,
      +		  $token,
      +		  $signature
      +		);
      +
      +
      +		if (!$valid_sig) {
      +		  throw new OAuthException("Invalid signature");
      +		}
      +	  }
      +
      +	  /**
      +	   * check that the timestamp is new enough
      +	   */
      +	  private function check_timestamp($timestamp) {
      +		if( ! $timestamp )
      +		  throw new OAuthException(
      +			'Missing timestamp parameter. The parameter is required'
      +		  );
      +
      +		// verify that timestamp is recentish
      +		$now = time();
      +		if (abs($now - $timestamp) > $this->timestamp_threshold) {
      +		  throw new OAuthException(
      +			"Expired timestamp, yours $timestamp, ours $now"
      +		  );
      +		}
      +	  }
      +
      +	  /**
      +	   * check that the nonce is not repeated
      +	   */
      +	  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      +		if( ! $nonce )
      +		  throw new OAuthException(
      +			'Missing nonce parameter. The parameter is required'
      +		  );
      +
      +		// verify that the nonce is uniqueish
      +		$found = $this->data_store->lookup_nonce(
      +		  $consumer,
      +		  $token,
      +		  $nonce,
      +		  $timestamp
      +		);
      +		if ($found) {
      +		  throw new OAuthException("Nonce already used: $nonce");
      +		}
      +	  }
      +
      +	}
      +
      +	class OAuthDataStore {
      +	  function lookup_consumer($consumer_key) {
      +		// implement me
      +	  }
      +
      +	  function lookup_token($consumer, $token_type, $token) {
      +		// implement me
      +	  }
      +
      +	  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      +		// implement me
      +	  }
      +
      +	  function new_request_token($consumer, $callback = null) {
      +		// return a new token attached to this consumer
      +	  }
      +
      +	  function new_access_token($token, $consumer, $verifier = null) {
      +		// return a new access token attached to this consumer
      +		// for the user associated with this token if the request token
      +		// is authorized
      +		// should also invalidate the request token
      +	  }
      +
      +	}
      +
      +	class OAuthUtil {
      +	  public static function urlencode_rfc3986($input) {
      +	  if (is_array($input)) {
      +		return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      +	  } else if (is_scalar($input)) {
      +		return str_replace(
      +		  '+',
      +		  ' ',
      +		  str_replace('%7E', '~', rawurlencode($input))
      +		);
      +	  } else {
      +		return '';
      +	  }
      +	}
      +
      +
      +	  // This decode function isn't taking into consideration the above
      +	  // modifications to the encoding process. However, this method doesn't
      +	  // seem to be used anywhere so leaving it as is.
      +	  public static function urldecode_rfc3986($string) {
      +		return urldecode($string);
      +	  }
      +
      +	  // Utility function for turning the Authorization: header into
      +	  // parameters, has to do some unescaping
      +	  // Can filter out any non-oauth parameters if needed (default behaviour)
      +	  public static function split_header($header, $only_allow_oauth_parameters = true) {
      +		$pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      +		$offset = 0;
      +		$params = array();
      +		while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      +		  $match = $matches[0];
      +		  $header_name = $matches[2][0];
      +		  $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      +		  if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      +			$params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      +		  }
      +		  $offset = $match[1] + strlen($match[0]);
      +		}
      +
      +		if (isset($params['realm'])) {
      +		  unset($params['realm']);
      +		}
      +
      +		return $params;
      +	  }
      +
      +	  // helper to try to sort out headers for people who aren't running apache
      +	  public static function get_headers() {
      +		if (function_exists('apache_request_headers')) {
      +		  // we need this to get the actual Authorization: header
      +		  // because apache tends to tell us it doesn't exist
      +		  $headers = apache_request_headers();
      +
      +		  // sanitize the output of apache_request_headers because
      +		  // we always want the keys to be Cased-Like-This and arh()
      +		  // returns the headers in the same case as they are in the
      +		  // request
      +		  $out = array();
      +		  foreach( $headers AS $key => $value ) {
      +			$key = str_replace(
      +				" ",
      +				"-",
      +				ucwords(strtolower(str_replace("-", " ", $key)))
      +			  );
      +			$out[$key] = $value;
      +		  }
      +		} else {
      +		  // otherwise we don't have apache and are just going to have to hope
      +		  // that $_SERVER actually contains what we need
      +		  $out = array();
      +		  if( isset($_SERVER['CONTENT_TYPE']) )
      +			$out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      +		  if( isset($_ENV['CONTENT_TYPE']) )
      +			$out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      +
      +		  foreach ($_SERVER as $key => $value) {
      +			if (substr($key, 0, 5) == "HTTP_") {
      +			  // this is chaos, basically it is just there to capitalize the first
      +			  // letter of every word that is not an initial HTTP and strip HTTP
      +			  // code from przemek
      +			  $key = str_replace(
      +				" ",
      +				"-",
      +				ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      +			  );
      +			  $out[$key] = $value;
      +			}
      +		  }
      +		}
      +		return $out;
      +	  }
      +
      +	  // This function takes a input like a=b&a=c&d=e and returns the parsed
      +	  // parameters like this
      +	  // array('a' => array('b','c'), 'd' => 'e')
      +	  public static function parse_parameters( $input ) {
      +		if (!isset($input) || !$input) return array();
      +
      +		$pairs = explode('&', $input);
      +
      +		$parsed_parameters = array();
      +		foreach ($pairs as $pair) {
      +		  $split = explode('=', $pair, 2);
      +		  $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      +		  $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      +
      +		  if (isset($parsed_parameters[$parameter])) {
      +			// We have already recieved parameter(s) with this name, so add to the list
      +			// of parameters with this name
      +
      +			if (is_scalar($parsed_parameters[$parameter])) {
      +			  // This is the first duplicate, so transform scalar (string) into an array
      +			  // so we can add the duplicates
      +			  $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      +			}
      +
      +			$parsed_parameters[$parameter][] = $value;
      +		  } else {
      +			$parsed_parameters[$parameter] = $value;
      +		  }
      +		}
      +		return $parsed_parameters;
      +	  }
      +
      +	  public static function build_http_query($params) {
      +		if (!$params) return '';
      +
      +		// Urlencode both keys and values
      +		$keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      +		$values = OAuthUtil::urlencode_rfc3986(array_values($params));
      +		$params = array_combine($keys, $values);
      +
      +		// Parameters are sorted by name, using lexicographical byte value ordering.
      +		// Ref: Spec: 9.1.1 (1)
      +		uksort($params, 'strcmp');
      +
      +		$pairs = array();
      +		foreach ($params as $parameter => $value) {
      +		  if (is_array($value)) {
      +			// If two or more parameters share the same name, they are sorted by their value
      +			// Ref: Spec: 9.1.1 (1)
      +			natsort($value);
      +			foreach ($value as $duplicate_value) {
      +			  $pairs[] = $parameter . '=' . $duplicate_value;
      +			}
      +		  } else {
      +			$pairs[] = $parameter . '=' . $value;
      +		  }
      +		}
      +		// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      +		// Each name-value pair is separated by an '&' character (ASCII code 38)
      +		return implode('&', $pairs);
      +	  }
      +	}
      +}
      diff --git a/statusnet/codebird.php b/statusnet/library/codebirdsn.php
      similarity index 100%
      rename from statusnet/codebird.php
      rename to statusnet/library/codebirdsn.php
      diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php
      new file mode 100644
      index 00000000..beed59e7
      --- /dev/null
      +++ b/statusnet/library/statusnetoauth.php
      @@ -0,0 +1,102 @@
      +get($this->host . 'statusnet/config.json');
      +		return $config->site->textlimit;
      +	}
      +
      +	function accessTokenURL()
      +	{
      +		return $this->host . 'oauth/access_token';
      +	}
      +
      +	function authenticateURL()
      +	{
      +		return $this->host . 'oauth/authenticate';
      +	}
      +
      +	function authorizeURL()
      +	{
      +		return $this->host . 'oauth/authorize';
      +	}
      +
      +	function requestTokenURL()
      +	{
      +		return $this->host . 'oauth/request_token';
      +	}
      +
      +	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      +	{
      +		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      +		$this->host = $apipath;
      +	}
      +
      +	/**
      +	 * Make an HTTP request
      +	 *
      +	 * Copied here from the TwitterOAuth library and complemented by applying the proxy settings of Friendica
      +	 *
      +	 * @param string $method
      +	 * @param string $host
      +	 * @param string $path
      +	 * @param array  $parameters
      +	 *
      +	 * @return array|object API results
      +	 */
      +	function http($url, $method, $postfields = NULL)
      +	{
      +		$this->http_info = [];
      +		$ci = curl_init();
      +		/* Curl settings */
      +		$prx = Config::get('system', 'proxy');
      +		if (strlen($prx)) {
      +			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      +			curl_setopt($ci, CURLOPT_PROXY, $prx);
      +			$prxusr = Config::get('system', 'proxyuser');
      +			if (strlen($prxusr)) {
      +				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      +			}
      +		}
      +		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      +		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      +		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +		switch ($method) {
      +			case 'POST':
      +				curl_setopt($ci, CURLOPT_POST, TRUE);
      +				if (!empty($postfields)) {
      +					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +				}
      +				break;
      +			case 'DELETE':
      +				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +				if (!empty($postfields)) {
      +					$url = "{$url}?{$postfields}";
      +				}
      +		}
      +
      +		curl_setopt($ci, CURLOPT_URL, $url);
      +		$response = curl_exec($ci);
      +		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +		$this->url = $url;
      +		curl_close($ci);
      +		return $response;
      +	}
      +}
      diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php
      new file mode 100644
      index 00000000..323156eb
      --- /dev/null
      +++ b/statusnet/library/twitteroauth.php
      @@ -0,0 +1,280 @@
      +http_status;
      +	}
      +
      +	function lastAPICall()
      +	{
      +		return $this->last_api_call;
      +	}
      +
      +	/**
      +	 * construct TwitterOAuth object
      +	 */
      +	function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      +	{
      +		$this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      +		$this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      +		if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      +			$this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      +		} else {
      +			$this->token = NULL;
      +		}
      +	}
      +
      +	/**
      +	 * Get a request_token from Twitter
      +	 *
      +	 * @returns a key/value array containing oauth_token and oauth_token_secret
      +	 */
      +	function getRequestToken($oauth_callback = NULL)
      +	{
      +		$parameters = array();
      +		if (!empty($oauth_callback)) {
      +			$parameters['oauth_callback'] = $oauth_callback;
      +		}
      +		$request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * Get the authorize URL
      +	 *
      +	 * @returns a string
      +	 */
      +	function getAuthorizeURL($token, $sign_in_with_twitter = TRUE)
      +	{
      +		if (is_array($token)) {
      +			$token = $token['oauth_token'];
      +		}
      +		if (empty($sign_in_with_twitter)) {
      +			return $this->authorizeURL() . "?oauth_token={$token}";
      +		} else {
      +			return $this->authenticateURL() . "?oauth_token={$token}";
      +		}
      +	}
      +
      +	/**
      +	 * Exchange request token and secret for an access token and
      +	 * secret, to sign API calls.
      +	 *
      +	 * @returns array("oauth_token" => "the-access-token",
      +	 *                "oauth_token_secret" => "the-access-secret",
      +	 *                "user_id" => "9436992",
      +	 *                "screen_name" => "abraham")
      +	 */
      +	function getAccessToken($oauth_verifier = FALSE)
      +	{
      +		$parameters = array();
      +		if (!empty($oauth_verifier)) {
      +			$parameters['oauth_verifier'] = $oauth_verifier;
      +		}
      +		$request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * One time exchange of username and password for access token and secret.
      +	 *
      +	 * @returns array("oauth_token" => "the-access-token",
      +	 *                "oauth_token_secret" => "the-access-secret",
      +	 *                "user_id" => "9436992",
      +	 *                "screen_name" => "abraham",
      +	 *                "x_auth_expires" => "0")
      +	 */
      +	function getXAuthToken($username, $password)
      +	{
      +		$parameters = array();
      +		$parameters['x_auth_username'] = $username;
      +		$parameters['x_auth_password'] = $password;
      +		$parameters['x_auth_mode'] = 'client_auth';
      +		$request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      +		$token = OAuthUtil::parse_parameters($request);
      +		$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +		return $token;
      +	}
      +
      +	/**
      +	 * GET wrapper for oAuthRequest.
      +	 */
      +	function get($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'GET', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * POST wrapper for oAuthRequest.
      +	 */
      +	function post($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'POST', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * DELETE wrapper for oAuthReqeust.
      +	 */
      +	function delete($url, $parameters = array())
      +	{
      +		$response = $this->oAuthRequest($url, 'DELETE', $parameters);
      +		if ($this->format === 'json' && $this->decode_json) {
      +			return json_decode($response);
      +		}
      +		return $response;
      +	}
      +
      +	/**
      +	 * Format and sign an OAuth / API request
      +	 */
      +	function oAuthRequest($url, $method, $parameters)
      +	{
      +		if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      +			$url = "{$this->host}{$url}.{$this->format}";
      +		}
      +		$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      +		$request->sign_request($this->sha1_method, $this->consumer, $this->token);
      +		switch ($method) {
      +			case 'GET':
      +				return $this->http($request->to_url(), 'GET');
      +			case 'UPLOAD':
      +				return $this->http($request->get_normalized_http_url(), 'POST', $request->to_postdata(true));
      +			default:
      +				return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      +		}
      +	}
      +
      +	/**
      +	 * Make an HTTP request
      +	 *
      +	 * @return API results
      +	 */
      +	function http($url, $method, $postfields = NULL)
      +	{
      +		$this->http_info = array();
      +		$ci = curl_init();
      +		/* Curl settings */
      +		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +		curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      +		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +		curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      +		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +		switch ($method) {
      +			case 'POST':
      +				curl_setopt($ci, CURLOPT_POST, TRUE);
      +				if (!empty($postfields)) {
      +					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +				}
      +				break;
      +			case 'DELETE':
      +				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +				if (!empty($postfields)) {
      +					$url = "{$url}?{$postfields}";
      +				}
      +		}
      +
      +		curl_setopt($ci, CURLOPT_URL, $url);
      +		$response = curl_exec($ci);
      +		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +		$this->url = $url;
      +		curl_close($ci);
      +		return $response;
      +	}
      +
      +	/**
      +	 * Get the header info to store.
      +	 */
      +	function getHeader($ch, $header)
      +	{
      +		$i = strpos($header, ':');
      +		if (!empty($i)) {
      +			$key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      +			$value = trim(substr($header, $i + 2));
      +			$this->http_header[$key] = $value;
      +		}
      +		return strlen($header);
      +	}
      +}
      diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php
      index 7308f223..7ef171f7 100644
      --- a/statusnet/statusnet.php
      +++ b/statusnet/statusnet.php
      @@ -33,16 +33,9 @@
        * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        *
        */
      -/*
      - * We have to alter the TwitterOAuth class a little bit to work with any GNU Social
      - * installation abroad. Basically it's only make the API path variable and be happy.
      - *
      - * Thank you guys for the Twitter compatible API!
      - */
      -
       define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes
       
      -require_once 'library/twitteroauth.php';
      +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php';
       require_once 'include/enotify.php';
       
       use Friendica\App;
      @@ -60,94 +53,6 @@ use Friendica\Model\Photo;
       use Friendica\Model\User;
       use Friendica\Util\Network;
       
      -class StatusNetOAuth extends TwitterOAuth
      -{
      -	function get_maxlength()
      -	{
      -		$config = $this->get($this->host . 'statusnet/config.json');
      -		return $config->site->textlimit;
      -	}
      -
      -	function accessTokenURL()
      -	{
      -		return $this->host . 'oauth/access_token';
      -	}
      -
      -	function authenticateURL()
      -	{
      -		return $this->host . 'oauth/authenticate';
      -	}
      -
      -	function authorizeURL()
      -	{
      -		return $this->host . 'oauth/authorize';
      -	}
      -
      -	function requestTokenURL()
      -	{
      -		return $this->host . 'oauth/request_token';
      -	}
      -
      -	function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
      -	{
      -		parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
      -		$this->host = $apipath;
      -	}
      -
      -	/**
      -	 * Make an HTTP request
      -	 *
      -	 * @return API results
      -	 *
      -	 * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica
      -	 */
      -	function http($url, $method, $postfields = NULL)
      -	{
      -		$this->http_info = [];
      -		$ci = curl_init();
      -		/* Curl settings */
      -		$prx = Config::get('system', 'proxy');
      -		if (strlen($prx)) {
      -			curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
      -			curl_setopt($ci, CURLOPT_PROXY, $prx);
      -			$prxusr = Config::get('system', 'proxyuser');
      -			if (strlen($prxusr)) {
      -				curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
      -			}
      -		}
      -		curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -		curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -		curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -		curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']);
      -		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -		curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']);
      -		curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -		switch ($method) {
      -			case 'POST':
      -				curl_setopt($ci, CURLOPT_POST, TRUE);
      -				if (!empty($postfields)) {
      -					curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -				}
      -				break;
      -			case 'DELETE':
      -				curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -				if (!empty($postfields)) {
      -					$url = "{$url}?{$postfields}";
      -				}
      -		}
      -
      -		curl_setopt($ci, CURLOPT_URL, $url);
      -		$response = curl_exec($ci);
      -		$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -		$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -		$this->url = $url;
      -		curl_close($ci);
      -		return $response;
      -	}
      -}
      -
       function statusnet_install()
       {
       	//  we need some hooks, for the configuration and for sending tweets
      @@ -671,7 +576,7 @@ function statusnet_post_hook(App $a, &$b)
       			$postdata = ["status" => $msg];
       		}
       
      -		// and now dent it :-)
      +		// and now send it :-)
       		if (strlen($msg)) {
       			if ($iscomment) {
       				$postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength);
      @@ -679,7 +584,7 @@ function statusnet_post_hook(App $a, &$b)
       			}
       
       			// New code that is able to post pictures
      -			require_once "addon/statusnet/codebird.php";
      +			require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
       			$cb = \CodebirdSN\CodebirdSN::getInstance();
       			$cb->setAPIEndpoint($api);
       			$cb->setConsumerKey($ckey, $csecret);
      @@ -1131,9 +1036,9 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
       	$otoken  = PConfig::get($uid, 'statusnet', 'oauthtoken');
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       
      -	require_once "addon/statusnet/codebird.php";
      +	require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php';
       
      -	$cb = \Codebird\Codebird::getInstance();
      +	$cb = \CodebirdSN\CodebirdSN::getInstance();
       	$cb->setConsumerKey($ckey, $csecret);
       	$cb->setToken($otoken, $osecret);
       
      @@ -1403,7 +1308,6 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
       
       	logger("statusnet_fetchhometimeline: Fetching for user " . $uid, LOGGER_DEBUG);
       
      -	require_once 'library/twitteroauth.php';
       	require_once 'include/items.php';
       
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
      @@ -1604,8 +1508,6 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic
       	$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
       	$own_url = PConfig::get($uid, 'statusnet', 'own_url');
       
      -	require_once 'library/twitteroauth.php';
      -
       	$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       	$parameters["count"] = 200;
      @@ -1756,8 +1658,6 @@ function statusnet_fetch_own_contact(App $a, $uid)
       	$contact_id = 0;
       
       	if ($own_url == "") {
      -		require_once 'library/twitteroauth.php';
      -
       		$connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
       
       		// Fetching user data
      
      From 27ce9c3f3ca999fb8cbfa6bb715c564dfcbe6912 Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Sun, 28 Jan 2018 14:43:56 -0500
      Subject: [PATCH 033/116] Move Tumblr addon dependencies to library subfolder
      
      - Move OAuth1 to library/OAuth1.php
      - Move TumblOAuth to library/tumblroauth.php
      ---
       tumblr/library/OAuth1.php                     | 874 ++++++++++++++++++
       .../{tumblroauth => library}/tumblroauth.php  | 490 +++++-----
       tumblr/tumblr.php                             |   3 +-
       tumblr/tumblroauth/OAuth.php                  | 874 ------------------
       4 files changed, 1120 insertions(+), 1121 deletions(-)
       create mode 100644 tumblr/library/OAuth1.php
       rename tumblr/{tumblroauth => library}/tumblroauth.php (95%)
       delete mode 100644 tumblr/tumblroauth/OAuth.php
      
      diff --git a/tumblr/library/OAuth1.php b/tumblr/library/OAuth1.php
      new file mode 100644
      index 00000000..6b7a6a9e
      --- /dev/null
      +++ b/tumblr/library/OAuth1.php
      @@ -0,0 +1,874 @@
      +key = $key;
      +		$this->secret = $secret;
      +		$this->callback_url = $callback_url;
      +	  }
      +
      +	  function __toString() {
      +		return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      +	  }
      +	}
      +
      +	class OAuthToken {
      +	  // access tokens and request tokens
      +	  public $key;
      +	  public $secret;
      +
      +	  /**
      +	   * key = the token
      +	   * secret = the token secret
      +	   */
      +	  function __construct($key, $secret) {
      +		$this->key = $key;
      +		$this->secret = $secret;
      +	  }
      +
      +	  /**
      +	   * generates the basic string serialization of a token that a server
      +	   * would respond to request_token and access_token calls with
      +	   */
      +	  function to_string() {
      +		return "oauth_token=" .
      +			   OAuthUtil::urlencode_rfc3986($this->key) .
      +			   "&oauth_token_secret=" .
      +			   OAuthUtil::urlencode_rfc3986($this->secret);
      +	  }
      +
      +	  function __toString() {
      +		return $this->to_string();
      +	  }
      +	}
      +
      +	/**
      +	 * A class for implementing a Signature Method
      +	 * See section 9 ("Signing Requests") in the spec
      +	 */
      +	abstract class OAuthSignatureMethod {
      +	  /**
      +	   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      +	   * @return string
      +	   */
      +	  abstract public function get_name();
      +
      +	  /**
      +	   * Build up the signature
      +	   * NOTE: The output of this function MUST NOT be urlencoded.
      +	   * the encoding is handled in OAuthRequest when the final
      +	   * request is serialized
      +	   * @param OAuthRequest $request
      +	   * @param OAuthConsumer $consumer
      +	   * @param OAuthToken $token
      +	   * @return string
      +	   */
      +	  abstract public function build_signature($request, $consumer, $token);
      +
      +	  /**
      +	   * Verifies that a given signature is correct
      +	   * @param OAuthRequest $request
      +	   * @param OAuthConsumer $consumer
      +	   * @param OAuthToken $token
      +	   * @param string $signature
      +	   * @return bool
      +	   */
      +	  public function check_signature($request, $consumer, $token, $signature) {
      +		$built = $this->build_signature($request, $consumer, $token);
      +		return $built == $signature;
      +	  }
      +	}
      +
      +	/**
      +	 * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
      +	 * where the Signature Base String is the text and the key is the concatenated values (each first
      +	 * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
      +	 * character (ASCII code 38) even if empty.
      +	 *   - Chapter 9.2 ("HMAC-SHA1")
      +	 */
      +	class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      +	  function get_name() {
      +		return "HMAC-SHA1";
      +	  }
      +
      +	  public function build_signature($request, $consumer, $token) {
      +		$base_string = $request->get_signature_base_string();
      +		$request->base_string = $base_string;
      +
      +		$key_parts = array(
      +		  $consumer->secret,
      +		  ($token) ? $token->secret : ""
      +		);
      +
      +		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +		$key = implode('&', $key_parts);
      +
      +		return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      +	  }
      +	}
      +
      +	/**
      +	 * The PLAINTEXT method does not provide any security protection and SHOULD only be used
      +	 * over a secure channel such as HTTPS. It does not use the Signature Base String.
      +	 *   - Chapter 9.4 ("PLAINTEXT")
      +	 */
      +	class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      +	  public function get_name() {
      +		return "PLAINTEXT";
      +	  }
      +
      +	  /**
      +	   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
      +	   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
      +	   * empty. The result MUST be encoded again.
      +	   *   - Chapter 9.4.1 ("Generating Signatures")
      +	   *
      +	   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      +	   * OAuthRequest handles this!
      +	   */
      +	  public function build_signature($request, $consumer, $token) {
      +		$key_parts = array(
      +		  $consumer->secret,
      +		  ($token) ? $token->secret : ""
      +		);
      +
      +		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      +		$key = implode('&', $key_parts);
      +		$request->base_string = $key;
      +
      +		return $key;
      +	  }
      +	}
      +
      +	/**
      +	 * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
      +	 * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
      +	 * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
      +	 * verified way to the Service Provider, in a manner which is beyond the scope of this
      +	 * specification.
      +	 *   - Chapter 9.3 ("RSA-SHA1")
      +	 */
      +	abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      +	  public function get_name() {
      +		return "RSA-SHA1";
      +	  }
      +
      +	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +	  // (2) fetch via http using a url provided by the requester
      +	  // (3) some sort of specific discovery code based on request
      +	  //
      +	  // Either way should return a string representation of the certificate
      +	  protected abstract function fetch_public_cert(&$request);
      +
      +	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      +	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      +	  //
      +	  // Either way should return a string representation of the certificate
      +	  protected abstract function fetch_private_cert(&$request);
      +
      +	  public function build_signature($request, $consumer, $token) {
      +		$base_string = $request->get_signature_base_string();
      +		$request->base_string = $base_string;
      +
      +		// Fetch the private key cert based on the request
      +		$cert = $this->fetch_private_cert($request);
      +
      +		// Pull the private key ID from the certificate
      +		$privatekeyid = openssl_get_privatekey($cert);
      +
      +		// Sign using the key
      +		$ok = openssl_sign($base_string, $signature, $privatekeyid);
      +
      +		// Release the key resource
      +		openssl_free_key($privatekeyid);
      +
      +		return base64_encode($signature);
      +	  }
      +
      +	  public function check_signature($request, $consumer, $token, $signature) {
      +		$decoded_sig = base64_decode($signature);
      +
      +		$base_string = $request->get_signature_base_string();
      +
      +		// Fetch the public key cert based on the request
      +		$cert = $this->fetch_public_cert($request);
      +
      +		// Pull the public key ID from the certificate
      +		$publickeyid = openssl_get_publickey($cert);
      +
      +		// Check the computed signature against the one passed in the query
      +		$ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      +
      +		// Release the key resource
      +		openssl_free_key($publickeyid);
      +
      +		return $ok == 1;
      +	  }
      +	}
      +
      +	class OAuthRequest {
      +	  private $parameters;
      +	  private $http_method;
      +	  private $http_url;
      +	  // for debug purposes
      +	  public $base_string;
      +	  public static $version = '1.0';
      +	  public static $POST_INPUT = 'php://input';
      +
      +	  function __construct($http_method, $http_url, $parameters=NULL) {
      +		@$parameters or $parameters = array();
      +		$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      +		$this->parameters = $parameters;
      +		$this->http_method = $http_method;
      +		$this->http_url = $http_url;
      +	  }
      +
      +
      +	  /**
      +	   * attempt to build up a request from what was passed to the server
      +	   */
      +	  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      +		$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      +				  ? 'http'
      +				  : 'https';
      +		@$http_url or $http_url = $scheme .
      +								  '://' . $_SERVER['HTTP_HOST'] .
      +								  ':' .
      +								  $_SERVER['SERVER_PORT'] .
      +								  $_SERVER['REQUEST_URI'];
      +		@$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      +
      +		// We weren't handed any parameters, so let's find the ones relevant to
      +		// this request.
      +		// If you run XML-RPC or similar you should use this to provide your own
      +		// parsed parameter-list
      +		if (!$parameters) {
      +		  // Find request headers
      +		  $request_headers = OAuthUtil::get_headers();
      +
      +		  // Parse the query-string to find GET parameters
      +		  $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      +
      +		  // It's a POST request of the proper content-type, so parse POST
      +		  // parameters and add those overriding any duplicates from GET
      +		  if ($http_method == "POST"
      +			  && @strstr($request_headers["Content-Type"],
      +						 "application/x-www-form-urlencoded")
      +			  ) {
      +			$post_data = OAuthUtil::parse_parameters(
      +			  file_get_contents(self::$POST_INPUT)
      +			);
      +			$parameters = array_merge($parameters, $post_data);
      +		  }
      +
      +		  // We have a Authorization-header with OAuth data. Parse the header
      +		  // and add those overriding any duplicates from GET or POST
      +		  if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      +			$header_parameters = OAuthUtil::split_header(
      +			  $request_headers['Authorization']
      +			);
      +			$parameters = array_merge($parameters, $header_parameters);
      +		  }
      +
      +		}
      +
      +		return new OAuthRequest($http_method, $http_url, $parameters);
      +	  }
      +
      +	  /**
      +	   * pretty much a helper function to set up the request
      +	   */
      +	  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      +		@$parameters or $parameters = array();
      +		$defaults = array("oauth_version" => OAuthRequest::$version,
      +						  "oauth_nonce" => OAuthRequest::generate_nonce(),
      +						  "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      +						  "oauth_consumer_key" => $consumer->key);
      +		if ($token)
      +		  $defaults['oauth_token'] = $token->key;
      +
      +		$parameters = array_merge($defaults, $parameters);
      +
      +		return new OAuthRequest($http_method, $http_url, $parameters);
      +	  }
      +
      +	  public function set_parameter($name, $value, $allow_duplicates = true) {
      +		if ($allow_duplicates && isset($this->parameters[$name])) {
      +		  // We have already added parameter(s) with this name, so add to the list
      +		  if (is_scalar($this->parameters[$name])) {
      +			// This is the first duplicate, so transform scalar (string)
      +			// into an array so we can add the duplicates
      +			$this->parameters[$name] = array($this->parameters[$name]);
      +		  }
      +
      +		  $this->parameters[$name][] = $value;
      +		} else {
      +		  $this->parameters[$name] = $value;
      +		}
      +	  }
      +
      +	  public function get_parameter($name) {
      +		return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      +	  }
      +
      +	  public function get_parameters() {
      +		return $this->parameters;
      +	  }
      +
      +	  public function unset_parameter($name) {
      +		unset($this->parameters[$name]);
      +	  }
      +
      +	  /**
      +	   * The request parameters, sorted and concatenated into a normalized string.
      +	   * @return string
      +	   */
      +	  public function get_signable_parameters() {
      +		// Grab all parameters
      +		$params = $this->parameters;
      +
      +		// Remove oauth_signature if present
      +		// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      +		if (isset($params['oauth_signature'])) {
      +		  unset($params['oauth_signature']);
      +		}
      +
      +		return OAuthUtil::build_http_query($params);
      +	  }
      +
      +	  /**
      +	   * Returns the base string of this request
      +	   *
      +	   * The base string defined as the method, the url
      +	   * and the parameters (normalized), each urlencoded
      +	   * and the concated with &.
      +	   */
      +	  public function get_signature_base_string() {
      +		$parts = array(
      +		  $this->get_normalized_http_method(),
      +		  $this->get_normalized_http_url(),
      +		  $this->get_signable_parameters()
      +		);
      +
      +		$parts = OAuthUtil::urlencode_rfc3986($parts);
      +
      +		return implode('&', $parts);
      +	  }
      +
      +	  /**
      +	   * just uppercases the http method
      +	   */
      +	  public function get_normalized_http_method() {
      +		return strtoupper($this->http_method);
      +	  }
      +
      +	  /**
      +	   * parses the url and rebuilds it to be
      +	   * scheme://host/path
      +	   */
      +	  public function get_normalized_http_url() {
      +		$parts = parse_url($this->http_url);
      +
      +		$port = @$parts['port'];
      +		$scheme = $parts['scheme'];
      +		$host = $parts['host'];
      +		$path = @$parts['path'];
      +
      +		$port or $port = ($scheme == 'https') ? '443' : '80';
      +
      +		if (($scheme == 'https' && $port != '443')
      +			|| ($scheme == 'http' && $port != '80')) {
      +		  $host = "$host:$port";
      +		}
      +		return "$scheme://$host$path";
      +	  }
      +
      +	  /**
      +	   * builds a url usable for a GET request
      +	   */
      +	  public function to_url() {
      +		$post_data = $this->to_postdata();
      +		$out = $this->get_normalized_http_url();
      +		if ($post_data) {
      +		  $out .= '?'.$post_data;
      +		}
      +		return $out;
      +	  }
      +
      +	  /**
      +	   * builds the data one would send in a POST request
      +	   */
      +	  public function to_postdata() {
      +		return OAuthUtil::build_http_query($this->parameters);
      +	  }
      +
      +	  /**
      +	   * builds the Authorization: header
      +	   */
      +	  public function to_header($realm=null) {
      +		$first = true;
      +		if($realm) {
      +		  $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      +		  $first = false;
      +		} else
      +		  $out = 'Authorization: OAuth';
      +
      +		$total = array();
      +		foreach ($this->parameters as $k => $v) {
      +		  if (substr($k, 0, 5) != "oauth") continue;
      +		  if (is_array($v)) {
      +			throw new OAuthException('Arrays not supported in headers');
      +		  }
      +		  $out .= ($first) ? ' ' : ',';
      +		  $out .= OAuthUtil::urlencode_rfc3986($k) .
      +				  '="' .
      +				  OAuthUtil::urlencode_rfc3986($v) .
      +				  '"';
      +		  $first = false;
      +		}
      +		return $out;
      +	  }
      +
      +	  public function __toString() {
      +		return $this->to_url();
      +	  }
      +
      +
      +	  public function sign_request($signature_method, $consumer, $token) {
      +		$this->set_parameter(
      +		  "oauth_signature_method",
      +		  $signature_method->get_name(),
      +		  false
      +		);
      +		$signature = $this->build_signature($signature_method, $consumer, $token);
      +		$this->set_parameter("oauth_signature", $signature, false);
      +	  }
      +
      +	  public function build_signature($signature_method, $consumer, $token) {
      +		$signature = $signature_method->build_signature($this, $consumer, $token);
      +		return $signature;
      +	  }
      +
      +	  /**
      +	   * util function: current timestamp
      +	   */
      +	  private static function generate_timestamp() {
      +		return time();
      +	  }
      +
      +	  /**
      +	   * util function: current nonce
      +	   */
      +	  private static function generate_nonce() {
      +		$mt = microtime();
      +		$rand = mt_rand();
      +
      +		return md5($mt . $rand); // md5s look nicer than numbers
      +	  }
      +	}
      +
      +	class OAuthServer {
      +	  protected $timestamp_threshold = 300; // in seconds, five minutes
      +	  protected $version = '1.0';             // hi blaine
      +	  protected $signature_methods = array();
      +
      +	  protected $data_store;
      +
      +	  function __construct($data_store) {
      +		$this->data_store = $data_store;
      +	  }
      +
      +	  public function add_signature_method($signature_method) {
      +		$this->signature_methods[$signature_method->get_name()] =
      +		  $signature_method;
      +	  }
      +
      +	  // high level functions
      +
      +	  /**
      +	   * process a request_token request
      +	   * returns the request token on success
      +	   */
      +	  public function fetch_request_token(&$request) {
      +		$this->get_version($request);
      +
      +		$consumer = $this->get_consumer($request);
      +
      +		// no token required for the initial token request
      +		$token = NULL;
      +
      +		$this->check_signature($request, $consumer, $token);
      +
      +		// Rev A change
      +		$callback = $request->get_parameter('oauth_callback');
      +		$new_token = $this->data_store->new_request_token($consumer, $callback);
      +
      +		return $new_token;
      +	  }
      +
      +	  /**
      +	   * process an access_token request
      +	   * returns the access token on success
      +	   */
      +	  public function fetch_access_token(&$request) {
      +		$this->get_version($request);
      +
      +		$consumer = $this->get_consumer($request);
      +
      +		// requires authorized request token
      +		$token = $this->get_token($request, $consumer, "request");
      +
      +		$this->check_signature($request, $consumer, $token);
      +
      +		// Rev A change
      +		$verifier = $request->get_parameter('oauth_verifier');
      +		$new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      +
      +		return $new_token;
      +	  }
      +
      +	  /**
      +	   * verify an api call, checks all the parameters
      +	   */
      +	  public function verify_request(&$request) {
      +		$this->get_version($request);
      +		$consumer = $this->get_consumer($request);
      +		$token = $this->get_token($request, $consumer, "access");
      +		$this->check_signature($request, $consumer, $token);
      +		return array($consumer, $token);
      +	  }
      +
      +	  // Internals from here
      +	  /**
      +	   * version 1
      +	   */
      +	  private function get_version(&$request) {
      +		$version = $request->get_parameter("oauth_version");
      +		if (!$version) {
      +		  // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
      +		  // Chapter 7.0 ("Accessing Protected Ressources")
      +		  $version = '1.0';
      +		}
      +		if ($version !== $this->version) {
      +		  throw new OAuthException("OAuth version '$version' not supported");
      +		}
      +		return $version;
      +	  }
      +
      +	  /**
      +	   * figure out the signature with some defaults
      +	   */
      +	  private function get_signature_method(&$request) {
      +		$signature_method =
      +			@$request->get_parameter("oauth_signature_method");
      +
      +		if (!$signature_method) {
      +		  // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      +		  // parameter is required, and we can't just fallback to PLAINTEXT
      +		  throw new OAuthException('No signature method parameter. This parameter is required');
      +		}
      +
      +		if (!in_array($signature_method,
      +					  array_keys($this->signature_methods))) {
      +		  throw new OAuthException(
      +			"Signature method '$signature_method' not supported " .
      +			"try one of the following: " .
      +			implode(", ", array_keys($this->signature_methods))
      +		  );
      +		}
      +		return $this->signature_methods[$signature_method];
      +	  }
      +
      +	  /**
      +	   * try to find the consumer for the provided request's consumer key
      +	   */
      +	  private function get_consumer(&$request) {
      +		$consumer_key = @$request->get_parameter("oauth_consumer_key");
      +		if (!$consumer_key) {
      +		  throw new OAuthException("Invalid consumer key");
      +		}
      +
      +		$consumer = $this->data_store->lookup_consumer($consumer_key);
      +		if (!$consumer) {
      +		  throw new OAuthException("Invalid consumer");
      +		}
      +
      +		return $consumer;
      +	  }
      +
      +	  /**
      +	   * try to find the token for the provided request's token key
      +	   */
      +	  private function get_token(&$request, $consumer, $token_type="access") {
      +		$token_field = @$request->get_parameter('oauth_token');
      +		$token = $this->data_store->lookup_token(
      +		  $consumer, $token_type, $token_field
      +		);
      +		if (!$token) {
      +		  throw new OAuthException("Invalid $token_type token: $token_field");
      +		}
      +		return $token;
      +	  }
      +
      +	  /**
      +	   * all-in-one function to check the signature on a request
      +	   * should guess the signature method appropriately
      +	   */
      +	  private function check_signature(&$request, $consumer, $token) {
      +		// this should probably be in a different method
      +		$timestamp = @$request->get_parameter('oauth_timestamp');
      +		$nonce = @$request->get_parameter('oauth_nonce');
      +
      +		$this->check_timestamp($timestamp);
      +		$this->check_nonce($consumer, $token, $nonce, $timestamp);
      +
      +		$signature_method = $this->get_signature_method($request);
      +
      +		$signature = $request->get_parameter('oauth_signature');
      +		$valid_sig = $signature_method->check_signature(
      +		  $request,
      +		  $consumer,
      +		  $token,
      +		  $signature
      +		);
      +
      +		if (!$valid_sig) {
      +		  throw new OAuthException("Invalid signature");
      +		}
      +	  }
      +
      +	  /**
      +	   * check that the timestamp is new enough
      +	   */
      +	  private function check_timestamp($timestamp) {
      +		if( ! $timestamp )
      +		  throw new OAuthException(
      +			'Missing timestamp parameter. The parameter is required'
      +		  );
      +
      +		// verify that timestamp is recentish
      +		$now = time();
      +		if (abs($now - $timestamp) > $this->timestamp_threshold) {
      +		  throw new OAuthException(
      +			"Expired timestamp, yours $timestamp, ours $now"
      +		  );
      +		}
      +	  }
      +
      +	  /**
      +	   * check that the nonce is not repeated
      +	   */
      +	  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      +		if( ! $nonce )
      +		  throw new OAuthException(
      +			'Missing nonce parameter. The parameter is required'
      +		  );
      +
      +		// verify that the nonce is uniqueish
      +		$found = $this->data_store->lookup_nonce(
      +		  $consumer,
      +		  $token,
      +		  $nonce,
      +		  $timestamp
      +		);
      +		if ($found) {
      +		  throw new OAuthException("Nonce already used: $nonce");
      +		}
      +	  }
      +
      +	}
      +
      +	class OAuthDataStore {
      +	  function lookup_consumer($consumer_key) {
      +		// implement me
      +	  }
      +
      +	  function lookup_token($consumer, $token_type, $token) {
      +		// implement me
      +	  }
      +
      +	  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      +		// implement me
      +	  }
      +
      +	  function new_request_token($consumer, $callback = null) {
      +		// return a new token attached to this consumer
      +	  }
      +
      +	  function new_access_token($token, $consumer, $verifier = null) {
      +		// return a new access token attached to this consumer
      +		// for the user associated with this token if the request token
      +		// is authorized
      +		// should also invalidate the request token
      +	  }
      +
      +	}
      +
      +	class OAuthUtil {
      +	  public static function urlencode_rfc3986($input) {
      +	  if (is_array($input)) {
      +		return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      +	  } else if (is_scalar($input)) {
      +		return str_replace(
      +		  '+',
      +		  ' ',
      +		  str_replace('%7E', '~', rawurlencode($input))
      +		);
      +	  } else {
      +		return '';
      +	  }
      +	}
      +
      +
      +	  // This decode function isn't taking into consideration the above
      +	  // modifications to the encoding process. However, this method doesn't
      +	  // seem to be used anywhere so leaving it as is.
      +	  public static function urldecode_rfc3986($string) {
      +		return urldecode($string);
      +	  }
      +
      +	  // Utility function for turning the Authorization: header into
      +	  // parameters, has to do some unescaping
      +	  // Can filter out any non-oauth parameters if needed (default behaviour)
      +	  public static function split_header($header, $only_allow_oauth_parameters = true) {
      +		$pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      +		$offset = 0;
      +		$params = array();
      +		while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      +		  $match = $matches[0];
      +		  $header_name = $matches[2][0];
      +		  $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      +		  if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      +			$params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      +		  }
      +		  $offset = $match[1] + strlen($match[0]);
      +		}
      +
      +		if (isset($params['realm'])) {
      +		  unset($params['realm']);
      +		}
      +
      +		return $params;
      +	  }
      +
      +	  // helper to try to sort out headers for people who aren't running apache
      +	  public static function get_headers() {
      +		if (function_exists('apache_request_headers')) {
      +		  // we need this to get the actual Authorization: header
      +		  // because apache tends to tell us it doesn't exist
      +		  $headers = apache_request_headers();
      +
      +		  // sanitize the output of apache_request_headers because
      +		  // we always want the keys to be Cased-Like-This and arh()
      +		  // returns the headers in the same case as they are in the
      +		  // request
      +		  $out = array();
      +		  foreach( $headers AS $key => $value ) {
      +			$key = str_replace(
      +				" ",
      +				"-",
      +				ucwords(strtolower(str_replace("-", " ", $key)))
      +			  );
      +			$out[$key] = $value;
      +		  }
      +		} else {
      +		  // otherwise we don't have apache and are just going to have to hope
      +		  // that $_SERVER actually contains what we need
      +		  $out = array();
      +		  if( isset($_SERVER['CONTENT_TYPE']) )
      +			$out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      +		  if( isset($_ENV['CONTENT_TYPE']) )
      +			$out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      +
      +		  foreach ($_SERVER as $key => $value) {
      +			if (substr($key, 0, 5) == "HTTP_") {
      +			  // this is chaos, basically it is just there to capitalize the first
      +			  // letter of every word that is not an initial HTTP and strip HTTP
      +			  // code from przemek
      +			  $key = str_replace(
      +				" ",
      +				"-",
      +				ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      +			  );
      +			  $out[$key] = $value;
      +			}
      +		  }
      +		}
      +		return $out;
      +	  }
      +
      +	  // This function takes a input like a=b&a=c&d=e and returns the parsed
      +	  // parameters like this
      +	  // array('a' => array('b','c'), 'd' => 'e')
      +	  public static function parse_parameters( $input ) {
      +		if (!isset($input) || !$input) return array();
      +
      +		$pairs = explode('&', $input);
      +
      +		$parsed_parameters = array();
      +		foreach ($pairs as $pair) {
      +		  $split = explode('=', $pair, 2);
      +		  $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      +		  $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      +
      +		  if (isset($parsed_parameters[$parameter])) {
      +			// We have already recieved parameter(s) with this name, so add to the list
      +			// of parameters with this name
      +
      +			if (is_scalar($parsed_parameters[$parameter])) {
      +			  // This is the first duplicate, so transform scalar (string) into an array
      +			  // so we can add the duplicates
      +			  $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      +			}
      +
      +			$parsed_parameters[$parameter][] = $value;
      +		  } else {
      +			$parsed_parameters[$parameter] = $value;
      +		  }
      +		}
      +		return $parsed_parameters;
      +	  }
      +
      +	  public static function build_http_query($params) {
      +		if (!$params) return '';
      +
      +		// Urlencode both keys and values
      +		$keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      +		$values = OAuthUtil::urlencode_rfc3986(array_values($params));
      +		$params = array_combine($keys, $values);
      +
      +		// Parameters are sorted by name, using lexicographical byte value ordering.
      +		// Ref: Spec: 9.1.1 (1)
      +		uksort($params, 'strcmp');
      +
      +		$pairs = array();
      +		foreach ($params as $parameter => $value) {
      +		  if (is_array($value)) {
      +			// If two or more parameters share the same name, they are sorted by their value
      +			// Ref: Spec: 9.1.1 (1)
      +			natsort($value);
      +			foreach ($value as $duplicate_value) {
      +			  $pairs[] = $parameter . '=' . $duplicate_value;
      +			}
      +		  } else {
      +			$pairs[] = $parameter . '=' . $value;
      +		  }
      +		}
      +		// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      +		// Each name-value pair is separated by an '&' character (ASCII code 38)
      +		return implode('&', $pairs);
      +	  }
      +	}
      +}
      diff --git a/tumblr/tumblroauth/tumblroauth.php b/tumblr/library/tumblroauth.php
      similarity index 95%
      rename from tumblr/tumblroauth/tumblroauth.php
      rename to tumblr/library/tumblroauth.php
      index 3c6f13c1..365744eb 100644
      --- a/tumblr/tumblroauth/tumblroauth.php
      +++ b/tumblr/library/tumblroauth.php
      @@ -1,245 +1,245 @@
      -http_status; }
      -  function lastAPICall() { return $this->last_api_call; }
      -
      -  /**
      -   * construct TumblrOAuth object
      -   */
      -  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      -    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      -    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      -    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      -      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      -    } else {
      -      $this->token = NULL;
      -    }
      -  }
      -
      -
      -  /**
      -   * Get a request_token from Tumblr
      -   *
      -   * @returns a key/value array containing oauth_token and oauth_token_secret
      -   */
      -  function getRequestToken($oauth_callback = NULL) {
      -    $parameters = array();
      -    if (!empty($oauth_callback)) {
      -      $parameters['oauth_callback'] = $oauth_callback;
      -    } 
      -    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * Get the authorize URL
      -   *
      -   * @returns a string
      -   */
      -  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      -    if (is_array($token)) {
      -      $token = $token['oauth_token'];
      -    }
      -    if (empty($sign_in_with_tumblr)) {
      -      return $this->authorizeURL() . "?oauth_token={$token}";
      -    } else {
      -       return $this->authenticateURL() . "?oauth_token={$token}";
      -    }
      -  }
      -
      -  /**
      -   * Exchange request token and secret for an access token and
      -   * secret, to sign API calls.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham")
      -   */
      -  function getAccessToken($oauth_verifier = FALSE) {
      -    $parameters = array();
      -    if (!empty($oauth_verifier)) {
      -      $parameters['oauth_verifier'] = $oauth_verifier;
      -    }
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * One time exchange of username and password for access token and secret.
      -   *
      -   * @returns array("oauth_token" => "the-access-token",
      -   *                "oauth_token_secret" => "the-access-secret",
      -   *                "user_id" => "9436992",
      -   *                "screen_name" => "abraham",
      -   *                "x_auth_expires" => "0")
      -   */  
      -  function getXAuthToken($username, $password) {
      -    $parameters = array();
      -    $parameters['x_auth_username'] = $username;
      -    $parameters['x_auth_password'] = $password;
      -    $parameters['x_auth_mode'] = 'client_auth';
      -    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      -    $token = OAuthUtil::parse_parameters($request);
      -    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      -    return $token;
      -  }
      -
      -  /**
      -   * GET wrapper for oAuthRequest.
      -   */
      -  function get($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'GET', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -  
      -  /**
      -   * POST wrapper for oAuthRequest.
      -   */
      -  function post($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'POST', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * DELETE wrapper for oAuthReqeust.
      -   */
      -  function delete($url, $parameters = array()) {
      -    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      -    if ($this->format === 'json' && $this->decode_json) {
      -      return json_decode($response);
      -    }
      -    return $response;
      -  }
      -
      -  /**
      -   * Format and sign an OAuth / API request
      -   */
      -  function oAuthRequest($url, $method, $parameters) {
      -    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      -      $url = "{$this->host}{$url}";
      -    }
      -    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      -    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      -    switch ($method) {
      -    case 'GET':
      -      return $this->http($request->to_url(), 'GET');
      -    default:
      -      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      -    }
      -  }
      -
      -  /**
      -   * Make an HTTP request
      -   *
      -   * @return API results
      -   */
      -  function http($url, $method, $postfields = NULL) {
      -    $this->http_info = array();
      -    $ci = curl_init();
      -    /* Curl settings */
      -    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      -    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      -    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      -    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      -    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      -    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      -    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      -    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      -
      -    switch ($method) {
      -      case 'POST':
      -        curl_setopt($ci, CURLOPT_POST, TRUE);
      -        if (!empty($postfields)) {
      -          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      -        }
      -        break;
      -      case 'DELETE':
      -        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      -        if (!empty($postfields)) {
      -          $url = "{$url}?{$postfields}";
      -        }
      -    }
      -
      -    curl_setopt($ci, CURLOPT_URL, $url);
      -    $response = curl_exec($ci);
      -    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      -    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      -    $this->url = $url;
      -    curl_close ($ci);
      -    return $response;
      -  }
      -
      -  /**
      -   * Get the header info to store.
      -   */
      -  function getHeader($ch, $header) {
      -    $i = strpos($header, ':');
      -    if (!empty($i)) {
      -      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      -      $value = trim(substr($header, $i + 2));
      -      $this->http_header[$key] = $value;
      -    }
      -    return strlen($header);
      -  }
      -}
      +http_status; }
      +  function lastAPICall() { return $this->last_api_call; }
      +
      +  /**
      +   * construct TumblrOAuth object
      +   */
      +  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
      +    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
      +    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
      +    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      +      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
      +    } else {
      +      $this->token = NULL;
      +    }
      +  }
      +
      +
      +  /**
      +   * Get a request_token from Tumblr
      +   *
      +   * @returns a key/value array containing oauth_token and oauth_token_secret
      +   */
      +  function getRequestToken($oauth_callback = NULL) {
      +    $parameters = array();
      +    if (!empty($oauth_callback)) {
      +      $parameters['oauth_callback'] = $oauth_callback;
      +    }
      +    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * Get the authorize URL
      +   *
      +   * @returns a string
      +   */
      +  function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) {
      +    if (is_array($token)) {
      +      $token = $token['oauth_token'];
      +    }
      +    if (empty($sign_in_with_tumblr)) {
      +      return $this->authorizeURL() . "?oauth_token={$token}";
      +    } else {
      +       return $this->authenticateURL() . "?oauth_token={$token}";
      +    }
      +  }
      +
      +  /**
      +   * Exchange request token and secret for an access token and
      +   * secret, to sign API calls.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham")
      +   */
      +  function getAccessToken($oauth_verifier = FALSE) {
      +    $parameters = array();
      +    if (!empty($oauth_verifier)) {
      +      $parameters['oauth_verifier'] = $oauth_verifier;
      +    }
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * One time exchange of username and password for access token and secret.
      +   *
      +   * @returns array("oauth_token" => "the-access-token",
      +   *                "oauth_token_secret" => "the-access-secret",
      +   *                "user_id" => "9436992",
      +   *                "screen_name" => "abraham",
      +   *                "x_auth_expires" => "0")
      +   */
      +  function getXAuthToken($username, $password) {
      +    $parameters = array();
      +    $parameters['x_auth_username'] = $username;
      +    $parameters['x_auth_password'] = $password;
      +    $parameters['x_auth_mode'] = 'client_auth';
      +    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
      +    $token = OAuthUtil::parse_parameters($request);
      +    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
      +    return $token;
      +  }
      +
      +  /**
      +   * GET wrapper for oAuthRequest.
      +   */
      +  function get($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'GET', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * POST wrapper for oAuthRequest.
      +   */
      +  function post($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'POST', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * DELETE wrapper for oAuthReqeust.
      +   */
      +  function delete($url, $parameters = array()) {
      +    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
      +    if ($this->format === 'json' && $this->decode_json) {
      +      return json_decode($response);
      +    }
      +    return $response;
      +  }
      +
      +  /**
      +   * Format and sign an OAuth / API request
      +   */
      +  function oAuthRequest($url, $method, $parameters) {
      +    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      +      $url = "{$this->host}{$url}";
      +    }
      +    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
      +    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
      +    switch ($method) {
      +    case 'GET':
      +      return $this->http($request->to_url(), 'GET');
      +    default:
      +      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
      +    }
      +  }
      +
      +  /**
      +   * Make an HTTP request
      +   *
      +   * @return API results
      +   */
      +  function http($url, $method, $postfields = NULL) {
      +    $this->http_info = array();
      +    $ci = curl_init();
      +    /* Curl settings */
      +    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
      +    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
      +    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
      +    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
      +    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
      +    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
      +    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
      +    curl_setopt($ci, CURLOPT_HEADER, FALSE);
      +
      +    switch ($method) {
      +      case 'POST':
      +        curl_setopt($ci, CURLOPT_POST, TRUE);
      +        if (!empty($postfields)) {
      +          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
      +        }
      +        break;
      +      case 'DELETE':
      +        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
      +        if (!empty($postfields)) {
      +          $url = "{$url}?{$postfields}";
      +        }
      +    }
      +
      +    curl_setopt($ci, CURLOPT_URL, $url);
      +    $response = curl_exec($ci);
      +    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
      +    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
      +    $this->url = $url;
      +    curl_close ($ci);
      +    return $response;
      +  }
      +
      +  /**
      +   * Get the header info to store.
      +   */
      +  function getHeader($ch, $header) {
      +    $i = strpos($header, ':');
      +    if (!empty($i)) {
      +      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      +      $value = trim(substr($header, $i + 2));
      +      $this->http_header[$key] = $value;
      +    }
      +    return strlen($header);
      +  }
      +}
      diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php
      index 20a27f45..8f258f56 100644
      --- a/tumblr/tumblr.php
      +++ b/tumblr/tumblr.php
      @@ -7,8 +7,7 @@
        * Author: Michael Vogel 
        */
       
      -require_once 'library/OAuth1.php';
      -require_once 'addon/tumblr/tumblroauth/tumblroauth.php';
      +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'tumblroauth.php';
       
       use Friendica\Content\Text\BBCode;
       use Friendica\Core\Addon;
      diff --git a/tumblr/tumblroauth/OAuth.php b/tumblr/tumblroauth/OAuth.php
      deleted file mode 100644
      index 982aaa5d..00000000
      --- a/tumblr/tumblroauth/OAuth.php
      +++ /dev/null
      @@ -1,874 +0,0 @@
      -key = $key;
      -    $this->secret = $secret;
      -    $this->callback_url = $callback_url;
      -  }
      -
      -  function __toString() {
      -    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      -  }
      -}
      -
      -class OAuthToken {
      -  // access tokens and request tokens
      -  public $key;
      -  public $secret;
      -
      -  /**
      -   * key = the token
      -   * secret = the token secret
      -   */
      -  function __construct($key, $secret) {
      -    $this->key = $key;
      -    $this->secret = $secret;
      -  }
      -
      -  /**
      -   * generates the basic string serialization of a token that a server
      -   * would respond to request_token and access_token calls with
      -   */
      -  function to_string() {
      -    return "oauth_token=" .
      -           OAuthUtil::urlencode_rfc3986($this->key) .
      -           "&oauth_token_secret=" .
      -           OAuthUtil::urlencode_rfc3986($this->secret);
      -  }
      -
      -  function __toString() {
      -    return $this->to_string();
      -  }
      -}
      -
      -/**
      - * A class for implementing a Signature Method
      - * See section 9 ("Signing Requests") in the spec
      - */
      -abstract class OAuthSignatureMethod {
      -  /**
      -   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      -   * @return string
      -   */
      -  abstract public function get_name();
      -
      -  /**
      -   * Build up the signature
      -   * NOTE: The output of this function MUST NOT be urlencoded.
      -   * the encoding is handled in OAuthRequest when the final
      -   * request is serialized
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @return string
      -   */
      -  abstract public function build_signature($request, $consumer, $token);
      -
      -  /**
      -   * Verifies that a given signature is correct
      -   * @param OAuthRequest $request
      -   * @param OAuthConsumer $consumer
      -   * @param OAuthToken $token
      -   * @param string $signature
      -   * @return bool
      -   */
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $built = $this->build_signature($request, $consumer, $token);
      -    return $built == $signature;
      -  }
      -}
      -
      -/**
      - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] 
      - * where the Signature Base String is the text and the key is the concatenated values (each first 
      - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' 
      - * character (ASCII code 38) even if empty.
      - *   - Chapter 9.2 ("HMAC-SHA1")
      - */
      -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -  function get_name() {
      -    return "HMAC-SHA1";
      -  }
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -
      -    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -  }
      -}
      -
      -/**
      - * The PLAINTEXT method does not provide any security protection and SHOULD only be used 
      - * over a secure channel such as HTTPS. It does not use the Signature Base String.
      - *   - Chapter 9.4 ("PLAINTEXT")
      - */
      -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "PLAINTEXT";
      -  }
      -
      -  /**
      -   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and 
      -   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is 
      -   * empty. The result MUST be encoded again.
      -   *   - Chapter 9.4.1 ("Generating Signatures")
      -   *
      -   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -   * OAuthRequest handles this!
      -   */
      -  public function build_signature($request, $consumer, $token) {
      -    $key_parts = array(
      -      $consumer->secret,
      -      ($token) ? $token->secret : ""
      -    );
      -
      -    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -    $key = implode('&', $key_parts);
      -    $request->base_string = $key;
      -
      -    return $key;
      -  }
      -}
      -
      -/**
      - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in 
      - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for 
      - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a 
      - * verified way to the Service Provider, in a manner which is beyond the scope of this 
      - * specification.
      - *   - Chapter 9.3 ("RSA-SHA1")
      - */
      -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -  public function get_name() {
      -    return "RSA-SHA1";
      -  }
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  // (2) fetch via http using a url provided by the requester
      -  // (3) some sort of specific discovery code based on request
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_public_cert(&$request);
      -
      -  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -  //
      -  // Either way should return a string representation of the certificate
      -  protected abstract function fetch_private_cert(&$request);
      -
      -  public function build_signature($request, $consumer, $token) {
      -    $base_string = $request->get_signature_base_string();
      -    $request->base_string = $base_string;
      -
      -    // Fetch the private key cert based on the request
      -    $cert = $this->fetch_private_cert($request);
      -
      -    // Pull the private key ID from the certificate
      -    $privatekeyid = openssl_get_privatekey($cert);
      -
      -    // Sign using the key
      -    $ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($privatekeyid);
      -
      -    return base64_encode($signature);
      -  }
      -
      -  public function check_signature($request, $consumer, $token, $signature) {
      -    $decoded_sig = base64_decode($signature);
      -
      -    $base_string = $request->get_signature_base_string();
      -
      -    // Fetch the public key cert based on the request
      -    $cert = $this->fetch_public_cert($request);
      -
      -    // Pull the public key ID from the certificate
      -    $publickeyid = openssl_get_publickey($cert);
      -
      -    // Check the computed signature against the one passed in the query
      -    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -    // Release the key resource
      -    openssl_free_key($publickeyid);
      -
      -    return $ok == 1;
      -  }
      -}
      -
      -class OAuthRequest {
      -  private $parameters;
      -  private $http_method;
      -  private $http_url;
      -  // for debug purposes
      -  public $base_string;
      -  public static $version = '1.0';
      -  public static $POST_INPUT = 'php://input';
      -
      -  function __construct($http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -    $this->parameters = $parameters;
      -    $this->http_method = $http_method;
      -    $this->http_url = $http_url;
      -  }
      -
      -
      -  /**
      -   * attempt to build up a request from what was passed to the server
      -   */
      -  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -              ? 'http'
      -              : 'https';
      -    @$http_url or $http_url = $scheme .
      -                              '://' . $_SERVER['HTTP_HOST'] .
      -                              ':' .
      -                              $_SERVER['SERVER_PORT'] .
      -                              $_SERVER['REQUEST_URI'];
      -    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -    // We weren't handed any parameters, so let's find the ones relevant to
      -    // this request.
      -    // If you run XML-RPC or similar you should use this to provide your own
      -    // parsed parameter-list
      -    if (!$parameters) {
      -      // Find request headers
      -      $request_headers = OAuthUtil::get_headers();
      -
      -      // Parse the query-string to find GET parameters
      -      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -      // It's a POST request of the proper content-type, so parse POST
      -      // parameters and add those overriding any duplicates from GET
      -      if ($http_method == "POST"
      -          && @strstr($request_headers["Content-Type"],
      -                     "application/x-www-form-urlencoded")
      -          ) {
      -        $post_data = OAuthUtil::parse_parameters(
      -          file_get_contents(self::$POST_INPUT)
      -        );
      -        $parameters = array_merge($parameters, $post_data);
      -      }
      -
      -      // We have a Authorization-header with OAuth data. Parse the header
      -      // and add those overriding any duplicates from GET or POST
      -      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -        $header_parameters = OAuthUtil::split_header(
      -          $request_headers['Authorization']
      -        );
      -        $parameters = array_merge($parameters, $header_parameters);
      -      }
      -
      -    }
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  /**
      -   * pretty much a helper function to set up the request
      -   */
      -  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -    @$parameters or $parameters = array();
      -    $defaults = array("oauth_version" => OAuthRequest::$version,
      -                      "oauth_nonce" => OAuthRequest::generate_nonce(),
      -                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -                      "oauth_consumer_key" => $consumer->key);
      -    if ($token)
      -      $defaults['oauth_token'] = $token->key;
      -
      -    $parameters = array_merge($defaults, $parameters);
      -
      -    return new OAuthRequest($http_method, $http_url, $parameters);
      -  }
      -
      -  public function set_parameter($name, $value, $allow_duplicates = true) {
      -    if ($allow_duplicates && isset($this->parameters[$name])) {
      -      // We have already added parameter(s) with this name, so add to the list
      -      if (is_scalar($this->parameters[$name])) {
      -        // This is the first duplicate, so transform scalar (string)
      -        // into an array so we can add the duplicates
      -        $this->parameters[$name] = array($this->parameters[$name]);
      -      }
      -
      -      $this->parameters[$name][] = $value;
      -    } else {
      -      $this->parameters[$name] = $value;
      -    }
      -  }
      -
      -  public function get_parameter($name) {
      -    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -  }
      -
      -  public function get_parameters() {
      -    return $this->parameters;
      -  }
      -
      -  public function unset_parameter($name) {
      -    unset($this->parameters[$name]);
      -  }
      -
      -  /**
      -   * The request parameters, sorted and concatenated into a normalized string.
      -   * @return string
      -   */
      -  public function get_signable_parameters() {
      -    // Grab all parameters
      -    $params = $this->parameters;
      -
      -    // Remove oauth_signature if present
      -    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -    if (isset($params['oauth_signature'])) {
      -      unset($params['oauth_signature']);
      -    }
      -
      -    return OAuthUtil::build_http_query($params);
      -  }
      -
      -  /**
      -   * Returns the base string of this request
      -   *
      -   * The base string defined as the method, the url
      -   * and the parameters (normalized), each urlencoded
      -   * and the concated with &.
      -   */
      -  public function get_signature_base_string() {
      -    $parts = array(
      -      $this->get_normalized_http_method(),
      -      $this->get_normalized_http_url(),
      -      $this->get_signable_parameters()
      -    );
      -
      -    $parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -    return implode('&', $parts);
      -  }
      -
      -  /**
      -   * just uppercases the http method
      -   */
      -  public function get_normalized_http_method() {
      -    return strtoupper($this->http_method);
      -  }
      -
      -  /**
      -   * parses the url and rebuilds it to be
      -   * scheme://host/path
      -   */
      -  public function get_normalized_http_url() {
      -    $parts = parse_url($this->http_url);
      -
      -    $port = @$parts['port'];
      -    $scheme = $parts['scheme'];
      -    $host = $parts['host'];
      -    $path = @$parts['path'];
      -
      -    $port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -    if (($scheme == 'https' && $port != '443')
      -        || ($scheme == 'http' && $port != '80')) {
      -      $host = "$host:$port";
      -    }
      -    return "$scheme://$host$path";
      -  }
      -
      -  /**
      -   * builds a url usable for a GET request
      -   */
      -  public function to_url() {
      -    $post_data = $this->to_postdata();
      -    $out = $this->get_normalized_http_url();
      -    if ($post_data) {
      -      $out .= '?'.$post_data;
      -    }
      -    return $out;
      -  }
      -
      -  /**
      -   * builds the data one would send in a POST request
      -   */
      -  public function to_postdata() {
      -    return OAuthUtil::build_http_query($this->parameters);
      -  }
      -
      -  /**
      -   * builds the Authorization: header
      -   */
      -  public function to_header($realm=null) {
      -    $first = true;
      -	if($realm) {
      -      $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -      $first = false;
      -    } else
      -      $out = 'Authorization: OAuth';
      -
      -    $total = array();
      -    foreach ($this->parameters as $k => $v) {
      -      if (substr($k, 0, 5) != "oauth") continue;
      -      if (is_array($v)) {
      -        throw new OAuthException('Arrays not supported in headers');
      -      }
      -      $out .= ($first) ? ' ' : ',';
      -      $out .= OAuthUtil::urlencode_rfc3986($k) .
      -              '="' .
      -              OAuthUtil::urlencode_rfc3986($v) .
      -              '"';
      -      $first = false;
      -    }
      -    return $out;
      -  }
      -
      -  public function __toString() {
      -    return $this->to_url();
      -  }
      -
      -
      -  public function sign_request($signature_method, $consumer, $token) {
      -    $this->set_parameter(
      -      "oauth_signature_method",
      -      $signature_method->get_name(),
      -      false
      -    );
      -    $signature = $this->build_signature($signature_method, $consumer, $token);
      -    $this->set_parameter("oauth_signature", $signature, false);
      -  }
      -
      -  public function build_signature($signature_method, $consumer, $token) {
      -    $signature = $signature_method->build_signature($this, $consumer, $token);
      -    return $signature;
      -  }
      -
      -  /**
      -   * util function: current timestamp
      -   */
      -  private static function generate_timestamp() {
      -    return time();
      -  }
      -
      -  /**
      -   * util function: current nonce
      -   */
      -  private static function generate_nonce() {
      -    $mt = microtime();
      -    $rand = mt_rand();
      -
      -    return md5($mt . $rand); // md5s look nicer than numbers
      -  }
      -}
      -
      -class OAuthServer {
      -  protected $timestamp_threshold = 300; // in seconds, five minutes
      -  protected $version = '1.0';             // hi blaine
      -  protected $signature_methods = array();
      -
      -  protected $data_store;
      -
      -  function __construct($data_store) {
      -    $this->data_store = $data_store;
      -  }
      -
      -  public function add_signature_method($signature_method) {
      -    $this->signature_methods[$signature_method->get_name()] =
      -      $signature_method;
      -  }
      -
      -  // high level functions
      -
      -  /**
      -   * process a request_token request
      -   * returns the request token on success
      -   */
      -  public function fetch_request_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // no token required for the initial token request
      -    $token = NULL;
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $callback = $request->get_parameter('oauth_callback');
      -    $new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * process an access_token request
      -   * returns the access token on success
      -   */
      -  public function fetch_access_token(&$request) {
      -    $this->get_version($request);
      -
      -    $consumer = $this->get_consumer($request);
      -
      -    // requires authorized request token
      -    $token = $this->get_token($request, $consumer, "request");
      -
      -    $this->check_signature($request, $consumer, $token);
      -
      -    // Rev A change
      -    $verifier = $request->get_parameter('oauth_verifier');
      -    $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -    return $new_token;
      -  }
      -
      -  /**
      -   * verify an api call, checks all the parameters
      -   */
      -  public function verify_request(&$request) {
      -    $this->get_version($request);
      -    $consumer = $this->get_consumer($request);
      -    $token = $this->get_token($request, $consumer, "access");
      -    $this->check_signature($request, $consumer, $token);
      -    return array($consumer, $token);
      -  }
      -
      -  // Internals from here
      -  /**
      -   * version 1
      -   */
      -  private function get_version(&$request) {
      -    $version = $request->get_parameter("oauth_version");
      -    if (!$version) {
      -      // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. 
      -      // Chapter 7.0 ("Accessing Protected Ressources")
      -      $version = '1.0';
      -    }
      -    if ($version !== $this->version) {
      -      throw new OAuthException("OAuth version '$version' not supported");
      -    }
      -    return $version;
      -  }
      -
      -  /**
      -   * figure out the signature with some defaults
      -   */
      -  private function get_signature_method(&$request) {
      -    $signature_method =
      -        @$request->get_parameter("oauth_signature_method");
      -
      -    if (!$signature_method) {
      -      // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -      // parameter is required, and we can't just fallback to PLAINTEXT
      -      throw new OAuthException('No signature method parameter. This parameter is required');
      -    }
      -
      -    if (!in_array($signature_method,
      -                  array_keys($this->signature_methods))) {
      -      throw new OAuthException(
      -        "Signature method '$signature_method' not supported " .
      -        "try one of the following: " .
      -        implode(", ", array_keys($this->signature_methods))
      -      );
      -    }
      -    return $this->signature_methods[$signature_method];
      -  }
      -
      -  /**
      -   * try to find the consumer for the provided request's consumer key
      -   */
      -  private function get_consumer(&$request) {
      -    $consumer_key = @$request->get_parameter("oauth_consumer_key");
      -    if (!$consumer_key) {
      -      throw new OAuthException("Invalid consumer key");
      -    }
      -
      -    $consumer = $this->data_store->lookup_consumer($consumer_key);
      -    if (!$consumer) {
      -      throw new OAuthException("Invalid consumer");
      -    }
      -
      -    return $consumer;
      -  }
      -
      -  /**
      -   * try to find the token for the provided request's token key
      -   */
      -  private function get_token(&$request, $consumer, $token_type="access") {
      -    $token_field = @$request->get_parameter('oauth_token');
      -    $token = $this->data_store->lookup_token(
      -      $consumer, $token_type, $token_field
      -    );
      -    if (!$token) {
      -      throw new OAuthException("Invalid $token_type token: $token_field");
      -    }
      -    return $token;
      -  }
      -
      -  /**
      -   * all-in-one function to check the signature on a request
      -   * should guess the signature method appropriately
      -   */
      -  private function check_signature(&$request, $consumer, $token) {
      -    // this should probably be in a different method
      -    $timestamp = @$request->get_parameter('oauth_timestamp');
      -    $nonce = @$request->get_parameter('oauth_nonce');
      -
      -    $this->check_timestamp($timestamp);
      -    $this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -    $signature_method = $this->get_signature_method($request);
      -
      -    $signature = $request->get_parameter('oauth_signature');
      -    $valid_sig = $signature_method->check_signature(
      -      $request,
      -      $consumer,
      -      $token,
      -      $signature
      -    );
      -
      -    if (!$valid_sig) {
      -      throw new OAuthException("Invalid signature");
      -    }
      -  }
      -
      -  /**
      -   * check that the timestamp is new enough
      -   */
      -  private function check_timestamp($timestamp) {
      -    if( ! $timestamp )
      -      throw new OAuthException(
      -        'Missing timestamp parameter. The parameter is required'
      -      );
      -    
      -    // verify that timestamp is recentish
      -    $now = time();
      -    if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -      throw new OAuthException(
      -        "Expired timestamp, yours $timestamp, ours $now"
      -      );
      -    }
      -  }
      -
      -  /**
      -   * check that the nonce is not repeated
      -   */
      -  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -    if( ! $nonce )
      -      throw new OAuthException(
      -        'Missing nonce parameter. The parameter is required'
      -      );
      -
      -    // verify that the nonce is uniqueish
      -    $found = $this->data_store->lookup_nonce(
      -      $consumer,
      -      $token,
      -      $nonce,
      -      $timestamp
      -    );
      -    if ($found) {
      -      throw new OAuthException("Nonce already used: $nonce");
      -    }
      -  }
      -
      -}
      -
      -class OAuthDataStore {
      -  function lookup_consumer($consumer_key) {
      -    // implement me
      -  }
      -
      -  function lookup_token($consumer, $token_type, $token) {
      -    // implement me
      -  }
      -
      -  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -    // implement me
      -  }
      -
      -  function new_request_token($consumer, $callback = null) {
      -    // return a new token attached to this consumer
      -  }
      -
      -  function new_access_token($token, $consumer, $verifier = null) {
      -    // return a new access token attached to this consumer
      -    // for the user associated with this token if the request token
      -    // is authorized
      -    // should also invalidate the request token
      -  }
      -
      -}
      -
      -class OAuthUtil {
      -  public static function urlencode_rfc3986($input) {
      -  if (is_array($input)) {
      -    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -  } else if (is_scalar($input)) {
      -    return str_replace(
      -      '+',
      -      ' ',
      -      str_replace('%7E', '~', rawurlencode($input))
      -    );
      -  } else {
      -    return '';
      -  }
      -}
      -
      -
      -  // This decode function isn't taking into consideration the above
      -  // modifications to the encoding process. However, this method doesn't
      -  // seem to be used anywhere so leaving it as is.
      -  public static function urldecode_rfc3986($string) {
      -    return urldecode($string);
      -  }
      -
      -  // Utility function for turning the Authorization: header into
      -  // parameters, has to do some unescaping
      -  // Can filter out any non-oauth parameters if needed (default behaviour)
      -  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -    $offset = 0;
      -    $params = array();
      -    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -      $match = $matches[0];
      -      $header_name = $matches[2][0];
      -      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -      }
      -      $offset = $match[1] + strlen($match[0]);
      -    }
      -
      -    if (isset($params['realm'])) {
      -      unset($params['realm']);
      -    }
      -
      -    return $params;
      -  }
      -
      -  // helper to try to sort out headers for people who aren't running apache
      -  public static function get_headers() {
      -    if (function_exists('apache_request_headers')) {
      -      // we need this to get the actual Authorization: header
      -      // because apache tends to tell us it doesn't exist
      -      $headers = apache_request_headers();
      -
      -      // sanitize the output of apache_request_headers because
      -      // we always want the keys to be Cased-Like-This and arh()
      -      // returns the headers in the same case as they are in the
      -      // request
      -      $out = array();
      -      foreach( $headers AS $key => $value ) {
      -        $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("-", " ", $key)))
      -          );
      -        $out[$key] = $value;
      -      }
      -    } else {
      -      // otherwise we don't have apache and are just going to have to hope
      -      // that $_SERVER actually contains what we need
      -      $out = array();
      -      if( isset($_SERVER['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -      if( isset($_ENV['CONTENT_TYPE']) )
      -        $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -      foreach ($_SERVER as $key => $value) {
      -        if (substr($key, 0, 5) == "HTTP_") {
      -          // this is chaos, basically it is just there to capitalize the first
      -          // letter of every word that is not an initial HTTP and strip HTTP
      -          // code from przemek
      -          $key = str_replace(
      -            " ",
      -            "-",
      -            ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -          );
      -          $out[$key] = $value;
      -        }
      -      }
      -    }
      -    return $out;
      -  }
      -
      -  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -  // parameters like this
      -  // array('a' => array('b','c'), 'd' => 'e')
      -  public static function parse_parameters( $input ) {
      -    if (!isset($input) || !$input) return array();
      -
      -    $pairs = explode('&', $input);
      -
      -    $parsed_parameters = array();
      -    foreach ($pairs as $pair) {
      -      $split = explode('=', $pair, 2);
      -      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -      if (isset($parsed_parameters[$parameter])) {
      -        // We have already recieved parameter(s) with this name, so add to the list
      -        // of parameters with this name
      -
      -        if (is_scalar($parsed_parameters[$parameter])) {
      -          // This is the first duplicate, so transform scalar (string) into an array
      -          // so we can add the duplicates
      -          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -        }
      -
      -        $parsed_parameters[$parameter][] = $value;
      -      } else {
      -        $parsed_parameters[$parameter] = $value;
      -      }
      -    }
      -    return $parsed_parameters;
      -  }
      -
      -  public static function build_http_query($params) {
      -    if (!$params) return '';
      -
      -    // Urlencode both keys and values
      -    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -    $params = array_combine($keys, $values);
      -
      -    // Parameters are sorted by name, using lexicographical byte value ordering.
      -    // Ref: Spec: 9.1.1 (1)
      -    uksort($params, 'strcmp');
      -
      -    $pairs = array();
      -    foreach ($params as $parameter => $value) {
      -      if (is_array($value)) {
      -        // If two or more parameters share the same name, they are sorted by their value
      -        // Ref: Spec: 9.1.1 (1)
      -        natsort($value);
      -        foreach ($value as $duplicate_value) {
      -          $pairs[] = $parameter . '=' . $duplicate_value;
      -        }
      -      } else {
      -        $pairs[] = $parameter . '=' . $value;
      -      }
      -    }
      -    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -    // Each name-value pair is separated by an '&' character (ASCII code 38)
      -    return implode('&', $pairs);
      -  }
      -}
      -
      -?>
      
      From de10d06e2646393336adbb4ec7d0641419cb28cd Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Mon, 29 Jan 2018 08:15:43 -0500
      Subject: [PATCH 034/116] Upgrade TwitterOAuth calls in twitter addon
      
      ---
       twitter/twitter.php | 9 ++++-----
       1 file changed, 4 insertions(+), 5 deletions(-)
      
      diff --git a/twitter/twitter.php b/twitter/twitter.php
      index 7e38bd43..8b483c9e 100644
      --- a/twitter/twitter.php
      +++ b/twitter/twitter.php
      @@ -223,7 +223,7 @@ function twitter_settings_post(App $a, $post)
       			//  form as token and token2, we need a new connection to Twitter using these token
       			//  and secret to request a Access Token with the PIN
       			$connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']);
      -			$token = $connection->getAccessToken($_POST['twitter-pin']);
      +			$token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]);
       			//  ok, now that we have the Access Token, save them in the user config
       			PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']);
       			PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']);
      @@ -298,17 +298,16 @@ function twitter_settings(App $a, &$s)
       			 * account at Twitter.
       			 */
       			$connection = new TwitterOAuth($ckey, $csecret);
      -			$request_token = $connection->getRequestToken();
      -			$token = $request_token['oauth_token'];
      +			$request_token = $connection->url('oauth/request_token', ['oauth_callback' => 'oob']);
       			/*			 * *
       			 *  make some nice form
       			 */
       			$s .= '

      ' . L10n::t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

      '; - $s .= '' . L10n::t('Log in with Twitter') . ''; + $s .= '
      ' . L10n::t('Log in with Twitter') . ''; $s .= '
      '; $s .= ''; $s .= ''; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
      '; $s .= '
      '; From a3e144e5496c8c207f68e8ea0b580b644f77398c Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Mon, 29 Jan 2018 10:32:37 -0500 Subject: [PATCH 035/116] Add missing use in statusnet addon --- statusnet/library/statusnetoauth.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php index beed59e7..27d91638 100644 --- a/statusnet/library/statusnetoauth.php +++ b/statusnet/library/statusnetoauth.php @@ -1,5 +1,7 @@ Date: Mon, 29 Jan 2018 10:42:12 -0500 Subject: [PATCH 036/116] Upgrade yet more calls with TwitterOAuth --- twitter/twitter.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 8b483c9e..bca5e7db 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -298,17 +298,17 @@ function twitter_settings(App $a, &$s) * account at Twitter. */ $connection = new TwitterOAuth($ckey, $csecret); - $request_token = $connection->url('oauth/request_token', ['oauth_callback' => 'oob']); + $result = $connection->oauth('oauth/request_token', ['oauth_callback' => 'oob']); /* * * * make some nice form */ $s .= '

      ' . L10n::t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

      '; - $s .= '' . L10n::t('Log in with Twitter') . ''; + $s .= '' . L10n::t('Log in with Twitter') . ''; $s .= '
      '; $s .= ''; $s .= ''; - $s .= ''; - $s .= ''; + $s .= ''; + $s .= ''; $s .= '
      '; $s .= '
      '; } else { From 633c54d64287bf8d4f5801a22a88ddd1a77d3a14 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 30 Jan 2018 18:52:06 +0000 Subject: [PATCH 037/116] Quit if twitter addon is not configured --- twitter/twitter.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/twitter/twitter.php b/twitter/twitter.php index bca5e7db..1863b8bc 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -158,6 +158,12 @@ function twitter_follow(App $a, &$contact) $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); + // If the addon is not configured (general or for this user) quit here + if (empty($ckey) || empty($csecret) || empty($otoken) || empty($osecret)) { + $contact = false; + return; + } + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $connection->post('friendships/create', ['screen_name' => $nickname]); From 48935de469125ce11ca082e54f217434b1f77807 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 30 Jan 2018 23:42:22 -0500 Subject: [PATCH 038/116] [pumpio] Fix comment --- pumpio/pumpio.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index d0fe09d5..970bbf09 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -158,7 +158,7 @@ function pumpio_connect(&$a) { // Let's begin. First we need a Request Token. The request token is required to send the user // to pumpio's login page. - // Create a new instance of the TumblrOAuth library. For this step, all we need to give the library is our + // Create a new instance of the oauth_client_class library. For this step, all we need to give the library is our // Consumer Key and Consumer Secret $client = new oauth_client_class; $client->debug = 1; @@ -554,7 +554,7 @@ function pumpio_send(&$a,&$b) { $a->contact = $r[0]["id"]; $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $params]); - + Queue::add($a->contact, NETWORK_PUMPIO, $s); notice(L10n::t('Pump.io post failed. Queued for retry.').EOL); } @@ -630,7 +630,7 @@ function pumpio_action(&$a, $uid, $uri, $action, $content = "") { $a->contact = $r[0]["id"]; $s = serialize(['url' => $url, 'item' => $orig_post["id"], 'post' => $params]); - + Queue::add($a->contact, NETWORK_PUMPIO, $s); notice(L10n::t('Pump.io like failed. Queued for retry.').EOL); } From cb2c9f836f3fbf724b27395f1d4d0c3f11783011 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 30 Jan 2018 23:42:42 -0500 Subject: [PATCH 039/116] [statusnet] Remove reference to Slinky --- statusnet/statusnet.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 7ef171f7..d4d74f49 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -557,12 +557,7 @@ function statusnet_post_hook(App $a, &$b) $image = ""; if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - if ((strlen($msgarr["url"]) > 20) && - ((strlen($msg . " \n" . $msgarr["url"]) > $max_char))) { - $msg .= " \n" . Network::shortenUrl($msgarr["url"]); - } else { - $msg .= " \n" . $msgarr["url"]; - } + $msg .= " \n" . $msgarr["url"]; } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) { $image = $msgarr["image"]; } From de3d9b40b6c7508f3e26fc1917de8f6b2555050c Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 30 Jan 2018 23:43:50 -0500 Subject: [PATCH 040/116] [statusnet] Remove explicit duplicate OAuth1 library --- statusnet/library/OAuth1.php | 891 ----------------------------- statusnet/library/twitteroauth.php | 3 - 2 files changed, 894 deletions(-) delete mode 100644 statusnet/library/OAuth1.php diff --git a/statusnet/library/OAuth1.php b/statusnet/library/OAuth1.php deleted file mode 100644 index 57481f5d..00000000 --- a/statusnet/library/OAuth1.php +++ /dev/null @@ -1,891 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callback_url = $callback_url; - } - - function __toString() { - return "OAuthConsumer[key=$this->key,secret=$this->secret]"; - } - } - - class OAuthToken { - // access tokens and request tokens - public $key; - public $secret; - - public $expires; - public $scope; - public $uid; - - /** - * key = the token - * secret = the token secret - */ - function __construct($key, $secret) { - $this->key = $key; - $this->secret = $secret; - } - - /** - * generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - */ - function to_string() { - return "oauth_token=" . - OAuthUtil::urlencode_rfc3986($this->key) . - "&oauth_token_secret=" . - OAuthUtil::urlencode_rfc3986($this->secret); - } - - function __toString() { - return $this->to_string(); - } - } - - /** - * A class for implementing a Signature Method - * See section 9 ("Signing Requests") in the spec - */ - abstract class OAuthSignatureMethod { - /** - * Needs to return the name of the Signature Method (ie HMAC-SHA1) - * @return string - */ - abstract public function get_name(); - - /** - * Build up the signature - * NOTE: The output of this function MUST NOT be urlencoded. - * the encoding is handled in OAuthRequest when the final - * request is serialized - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @return string - */ - abstract public function build_signature($request, $consumer, $token); - - /** - * Verifies that a given signature is correct - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @param string $signature - * @return bool - */ - public function check_signature($request, $consumer, $token, $signature) { - $built = $this->build_signature($request, $consumer, $token); - //echo "
      "; var_dump($signature, $built, ($built == $signature)); killme();
      -		return ($built == $signature);
      -	  }
      -	}
      -
      -	/**
      -	 * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
      -	 * where the Signature Base String is the text and the key is the concatenated values (each first
      -	 * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
      -	 * character (ASCII code 38) even if empty.
      -	 *   - Chapter 9.2 ("HMAC-SHA1")
      -	 */
      -	class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -	  function get_name() {
      -		return "HMAC-SHA1";
      -	  }
      -
      -	  public function build_signature($request, $consumer, $token) {
      -		$base_string = $request->get_signature_base_string();
      -		$request->base_string = $base_string;
      -
      -		$key_parts = array(
      -		  $consumer->secret,
      -		  ($token) ? $token->secret : ""
      -		);
      -
      -		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -		$key = implode('&', $key_parts);
      -
      -
      -		$r = base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -		return $r;
      -	  }
      -	}
      -
      -	/**
      -	 * The PLAINTEXT method does not provide any security protection and SHOULD only be used
      -	 * over a secure channel such as HTTPS. It does not use the Signature Base String.
      -	 *   - Chapter 9.4 ("PLAINTEXT")
      -	 */
      -	class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -	  public function get_name() {
      -		return "PLAINTEXT";
      -	  }
      -
      -	  /**
      -	   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
      -	   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
      -	   * empty. The result MUST be encoded again.
      -	   *   - Chapter 9.4.1 ("Generating Signatures")
      -	   *
      -	   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -	   * OAuthRequest handles this!
      -	   */
      -	  public function build_signature($request, $consumer, $token) {
      -		$key_parts = array(
      -		  $consumer->secret,
      -		  ($token) ? $token->secret : ""
      -		);
      -
      -		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -		$key = implode('&', $key_parts);
      -		$request->base_string = $key;
      -
      -		return $key;
      -	  }
      -	}
      -
      -	/**
      -	 * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
      -	 * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
      -	 * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
      -	 * verified way to the Service Provider, in a manner which is beyond the scope of this
      -	 * specification.
      -	 *   - Chapter 9.3 ("RSA-SHA1")
      -	 */
      -	abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -	  public function get_name() {
      -		return "RSA-SHA1";
      -	  }
      -
      -	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -	  // (2) fetch via http using a url provided by the requester
      -	  // (3) some sort of specific discovery code based on request
      -	  //
      -	  // Either way should return a string representation of the certificate
      -	  protected abstract function fetch_public_cert(&$request);
      -
      -	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -	  //
      -	  // Either way should return a string representation of the certificate
      -	  protected abstract function fetch_private_cert(&$request);
      -
      -	  public function build_signature($request, $consumer, $token) {
      -		$base_string = $request->get_signature_base_string();
      -		$request->base_string = $base_string;
      -
      -		// Fetch the private key cert based on the request
      -		$cert = $this->fetch_private_cert($request);
      -
      -		// Pull the private key ID from the certificate
      -		$privatekeyid = openssl_get_privatekey($cert);
      -
      -		// Sign using the key
      -		$ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -		// Release the key resource
      -		openssl_free_key($privatekeyid);
      -
      -		return base64_encode($signature);
      -	  }
      -
      -	  public function check_signature($request, $consumer, $token, $signature) {
      -		$decoded_sig = base64_decode($signature);
      -
      -		$base_string = $request->get_signature_base_string();
      -
      -		// Fetch the public key cert based on the request
      -		$cert = $this->fetch_public_cert($request);
      -
      -		// Pull the public key ID from the certificate
      -		$publickeyid = openssl_get_publickey($cert);
      -
      -		// Check the computed signature against the one passed in the query
      -		$ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -		// Release the key resource
      -		openssl_free_key($publickeyid);
      -
      -		return $ok == 1;
      -	  }
      -	}
      -
      -	class OAuthRequest {
      -	  private $parameters;
      -	  private $http_method;
      -	  private $http_url;
      -	  // for debug purposes
      -	  public $base_string;
      -	  public static $version = '1.0';
      -	  public static $POST_INPUT = 'php://input';
      -
      -	  function __construct($http_method, $http_url, $parameters=NULL) {
      -		@$parameters or $parameters = array();
      -		$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -		$this->parameters = $parameters;
      -		$this->http_method = $http_method;
      -		$this->http_url = $http_url;
      -	  }
      -
      -
      -	  /**
      -	   * attempt to build up a request from what was passed to the server
      -	   */
      -	  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -		$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -				  ? 'http'
      -				  : 'https';
      -		@$http_url or $http_url = $scheme .
      -								  '://' . $_SERVER['HTTP_HOST'] .
      -								  ':' .
      -								  $_SERVER['SERVER_PORT'] .
      -								  $_SERVER['REQUEST_URI'];
      -		@$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -		// We weren't handed any parameters, so let's find the ones relevant to
      -		// this request.
      -		// If you run XML-RPC or similar you should use this to provide your own
      -		// parsed parameter-list
      -		if (!$parameters) {
      -		  // Find request headers
      -		  $request_headers = OAuthUtil::get_headers();
      -
      -		  // Parse the query-string to find GET parameters
      -		  $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -		  // It's a POST request of the proper content-type, so parse POST
      -		  // parameters and add those overriding any duplicates from GET
      -		  if ($http_method == "POST"
      -			  && @strstr($request_headers["Content-Type"],
      -						 "application/x-www-form-urlencoded")
      -			  ) {
      -			$post_data = OAuthUtil::parse_parameters(
      -			  file_get_contents(self::$POST_INPUT)
      -			);
      -			$parameters = array_merge($parameters, $post_data);
      -		  }
      -
      -		  // We have a Authorization-header with OAuth data. Parse the header
      -		  // and add those overriding any duplicates from GET or POST
      -		  if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -			$header_parameters = OAuthUtil::split_header(
      -			  $request_headers['Authorization']
      -			);
      -			$parameters = array_merge($parameters, $header_parameters);
      -		  }
      -
      -		}
      -		// fix for friendica redirect system
      -
      -		$http_url =  substr($http_url, 0, strpos($http_url,$parameters['pagename'])+strlen($parameters['pagename']));
      -		unset( $parameters['pagename'] );
      -
      -		//echo "
      ".__function__."\n"; var_dump($http_method, $http_url, $parameters, $_SERVER['REQUEST_URI']); killme();
      -		return new OAuthRequest($http_method, $http_url, $parameters);
      -	  }
      -
      -	  /**
      -	   * pretty much a helper function to set up the request
      -	   */
      -	  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -		@$parameters or $parameters = array();
      -		$defaults = array("oauth_version" => OAuthRequest::$version,
      -						  "oauth_nonce" => OAuthRequest::generate_nonce(),
      -						  "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -						  "oauth_consumer_key" => $consumer->key);
      -		if ($token)
      -		  $defaults['oauth_token'] = $token->key;
      -
      -		$parameters = array_merge($defaults, $parameters);
      -
      -		return new OAuthRequest($http_method, $http_url, $parameters);
      -	  }
      -
      -	  public function set_parameter($name, $value, $allow_duplicates = true) {
      -		if ($allow_duplicates && isset($this->parameters[$name])) {
      -		  // We have already added parameter(s) with this name, so add to the list
      -		  if (is_scalar($this->parameters[$name])) {
      -			// This is the first duplicate, so transform scalar (string)
      -			// into an array so we can add the duplicates
      -			$this->parameters[$name] = array($this->parameters[$name]);
      -		  }
      -
      -		  $this->parameters[$name][] = $value;
      -		} else {
      -		  $this->parameters[$name] = $value;
      -		}
      -	  }
      -
      -	  public function get_parameter($name) {
      -		return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -	  }
      -
      -	  public function get_parameters() {
      -		return $this->parameters;
      -	  }
      -
      -	  public function unset_parameter($name) {
      -		unset($this->parameters[$name]);
      -	  }
      -
      -	  /**
      -	   * The request parameters, sorted and concatenated into a normalized string.
      -	   * @return string
      -	   */
      -	  public function get_signable_parameters() {
      -		// Grab all parameters
      -		$params = $this->parameters;
      -
      -		// Remove oauth_signature if present
      -		// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -		if (isset($params['oauth_signature'])) {
      -		  unset($params['oauth_signature']);
      -		}
      -
      -		return OAuthUtil::build_http_query($params);
      -	  }
      -
      -	  /**
      -	   * Returns the base string of this request
      -	   *
      -	   * The base string defined as the method, the url
      -	   * and the parameters (normalized), each urlencoded
      -	   * and the concated with &.
      -	   */
      -	  public function get_signature_base_string() {
      -		$parts = array(
      -		  $this->get_normalized_http_method(),
      -		  $this->get_normalized_http_url(),
      -		  $this->get_signable_parameters()
      -		);
      -
      -		$parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -		return implode('&', $parts);
      -	  }
      -
      -	  /**
      -	   * just uppercases the http method
      -	   */
      -	  public function get_normalized_http_method() {
      -		return strtoupper($this->http_method);
      -	  }
      -
      -	  /**
      -	   * parses the url and rebuilds it to be
      -	   * scheme://host/path
      -	   */
      -	  public function get_normalized_http_url() {
      -		$parts = parse_url($this->http_url);
      -
      -		$port = @$parts['port'];
      -		$scheme = $parts['scheme'];
      -		$host = $parts['host'];
      -		$path = @$parts['path'];
      -
      -		$port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -		if (($scheme == 'https' && $port != '443')
      -			|| ($scheme == 'http' && $port != '80')) {
      -		  $host = "$host:$port";
      -		}
      -		return "$scheme://$host$path";
      -	  }
      -
      -	  /**
      -	   * builds a url usable for a GET request
      -	   */
      -	  public function to_url() {
      -		$post_data = $this->to_postdata();
      -		$out = $this->get_normalized_http_url();
      -		if ($post_data) {
      -		  $out .= '?'.$post_data;
      -		}
      -		return $out;
      -	  }
      -
      -	  /**
      -	   * builds the data one would send in a POST request
      -	   */
      -	  public function to_postdata($raw = false) {
      -		if ($raw)
      -		  return($this->parameters);
      -		else
      -		  return OAuthUtil::build_http_query($this->parameters);
      -	  }
      -
      -	  /**
      -	   * builds the Authorization: header
      -	   */
      -	  public function to_header($realm=null) {
      -		$first = true;
      -		if($realm) {
      -		  $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -		  $first = false;
      -		} else
      -		  $out = 'Authorization: OAuth';
      -
      -		$total = array();
      -		foreach ($this->parameters as $k => $v) {
      -		  if (substr($k, 0, 5) != "oauth") continue;
      -		  if (is_array($v)) {
      -			throw new OAuthException('Arrays not supported in headers');
      -		  }
      -		  $out .= ($first) ? ' ' : ',';
      -		  $out .= OAuthUtil::urlencode_rfc3986($k) .
      -				  '="' .
      -				  OAuthUtil::urlencode_rfc3986($v) .
      -				  '"';
      -		  $first = false;
      -		}
      -		return $out;
      -	  }
      -
      -	  public function __toString() {
      -		return $this->to_url();
      -	  }
      -
      -
      -	  public function sign_request($signature_method, $consumer, $token) {
      -		$this->set_parameter(
      -		  "oauth_signature_method",
      -		  $signature_method->get_name(),
      -		  false
      -		);
      -		$signature = $this->build_signature($signature_method, $consumer, $token);
      -		$this->set_parameter("oauth_signature", $signature, false);
      -	  }
      -
      -	  public function build_signature($signature_method, $consumer, $token) {
      -		$signature = $signature_method->build_signature($this, $consumer, $token);
      -		return $signature;
      -	  }
      -
      -	  /**
      -	   * util function: current timestamp
      -	   */
      -	  private static function generate_timestamp() {
      -		return time();
      -	  }
      -
      -	  /**
      -	   * util function: current nonce
      -	   */
      -	  private static function generate_nonce() {
      -		$mt = microtime();
      -		$rand = mt_rand();
      -
      -		return md5($mt . $rand); // md5s look nicer than numbers
      -	  }
      -	}
      -
      -	class OAuthServer {
      -	  protected $timestamp_threshold = 300; // in seconds, five minutes
      -	  protected $version = '1.0';             // hi blaine
      -	  protected $signature_methods = array();
      -
      -	  protected $data_store;
      -
      -	  function __construct($data_store) {
      -		$this->data_store = $data_store;
      -	  }
      -
      -	  public function add_signature_method($signature_method) {
      -		$this->signature_methods[$signature_method->get_name()] =
      -		  $signature_method;
      -	  }
      -
      -	  // high level functions
      -
      -	  /**
      -	   * process a request_token request
      -	   * returns the request token on success
      -	   */
      -	  public function fetch_request_token(&$request) {
      -		$this->get_version($request);
      -
      -		$consumer = $this->get_consumer($request);
      -
      -		// no token required for the initial token request
      -		$token = NULL;
      -
      -		$this->check_signature($request, $consumer, $token);
      -
      -		// Rev A change
      -		$callback = $request->get_parameter('oauth_callback');
      -		$new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -		return $new_token;
      -	  }
      -
      -	  /**
      -	   * process an access_token request
      -	   * returns the access token on success
      -	   */
      -	  public function fetch_access_token(&$request) {
      -		$this->get_version($request);
      -
      -		$consumer = $this->get_consumer($request);
      -
      -		// requires authorized request token
      -		$token = $this->get_token($request, $consumer, "request");
      -
      -		$this->check_signature($request, $consumer, $token);
      -
      -		// Rev A change
      -		$verifier = $request->get_parameter('oauth_verifier');
      -		$new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -		return $new_token;
      -	  }
      -
      -	  /**
      -	   * verify an api call, checks all the parameters
      -	   */
      -	  public function verify_request(&$request) {
      -		$this->get_version($request);
      -		$consumer = $this->get_consumer($request);
      -		//echo __file__.__line__.__function__."
      "; var_dump($consumer); die();
      -		$token = $this->get_token($request, $consumer, "access");
      -		$this->check_signature($request, $consumer, $token);
      -		return array($consumer, $token);
      -	  }
      -
      -	  // Internals from here
      -	  /**
      -	   * version 1
      -	   */
      -	  private function get_version(&$request) {
      -		$version = $request->get_parameter("oauth_version");
      -		if (!$version) {
      -		  // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
      -		  // Chapter 7.0 ("Accessing Protected Ressources")
      -		  $version = '1.0';
      -		}
      -		if ($version !== $this->version) {
      -		  throw new OAuthException("OAuth version '$version' not supported");
      -		}
      -		return $version;
      -	  }
      -
      -	  /**
      -	   * figure out the signature with some defaults
      -	   */
      -	  private function get_signature_method(&$request) {
      -		$signature_method =
      -			@$request->get_parameter("oauth_signature_method");
      -
      -		if (!$signature_method) {
      -		  // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -		  // parameter is required, and we can't just fallback to PLAINTEXT
      -		  throw new OAuthException('No signature method parameter. This parameter is required');
      -		}
      -
      -		if (!in_array($signature_method,
      -					  array_keys($this->signature_methods))) {
      -		  throw new OAuthException(
      -			"Signature method '$signature_method' not supported " .
      -			"try one of the following: " .
      -			implode(", ", array_keys($this->signature_methods))
      -		  );
      -		}
      -		return $this->signature_methods[$signature_method];
      -	  }
      -
      -	  /**
      -	   * try to find the consumer for the provided request's consumer key
      -	   */
      -	  private function get_consumer(&$request) {
      -		$consumer_key = @$request->get_parameter("oauth_consumer_key");
      -		if (!$consumer_key) {
      -		  throw new OAuthException("Invalid consumer key");
      -		}
      -
      -		$consumer = $this->data_store->lookup_consumer($consumer_key);
      -		if (!$consumer) {
      -		  throw new OAuthException("Invalid consumer");
      -		}
      -
      -		return $consumer;
      -	  }
      -
      -	  /**
      -	   * try to find the token for the provided request's token key
      -	   */
      -	  private function get_token(&$request, $consumer, $token_type="access") {
      -		$token_field = @$request->get_parameter('oauth_token');
      -		$token = $this->data_store->lookup_token(
      -		  $consumer, $token_type, $token_field
      -		);
      -		if (!$token) {
      -		  throw new OAuthException("Invalid $token_type token: $token_field");
      -		}
      -		return $token;
      -	  }
      -
      -	  /**
      -	   * all-in-one function to check the signature on a request
      -	   * should guess the signature method appropriately
      -	   */
      -	  private function check_signature(&$request, $consumer, $token) {
      -		// this should probably be in a different method
      -		$timestamp = @$request->get_parameter('oauth_timestamp');
      -		$nonce = @$request->get_parameter('oauth_nonce');
      -
      -		$this->check_timestamp($timestamp);
      -		$this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -		$signature_method = $this->get_signature_method($request);
      -
      -		$signature = $request->get_parameter('oauth_signature');
      -		$valid_sig = $signature_method->check_signature(
      -		  $request,
      -		  $consumer,
      -		  $token,
      -		  $signature
      -		);
      -
      -
      -		if (!$valid_sig) {
      -		  throw new OAuthException("Invalid signature");
      -		}
      -	  }
      -
      -	  /**
      -	   * check that the timestamp is new enough
      -	   */
      -	  private function check_timestamp($timestamp) {
      -		if( ! $timestamp )
      -		  throw new OAuthException(
      -			'Missing timestamp parameter. The parameter is required'
      -		  );
      -
      -		// verify that timestamp is recentish
      -		$now = time();
      -		if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -		  throw new OAuthException(
      -			"Expired timestamp, yours $timestamp, ours $now"
      -		  );
      -		}
      -	  }
      -
      -	  /**
      -	   * check that the nonce is not repeated
      -	   */
      -	  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -		if( ! $nonce )
      -		  throw new OAuthException(
      -			'Missing nonce parameter. The parameter is required'
      -		  );
      -
      -		// verify that the nonce is uniqueish
      -		$found = $this->data_store->lookup_nonce(
      -		  $consumer,
      -		  $token,
      -		  $nonce,
      -		  $timestamp
      -		);
      -		if ($found) {
      -		  throw new OAuthException("Nonce already used: $nonce");
      -		}
      -	  }
      -
      -	}
      -
      -	class OAuthDataStore {
      -	  function lookup_consumer($consumer_key) {
      -		// implement me
      -	  }
      -
      -	  function lookup_token($consumer, $token_type, $token) {
      -		// implement me
      -	  }
      -
      -	  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -		// implement me
      -	  }
      -
      -	  function new_request_token($consumer, $callback = null) {
      -		// return a new token attached to this consumer
      -	  }
      -
      -	  function new_access_token($token, $consumer, $verifier = null) {
      -		// return a new access token attached to this consumer
      -		// for the user associated with this token if the request token
      -		// is authorized
      -		// should also invalidate the request token
      -	  }
      -
      -	}
      -
      -	class OAuthUtil {
      -	  public static function urlencode_rfc3986($input) {
      -	  if (is_array($input)) {
      -		return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -	  } else if (is_scalar($input)) {
      -		return str_replace(
      -		  '+',
      -		  ' ',
      -		  str_replace('%7E', '~', rawurlencode($input))
      -		);
      -	  } else {
      -		return '';
      -	  }
      -	}
      -
      -
      -	  // This decode function isn't taking into consideration the above
      -	  // modifications to the encoding process. However, this method doesn't
      -	  // seem to be used anywhere so leaving it as is.
      -	  public static function urldecode_rfc3986($string) {
      -		return urldecode($string);
      -	  }
      -
      -	  // Utility function for turning the Authorization: header into
      -	  // parameters, has to do some unescaping
      -	  // Can filter out any non-oauth parameters if needed (default behaviour)
      -	  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -		$pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -		$offset = 0;
      -		$params = array();
      -		while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -		  $match = $matches[0];
      -		  $header_name = $matches[2][0];
      -		  $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -		  if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -			$params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -		  }
      -		  $offset = $match[1] + strlen($match[0]);
      -		}
      -
      -		if (isset($params['realm'])) {
      -		  unset($params['realm']);
      -		}
      -
      -		return $params;
      -	  }
      -
      -	  // helper to try to sort out headers for people who aren't running apache
      -	  public static function get_headers() {
      -		if (function_exists('apache_request_headers')) {
      -		  // we need this to get the actual Authorization: header
      -		  // because apache tends to tell us it doesn't exist
      -		  $headers = apache_request_headers();
      -
      -		  // sanitize the output of apache_request_headers because
      -		  // we always want the keys to be Cased-Like-This and arh()
      -		  // returns the headers in the same case as they are in the
      -		  // request
      -		  $out = array();
      -		  foreach( $headers AS $key => $value ) {
      -			$key = str_replace(
      -				" ",
      -				"-",
      -				ucwords(strtolower(str_replace("-", " ", $key)))
      -			  );
      -			$out[$key] = $value;
      -		  }
      -		} else {
      -		  // otherwise we don't have apache and are just going to have to hope
      -		  // that $_SERVER actually contains what we need
      -		  $out = array();
      -		  if( isset($_SERVER['CONTENT_TYPE']) )
      -			$out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -		  if( isset($_ENV['CONTENT_TYPE']) )
      -			$out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -		  foreach ($_SERVER as $key => $value) {
      -			if (substr($key, 0, 5) == "HTTP_") {
      -			  // this is chaos, basically it is just there to capitalize the first
      -			  // letter of every word that is not an initial HTTP and strip HTTP
      -			  // code from przemek
      -			  $key = str_replace(
      -				" ",
      -				"-",
      -				ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -			  );
      -			  $out[$key] = $value;
      -			}
      -		  }
      -		}
      -		return $out;
      -	  }
      -
      -	  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -	  // parameters like this
      -	  // array('a' => array('b','c'), 'd' => 'e')
      -	  public static function parse_parameters( $input ) {
      -		if (!isset($input) || !$input) return array();
      -
      -		$pairs = explode('&', $input);
      -
      -		$parsed_parameters = array();
      -		foreach ($pairs as $pair) {
      -		  $split = explode('=', $pair, 2);
      -		  $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -		  $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -		  if (isset($parsed_parameters[$parameter])) {
      -			// We have already recieved parameter(s) with this name, so add to the list
      -			// of parameters with this name
      -
      -			if (is_scalar($parsed_parameters[$parameter])) {
      -			  // This is the first duplicate, so transform scalar (string) into an array
      -			  // so we can add the duplicates
      -			  $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -			}
      -
      -			$parsed_parameters[$parameter][] = $value;
      -		  } else {
      -			$parsed_parameters[$parameter] = $value;
      -		  }
      -		}
      -		return $parsed_parameters;
      -	  }
      -
      -	  public static function build_http_query($params) {
      -		if (!$params) return '';
      -
      -		// Urlencode both keys and values
      -		$keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -		$values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -		$params = array_combine($keys, $values);
      -
      -		// Parameters are sorted by name, using lexicographical byte value ordering.
      -		// Ref: Spec: 9.1.1 (1)
      -		uksort($params, 'strcmp');
      -
      -		$pairs = array();
      -		foreach ($params as $parameter => $value) {
      -		  if (is_array($value)) {
      -			// If two or more parameters share the same name, they are sorted by their value
      -			// Ref: Spec: 9.1.1 (1)
      -			natsort($value);
      -			foreach ($value as $duplicate_value) {
      -			  $pairs[] = $parameter . '=' . $duplicate_value;
      -			}
      -		  } else {
      -			$pairs[] = $parameter . '=' . $value;
      -		  }
      -		}
      -		// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -		// Each name-value pair is separated by an '&' character (ASCII code 38)
      -		return implode('&', $pairs);
      -	  }
      -	}
      -}
      diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php
      index 323156eb..bf56fc01 100644
      --- a/statusnet/library/twitteroauth.php
      +++ b/statusnet/library/twitteroauth.php
      @@ -8,9 +8,6 @@
        * Version 0.2.0 kept for compatibility purpose with StatusNetOAuth
        */
       
      -/* Load OAuth lib. You can find it at http://oauth.net */
      -require_once __DIR__ . DIRECTORY_SEPARATOR . 'OAuth1.php';
      -
       /**
        * Twitter OAuth class
        */
      
      From 6ecd6113f9d5eccc66bf2f5f4dfacffb1b005760 Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Tue, 30 Jan 2018 23:44:04 -0500
      Subject: [PATCH 041/116] [tumblr] Remove explicit duplicate OAuth1 library
      
      ---
       tumblr/library/OAuth1.php      | 874 ---------------------------------
       tumblr/library/tumblroauth.php |   3 -
       2 files changed, 877 deletions(-)
       delete mode 100644 tumblr/library/OAuth1.php
      
      diff --git a/tumblr/library/OAuth1.php b/tumblr/library/OAuth1.php
      deleted file mode 100644
      index 6b7a6a9e..00000000
      --- a/tumblr/library/OAuth1.php
      +++ /dev/null
      @@ -1,874 +0,0 @@
      -key = $key;
      -		$this->secret = $secret;
      -		$this->callback_url = $callback_url;
      -	  }
      -
      -	  function __toString() {
      -		return "OAuthConsumer[key=$this->key,secret=$this->secret]";
      -	  }
      -	}
      -
      -	class OAuthToken {
      -	  // access tokens and request tokens
      -	  public $key;
      -	  public $secret;
      -
      -	  /**
      -	   * key = the token
      -	   * secret = the token secret
      -	   */
      -	  function __construct($key, $secret) {
      -		$this->key = $key;
      -		$this->secret = $secret;
      -	  }
      -
      -	  /**
      -	   * generates the basic string serialization of a token that a server
      -	   * would respond to request_token and access_token calls with
      -	   */
      -	  function to_string() {
      -		return "oauth_token=" .
      -			   OAuthUtil::urlencode_rfc3986($this->key) .
      -			   "&oauth_token_secret=" .
      -			   OAuthUtil::urlencode_rfc3986($this->secret);
      -	  }
      -
      -	  function __toString() {
      -		return $this->to_string();
      -	  }
      -	}
      -
      -	/**
      -	 * A class for implementing a Signature Method
      -	 * See section 9 ("Signing Requests") in the spec
      -	 */
      -	abstract class OAuthSignatureMethod {
      -	  /**
      -	   * Needs to return the name of the Signature Method (ie HMAC-SHA1)
      -	   * @return string
      -	   */
      -	  abstract public function get_name();
      -
      -	  /**
      -	   * Build up the signature
      -	   * NOTE: The output of this function MUST NOT be urlencoded.
      -	   * the encoding is handled in OAuthRequest when the final
      -	   * request is serialized
      -	   * @param OAuthRequest $request
      -	   * @param OAuthConsumer $consumer
      -	   * @param OAuthToken $token
      -	   * @return string
      -	   */
      -	  abstract public function build_signature($request, $consumer, $token);
      -
      -	  /**
      -	   * Verifies that a given signature is correct
      -	   * @param OAuthRequest $request
      -	   * @param OAuthConsumer $consumer
      -	   * @param OAuthToken $token
      -	   * @param string $signature
      -	   * @return bool
      -	   */
      -	  public function check_signature($request, $consumer, $token, $signature) {
      -		$built = $this->build_signature($request, $consumer, $token);
      -		return $built == $signature;
      -	  }
      -	}
      -
      -	/**
      -	 * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
      -	 * where the Signature Base String is the text and the key is the concatenated values (each first
      -	 * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
      -	 * character (ASCII code 38) even if empty.
      -	 *   - Chapter 9.2 ("HMAC-SHA1")
      -	 */
      -	class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
      -	  function get_name() {
      -		return "HMAC-SHA1";
      -	  }
      -
      -	  public function build_signature($request, $consumer, $token) {
      -		$base_string = $request->get_signature_base_string();
      -		$request->base_string = $base_string;
      -
      -		$key_parts = array(
      -		  $consumer->secret,
      -		  ($token) ? $token->secret : ""
      -		);
      -
      -		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -		$key = implode('&', $key_parts);
      -
      -		return base64_encode(hash_hmac('sha1', $base_string, $key, true));
      -	  }
      -	}
      -
      -	/**
      -	 * The PLAINTEXT method does not provide any security protection and SHOULD only be used
      -	 * over a secure channel such as HTTPS. It does not use the Signature Base String.
      -	 *   - Chapter 9.4 ("PLAINTEXT")
      -	 */
      -	class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
      -	  public function get_name() {
      -		return "PLAINTEXT";
      -	  }
      -
      -	  /**
      -	   * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
      -	   * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
      -	   * empty. The result MUST be encoded again.
      -	   *   - Chapter 9.4.1 ("Generating Signatures")
      -	   *
      -	   * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      -	   * OAuthRequest handles this!
      -	   */
      -	  public function build_signature($request, $consumer, $token) {
      -		$key_parts = array(
      -		  $consumer->secret,
      -		  ($token) ? $token->secret : ""
      -		);
      -
      -		$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
      -		$key = implode('&', $key_parts);
      -		$request->base_string = $key;
      -
      -		return $key;
      -	  }
      -	}
      -
      -	/**
      -	 * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
      -	 * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
      -	 * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
      -	 * verified way to the Service Provider, in a manner which is beyond the scope of this
      -	 * specification.
      -	 *   - Chapter 9.3 ("RSA-SHA1")
      -	 */
      -	abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
      -	  public function get_name() {
      -		return "RSA-SHA1";
      -	  }
      -
      -	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -	  // (2) fetch via http using a url provided by the requester
      -	  // (3) some sort of specific discovery code based on request
      -	  //
      -	  // Either way should return a string representation of the certificate
      -	  protected abstract function fetch_public_cert(&$request);
      -
      -	  // Up to the SP to implement this lookup of keys. Possible ideas are:
      -	  // (1) do a lookup in a table of trusted certs keyed off of consumer
      -	  //
      -	  // Either way should return a string representation of the certificate
      -	  protected abstract function fetch_private_cert(&$request);
      -
      -	  public function build_signature($request, $consumer, $token) {
      -		$base_string = $request->get_signature_base_string();
      -		$request->base_string = $base_string;
      -
      -		// Fetch the private key cert based on the request
      -		$cert = $this->fetch_private_cert($request);
      -
      -		// Pull the private key ID from the certificate
      -		$privatekeyid = openssl_get_privatekey($cert);
      -
      -		// Sign using the key
      -		$ok = openssl_sign($base_string, $signature, $privatekeyid);
      -
      -		// Release the key resource
      -		openssl_free_key($privatekeyid);
      -
      -		return base64_encode($signature);
      -	  }
      -
      -	  public function check_signature($request, $consumer, $token, $signature) {
      -		$decoded_sig = base64_decode($signature);
      -
      -		$base_string = $request->get_signature_base_string();
      -
      -		// Fetch the public key cert based on the request
      -		$cert = $this->fetch_public_cert($request);
      -
      -		// Pull the public key ID from the certificate
      -		$publickeyid = openssl_get_publickey($cert);
      -
      -		// Check the computed signature against the one passed in the query
      -		$ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
      -
      -		// Release the key resource
      -		openssl_free_key($publickeyid);
      -
      -		return $ok == 1;
      -	  }
      -	}
      -
      -	class OAuthRequest {
      -	  private $parameters;
      -	  private $http_method;
      -	  private $http_url;
      -	  // for debug purposes
      -	  public $base_string;
      -	  public static $version = '1.0';
      -	  public static $POST_INPUT = 'php://input';
      -
      -	  function __construct($http_method, $http_url, $parameters=NULL) {
      -		@$parameters or $parameters = array();
      -		$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
      -		$this->parameters = $parameters;
      -		$this->http_method = $http_method;
      -		$this->http_url = $http_url;
      -	  }
      -
      -
      -	  /**
      -	   * attempt to build up a request from what was passed to the server
      -	   */
      -	  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
      -		$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
      -				  ? 'http'
      -				  : 'https';
      -		@$http_url or $http_url = $scheme .
      -								  '://' . $_SERVER['HTTP_HOST'] .
      -								  ':' .
      -								  $_SERVER['SERVER_PORT'] .
      -								  $_SERVER['REQUEST_URI'];
      -		@$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
      -
      -		// We weren't handed any parameters, so let's find the ones relevant to
      -		// this request.
      -		// If you run XML-RPC or similar you should use this to provide your own
      -		// parsed parameter-list
      -		if (!$parameters) {
      -		  // Find request headers
      -		  $request_headers = OAuthUtil::get_headers();
      -
      -		  // Parse the query-string to find GET parameters
      -		  $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
      -
      -		  // It's a POST request of the proper content-type, so parse POST
      -		  // parameters and add those overriding any duplicates from GET
      -		  if ($http_method == "POST"
      -			  && @strstr($request_headers["Content-Type"],
      -						 "application/x-www-form-urlencoded")
      -			  ) {
      -			$post_data = OAuthUtil::parse_parameters(
      -			  file_get_contents(self::$POST_INPUT)
      -			);
      -			$parameters = array_merge($parameters, $post_data);
      -		  }
      -
      -		  // We have a Authorization-header with OAuth data. Parse the header
      -		  // and add those overriding any duplicates from GET or POST
      -		  if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
      -			$header_parameters = OAuthUtil::split_header(
      -			  $request_headers['Authorization']
      -			);
      -			$parameters = array_merge($parameters, $header_parameters);
      -		  }
      -
      -		}
      -
      -		return new OAuthRequest($http_method, $http_url, $parameters);
      -	  }
      -
      -	  /**
      -	   * pretty much a helper function to set up the request
      -	   */
      -	  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
      -		@$parameters or $parameters = array();
      -		$defaults = array("oauth_version" => OAuthRequest::$version,
      -						  "oauth_nonce" => OAuthRequest::generate_nonce(),
      -						  "oauth_timestamp" => OAuthRequest::generate_timestamp(),
      -						  "oauth_consumer_key" => $consumer->key);
      -		if ($token)
      -		  $defaults['oauth_token'] = $token->key;
      -
      -		$parameters = array_merge($defaults, $parameters);
      -
      -		return new OAuthRequest($http_method, $http_url, $parameters);
      -	  }
      -
      -	  public function set_parameter($name, $value, $allow_duplicates = true) {
      -		if ($allow_duplicates && isset($this->parameters[$name])) {
      -		  // We have already added parameter(s) with this name, so add to the list
      -		  if (is_scalar($this->parameters[$name])) {
      -			// This is the first duplicate, so transform scalar (string)
      -			// into an array so we can add the duplicates
      -			$this->parameters[$name] = array($this->parameters[$name]);
      -		  }
      -
      -		  $this->parameters[$name][] = $value;
      -		} else {
      -		  $this->parameters[$name] = $value;
      -		}
      -	  }
      -
      -	  public function get_parameter($name) {
      -		return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
      -	  }
      -
      -	  public function get_parameters() {
      -		return $this->parameters;
      -	  }
      -
      -	  public function unset_parameter($name) {
      -		unset($this->parameters[$name]);
      -	  }
      -
      -	  /**
      -	   * The request parameters, sorted and concatenated into a normalized string.
      -	   * @return string
      -	   */
      -	  public function get_signable_parameters() {
      -		// Grab all parameters
      -		$params = $this->parameters;
      -
      -		// Remove oauth_signature if present
      -		// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      -		if (isset($params['oauth_signature'])) {
      -		  unset($params['oauth_signature']);
      -		}
      -
      -		return OAuthUtil::build_http_query($params);
      -	  }
      -
      -	  /**
      -	   * Returns the base string of this request
      -	   *
      -	   * The base string defined as the method, the url
      -	   * and the parameters (normalized), each urlencoded
      -	   * and the concated with &.
      -	   */
      -	  public function get_signature_base_string() {
      -		$parts = array(
      -		  $this->get_normalized_http_method(),
      -		  $this->get_normalized_http_url(),
      -		  $this->get_signable_parameters()
      -		);
      -
      -		$parts = OAuthUtil::urlencode_rfc3986($parts);
      -
      -		return implode('&', $parts);
      -	  }
      -
      -	  /**
      -	   * just uppercases the http method
      -	   */
      -	  public function get_normalized_http_method() {
      -		return strtoupper($this->http_method);
      -	  }
      -
      -	  /**
      -	   * parses the url and rebuilds it to be
      -	   * scheme://host/path
      -	   */
      -	  public function get_normalized_http_url() {
      -		$parts = parse_url($this->http_url);
      -
      -		$port = @$parts['port'];
      -		$scheme = $parts['scheme'];
      -		$host = $parts['host'];
      -		$path = @$parts['path'];
      -
      -		$port or $port = ($scheme == 'https') ? '443' : '80';
      -
      -		if (($scheme == 'https' && $port != '443')
      -			|| ($scheme == 'http' && $port != '80')) {
      -		  $host = "$host:$port";
      -		}
      -		return "$scheme://$host$path";
      -	  }
      -
      -	  /**
      -	   * builds a url usable for a GET request
      -	   */
      -	  public function to_url() {
      -		$post_data = $this->to_postdata();
      -		$out = $this->get_normalized_http_url();
      -		if ($post_data) {
      -		  $out .= '?'.$post_data;
      -		}
      -		return $out;
      -	  }
      -
      -	  /**
      -	   * builds the data one would send in a POST request
      -	   */
      -	  public function to_postdata() {
      -		return OAuthUtil::build_http_query($this->parameters);
      -	  }
      -
      -	  /**
      -	   * builds the Authorization: header
      -	   */
      -	  public function to_header($realm=null) {
      -		$first = true;
      -		if($realm) {
      -		  $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
      -		  $first = false;
      -		} else
      -		  $out = 'Authorization: OAuth';
      -
      -		$total = array();
      -		foreach ($this->parameters as $k => $v) {
      -		  if (substr($k, 0, 5) != "oauth") continue;
      -		  if (is_array($v)) {
      -			throw new OAuthException('Arrays not supported in headers');
      -		  }
      -		  $out .= ($first) ? ' ' : ',';
      -		  $out .= OAuthUtil::urlencode_rfc3986($k) .
      -				  '="' .
      -				  OAuthUtil::urlencode_rfc3986($v) .
      -				  '"';
      -		  $first = false;
      -		}
      -		return $out;
      -	  }
      -
      -	  public function __toString() {
      -		return $this->to_url();
      -	  }
      -
      -
      -	  public function sign_request($signature_method, $consumer, $token) {
      -		$this->set_parameter(
      -		  "oauth_signature_method",
      -		  $signature_method->get_name(),
      -		  false
      -		);
      -		$signature = $this->build_signature($signature_method, $consumer, $token);
      -		$this->set_parameter("oauth_signature", $signature, false);
      -	  }
      -
      -	  public function build_signature($signature_method, $consumer, $token) {
      -		$signature = $signature_method->build_signature($this, $consumer, $token);
      -		return $signature;
      -	  }
      -
      -	  /**
      -	   * util function: current timestamp
      -	   */
      -	  private static function generate_timestamp() {
      -		return time();
      -	  }
      -
      -	  /**
      -	   * util function: current nonce
      -	   */
      -	  private static function generate_nonce() {
      -		$mt = microtime();
      -		$rand = mt_rand();
      -
      -		return md5($mt . $rand); // md5s look nicer than numbers
      -	  }
      -	}
      -
      -	class OAuthServer {
      -	  protected $timestamp_threshold = 300; // in seconds, five minutes
      -	  protected $version = '1.0';             // hi blaine
      -	  protected $signature_methods = array();
      -
      -	  protected $data_store;
      -
      -	  function __construct($data_store) {
      -		$this->data_store = $data_store;
      -	  }
      -
      -	  public function add_signature_method($signature_method) {
      -		$this->signature_methods[$signature_method->get_name()] =
      -		  $signature_method;
      -	  }
      -
      -	  // high level functions
      -
      -	  /**
      -	   * process a request_token request
      -	   * returns the request token on success
      -	   */
      -	  public function fetch_request_token(&$request) {
      -		$this->get_version($request);
      -
      -		$consumer = $this->get_consumer($request);
      -
      -		// no token required for the initial token request
      -		$token = NULL;
      -
      -		$this->check_signature($request, $consumer, $token);
      -
      -		// Rev A change
      -		$callback = $request->get_parameter('oauth_callback');
      -		$new_token = $this->data_store->new_request_token($consumer, $callback);
      -
      -		return $new_token;
      -	  }
      -
      -	  /**
      -	   * process an access_token request
      -	   * returns the access token on success
      -	   */
      -	  public function fetch_access_token(&$request) {
      -		$this->get_version($request);
      -
      -		$consumer = $this->get_consumer($request);
      -
      -		// requires authorized request token
      -		$token = $this->get_token($request, $consumer, "request");
      -
      -		$this->check_signature($request, $consumer, $token);
      -
      -		// Rev A change
      -		$verifier = $request->get_parameter('oauth_verifier');
      -		$new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
      -
      -		return $new_token;
      -	  }
      -
      -	  /**
      -	   * verify an api call, checks all the parameters
      -	   */
      -	  public function verify_request(&$request) {
      -		$this->get_version($request);
      -		$consumer = $this->get_consumer($request);
      -		$token = $this->get_token($request, $consumer, "access");
      -		$this->check_signature($request, $consumer, $token);
      -		return array($consumer, $token);
      -	  }
      -
      -	  // Internals from here
      -	  /**
      -	   * version 1
      -	   */
      -	  private function get_version(&$request) {
      -		$version = $request->get_parameter("oauth_version");
      -		if (!$version) {
      -		  // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
      -		  // Chapter 7.0 ("Accessing Protected Ressources")
      -		  $version = '1.0';
      -		}
      -		if ($version !== $this->version) {
      -		  throw new OAuthException("OAuth version '$version' not supported");
      -		}
      -		return $version;
      -	  }
      -
      -	  /**
      -	   * figure out the signature with some defaults
      -	   */
      -	  private function get_signature_method(&$request) {
      -		$signature_method =
      -			@$request->get_parameter("oauth_signature_method");
      -
      -		if (!$signature_method) {
      -		  // According to chapter 7 ("Accessing Protected Ressources") the signature-method
      -		  // parameter is required, and we can't just fallback to PLAINTEXT
      -		  throw new OAuthException('No signature method parameter. This parameter is required');
      -		}
      -
      -		if (!in_array($signature_method,
      -					  array_keys($this->signature_methods))) {
      -		  throw new OAuthException(
      -			"Signature method '$signature_method' not supported " .
      -			"try one of the following: " .
      -			implode(", ", array_keys($this->signature_methods))
      -		  );
      -		}
      -		return $this->signature_methods[$signature_method];
      -	  }
      -
      -	  /**
      -	   * try to find the consumer for the provided request's consumer key
      -	   */
      -	  private function get_consumer(&$request) {
      -		$consumer_key = @$request->get_parameter("oauth_consumer_key");
      -		if (!$consumer_key) {
      -		  throw new OAuthException("Invalid consumer key");
      -		}
      -
      -		$consumer = $this->data_store->lookup_consumer($consumer_key);
      -		if (!$consumer) {
      -		  throw new OAuthException("Invalid consumer");
      -		}
      -
      -		return $consumer;
      -	  }
      -
      -	  /**
      -	   * try to find the token for the provided request's token key
      -	   */
      -	  private function get_token(&$request, $consumer, $token_type="access") {
      -		$token_field = @$request->get_parameter('oauth_token');
      -		$token = $this->data_store->lookup_token(
      -		  $consumer, $token_type, $token_field
      -		);
      -		if (!$token) {
      -		  throw new OAuthException("Invalid $token_type token: $token_field");
      -		}
      -		return $token;
      -	  }
      -
      -	  /**
      -	   * all-in-one function to check the signature on a request
      -	   * should guess the signature method appropriately
      -	   */
      -	  private function check_signature(&$request, $consumer, $token) {
      -		// this should probably be in a different method
      -		$timestamp = @$request->get_parameter('oauth_timestamp');
      -		$nonce = @$request->get_parameter('oauth_nonce');
      -
      -		$this->check_timestamp($timestamp);
      -		$this->check_nonce($consumer, $token, $nonce, $timestamp);
      -
      -		$signature_method = $this->get_signature_method($request);
      -
      -		$signature = $request->get_parameter('oauth_signature');
      -		$valid_sig = $signature_method->check_signature(
      -		  $request,
      -		  $consumer,
      -		  $token,
      -		  $signature
      -		);
      -
      -		if (!$valid_sig) {
      -		  throw new OAuthException("Invalid signature");
      -		}
      -	  }
      -
      -	  /**
      -	   * check that the timestamp is new enough
      -	   */
      -	  private function check_timestamp($timestamp) {
      -		if( ! $timestamp )
      -		  throw new OAuthException(
      -			'Missing timestamp parameter. The parameter is required'
      -		  );
      -
      -		// verify that timestamp is recentish
      -		$now = time();
      -		if (abs($now - $timestamp) > $this->timestamp_threshold) {
      -		  throw new OAuthException(
      -			"Expired timestamp, yours $timestamp, ours $now"
      -		  );
      -		}
      -	  }
      -
      -	  /**
      -	   * check that the nonce is not repeated
      -	   */
      -	  private function check_nonce($consumer, $token, $nonce, $timestamp) {
      -		if( ! $nonce )
      -		  throw new OAuthException(
      -			'Missing nonce parameter. The parameter is required'
      -		  );
      -
      -		// verify that the nonce is uniqueish
      -		$found = $this->data_store->lookup_nonce(
      -		  $consumer,
      -		  $token,
      -		  $nonce,
      -		  $timestamp
      -		);
      -		if ($found) {
      -		  throw new OAuthException("Nonce already used: $nonce");
      -		}
      -	  }
      -
      -	}
      -
      -	class OAuthDataStore {
      -	  function lookup_consumer($consumer_key) {
      -		// implement me
      -	  }
      -
      -	  function lookup_token($consumer, $token_type, $token) {
      -		// implement me
      -	  }
      -
      -	  function lookup_nonce($consumer, $token, $nonce, $timestamp) {
      -		// implement me
      -	  }
      -
      -	  function new_request_token($consumer, $callback = null) {
      -		// return a new token attached to this consumer
      -	  }
      -
      -	  function new_access_token($token, $consumer, $verifier = null) {
      -		// return a new access token attached to this consumer
      -		// for the user associated with this token if the request token
      -		// is authorized
      -		// should also invalidate the request token
      -	  }
      -
      -	}
      -
      -	class OAuthUtil {
      -	  public static function urlencode_rfc3986($input) {
      -	  if (is_array($input)) {
      -		return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
      -	  } else if (is_scalar($input)) {
      -		return str_replace(
      -		  '+',
      -		  ' ',
      -		  str_replace('%7E', '~', rawurlencode($input))
      -		);
      -	  } else {
      -		return '';
      -	  }
      -	}
      -
      -
      -	  // This decode function isn't taking into consideration the above
      -	  // modifications to the encoding process. However, this method doesn't
      -	  // seem to be used anywhere so leaving it as is.
      -	  public static function urldecode_rfc3986($string) {
      -		return urldecode($string);
      -	  }
      -
      -	  // Utility function for turning the Authorization: header into
      -	  // parameters, has to do some unescaping
      -	  // Can filter out any non-oauth parameters if needed (default behaviour)
      -	  public static function split_header($header, $only_allow_oauth_parameters = true) {
      -		$pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
      -		$offset = 0;
      -		$params = array();
      -		while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
      -		  $match = $matches[0];
      -		  $header_name = $matches[2][0];
      -		  $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
      -		  if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
      -			$params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
      -		  }
      -		  $offset = $match[1] + strlen($match[0]);
      -		}
      -
      -		if (isset($params['realm'])) {
      -		  unset($params['realm']);
      -		}
      -
      -		return $params;
      -	  }
      -
      -	  // helper to try to sort out headers for people who aren't running apache
      -	  public static function get_headers() {
      -		if (function_exists('apache_request_headers')) {
      -		  // we need this to get the actual Authorization: header
      -		  // because apache tends to tell us it doesn't exist
      -		  $headers = apache_request_headers();
      -
      -		  // sanitize the output of apache_request_headers because
      -		  // we always want the keys to be Cased-Like-This and arh()
      -		  // returns the headers in the same case as they are in the
      -		  // request
      -		  $out = array();
      -		  foreach( $headers AS $key => $value ) {
      -			$key = str_replace(
      -				" ",
      -				"-",
      -				ucwords(strtolower(str_replace("-", " ", $key)))
      -			  );
      -			$out[$key] = $value;
      -		  }
      -		} else {
      -		  // otherwise we don't have apache and are just going to have to hope
      -		  // that $_SERVER actually contains what we need
      -		  $out = array();
      -		  if( isset($_SERVER['CONTENT_TYPE']) )
      -			$out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
      -		  if( isset($_ENV['CONTENT_TYPE']) )
      -			$out['Content-Type'] = $_ENV['CONTENT_TYPE'];
      -
      -		  foreach ($_SERVER as $key => $value) {
      -			if (substr($key, 0, 5) == "HTTP_") {
      -			  // this is chaos, basically it is just there to capitalize the first
      -			  // letter of every word that is not an initial HTTP and strip HTTP
      -			  // code from przemek
      -			  $key = str_replace(
      -				" ",
      -				"-",
      -				ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
      -			  );
      -			  $out[$key] = $value;
      -			}
      -		  }
      -		}
      -		return $out;
      -	  }
      -
      -	  // This function takes a input like a=b&a=c&d=e and returns the parsed
      -	  // parameters like this
      -	  // array('a' => array('b','c'), 'd' => 'e')
      -	  public static function parse_parameters( $input ) {
      -		if (!isset($input) || !$input) return array();
      -
      -		$pairs = explode('&', $input);
      -
      -		$parsed_parameters = array();
      -		foreach ($pairs as $pair) {
      -		  $split = explode('=', $pair, 2);
      -		  $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
      -		  $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
      -
      -		  if (isset($parsed_parameters[$parameter])) {
      -			// We have already recieved parameter(s) with this name, so add to the list
      -			// of parameters with this name
      -
      -			if (is_scalar($parsed_parameters[$parameter])) {
      -			  // This is the first duplicate, so transform scalar (string) into an array
      -			  // so we can add the duplicates
      -			  $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
      -			}
      -
      -			$parsed_parameters[$parameter][] = $value;
      -		  } else {
      -			$parsed_parameters[$parameter] = $value;
      -		  }
      -		}
      -		return $parsed_parameters;
      -	  }
      -
      -	  public static function build_http_query($params) {
      -		if (!$params) return '';
      -
      -		// Urlencode both keys and values
      -		$keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
      -		$values = OAuthUtil::urlencode_rfc3986(array_values($params));
      -		$params = array_combine($keys, $values);
      -
      -		// Parameters are sorted by name, using lexicographical byte value ordering.
      -		// Ref: Spec: 9.1.1 (1)
      -		uksort($params, 'strcmp');
      -
      -		$pairs = array();
      -		foreach ($params as $parameter => $value) {
      -		  if (is_array($value)) {
      -			// If two or more parameters share the same name, they are sorted by their value
      -			// Ref: Spec: 9.1.1 (1)
      -			natsort($value);
      -			foreach ($value as $duplicate_value) {
      -			  $pairs[] = $parameter . '=' . $duplicate_value;
      -			}
      -		  } else {
      -			$pairs[] = $parameter . '=' . $value;
      -		  }
      -		}
      -		// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
      -		// Each name-value pair is separated by an '&' character (ASCII code 38)
      -		return implode('&', $pairs);
      -	  }
      -	}
      -}
      diff --git a/tumblr/library/tumblroauth.php b/tumblr/library/tumblroauth.php
      index 365744eb..914e6afa 100644
      --- a/tumblr/library/tumblroauth.php
      +++ b/tumblr/library/tumblroauth.php
      @@ -6,9 +6,6 @@
        * The first PHP Library to support OAuth for Tumblr's REST API.  (Originally for Twitter, modified for Tumblr by Lucas)
        */
       
      -/* Load OAuth lib. You can find it at http://oauth.net */
      -require_once __DIR__ . DIRECTORY_SEPARATOR . 'OAuth1.php';
      -
       /**
        * Tumblr OAuth class
        */
      
      From 400d936db6f380d57e702e9d6e0a1c7424f887b2 Mon Sep 17 00:00:00 2001
      From: Benjamin Lorteau 
      Date: Wed, 31 Jan 2018 11:46:20 -0500
      Subject: [PATCH 042/116] [yourls] Add unsupported comment
      
      ---
       yourls/yourls.php | 2 +-
       1 file changed, 1 insertion(+), 1 deletion(-)
      
      diff --git a/yourls/yourls.php b/yourls/yourls.php
      index 3d434981..c5cd12ac 100644
      --- a/yourls/yourls.php
      +++ b/yourls/yourls.php
      @@ -4,7 +4,7 @@
        * Description: Defines a YourLS url shortener for the Statusnet & Twitter addons
        * Version: 1.0
        * Author: Keith Fernie 
      - * 
      + * Status: Unsupported
        */
       use Friendica\Core\Addon;
       use Friendica\Core\Config;
      
      From b24690e8df43b9db055fc67b5c306daf23d8ec56 Mon Sep 17 00:00:00 2001
      From: Hypolite Petovan 
      Date: Wed, 24 Jan 2018 21:29:09 -0500
      Subject: [PATCH 043/116] Refactor datetime_convert() into Temporal::convert()
      
      ---
       ...v_caldav_backend_virtual_friendica.inc.php |  9 ++++----
       dwpost/dwpost.php                             |  4 +++-
       fromgplus/fromgplus.php                       |  5 ++--
       ijpost/ijpost.php                             |  4 +++-
       ljpost/ljpost.php                             |  4 +++-
       membersince/membersince.php                   |  6 +++--
       public_server/public_server.php               | 12 ++++++----
       pumpio/pumpio.php                             | 18 ++++++++-------
       statusnet/statusnet.php                       | 21 +++++++++--------
       testdrive/testdrive.php                       |  6 +++--
       twitter/twitter.php                           | 23 ++++++++++---------
       11 files changed, 66 insertions(+), 46 deletions(-)
      
      diff --git a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php
      index 718d952d..405bbb19 100644
      --- a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php
      +++ b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php
      @@ -1,6 +1,7 @@
       
        */
      +
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
       use Friendica\Util\Network;
      +use Friendica\Util\Temporal;
       
       function dwpost_install() {
       	Addon::registerHook('post_local',           'addon/dwpost/dwpost.php', 'dwpost_post_local');
      @@ -185,7 +187,7 @@ function dwpost_send(&$a,&$b) {
       		$post = xmlify($post);
       		$tags = dwpost_get_tags($b['tag']);
       
      -		$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
      +		$date = Temporal::convert($b['created'], $tz);
       		$year = intval(substr($date,0,4));
       		$mon  = intval(substr($date,5,2));
       		$day  = intval(substr($date,8,2));
      diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php
      index 0a2b6802..fa6c0e39 100644
      --- a/fromgplus/fromgplus.php
      +++ b/fromgplus/fromgplus.php
      @@ -15,6 +15,7 @@ use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
       use Friendica\Object\Image;
       use Friendica\Util\Network;
      +use Friendica\Util\Temporal;
       
       require_once 'mod/share.php';
       require_once 'mod/parse_url.php';
      @@ -519,12 +520,12 @@ function fromgplus_fetch($a, $uid) {
       						if (function_exists("share_header"))
       							$post .= share_header($item->object->actor->displayName, $item->object->actor->url,
       										$item->object->actor->image->url, "",
      -										datetime_convert('UTC','UTC',$item->object->published),$item->object->url);
      +										Temporal::convert($item->object->published),$item->object->url);
       						else
       							$post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName).
       									"' profile='".$item->object->actor->url.
       									"' avatar='".$item->object->actor->image->url.
      -									"' posted='".datetime_convert('UTC','UTC',$item->object->published).
      +									"' posted='".Temporal::convert($item->object->published).
       									"' link='".$item->object->url."']";
       
       						$post .= fromgplus_html2bbcode($item->object->content);
      diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php
      index 9d9f9112..3c4e917d 100644
      --- a/ijpost/ijpost.php
      +++ b/ijpost/ijpost.php
      @@ -7,10 +7,12 @@
        * Author: Michael Johnston
        * Author: Cat Gray 
        */
      +
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
       use Friendica\Util\Network;
      +use Friendica\Util\Temporal;
       
       function ijpost_install() {
           Addon::registerHook('post_local',           'addon/ijpost/ijpost.php', 'ijpost_post_local');
      @@ -184,7 +186,7 @@ function ijpost_send(&$a,&$b) {
       		$post = xmlify($post);
       		$tags = ijpost_get_tags($b['tag']);
       
      -		$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
      +		$date = Temporal::convert($b['created'], $tz);
       		$year = intval(substr($date,0,4));
       		$mon  = intval(substr($date,5,2));
       		$day  = intval(substr($date,8,2));
      diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
      index 981162e8..ff89e5e6 100644
      --- a/ljpost/ljpost.php
      +++ b/ljpost/ljpost.php
      @@ -7,10 +7,12 @@
        * Author: Michael Johnston
        * Author: Cat Gray 
        */
      +
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
       use Friendica\Core\PConfig;
       use Friendica\Util\Network;
      +use Friendica\Util\Temporal;
       
       function ljpost_install() {
           Addon::registerHook('post_local',           'addon/ljpost/ljpost.php', 'ljpost_post_local');
      @@ -185,7 +187,7 @@ function ljpost_send(&$a,&$b) {
       		$post = xmlify($post);
       		$tags = ljpost_get_tags($b['tag']);
       
      -		$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
      +		$date = Temporal::convert($b['created'], $tz);
       		$year = intval(substr($date,0,4));
       		$mon  = intval(substr($date,5,2));
       		$day  = intval(substr($date,8,2));
      diff --git a/membersince/membersince.php b/membersince/membersince.php
      index f1f135e9..b8bbca49 100644
      --- a/membersince/membersince.php
      +++ b/membersince/membersince.php
      @@ -6,8 +6,10 @@
        * Author: Mike Macgirvin 
        *
        */
      +
       use Friendica\Core\Addon;
       use Friendica\Core\L10n;
      +use Friendica\Util\Temporal;
       
       require_once 'include/datetime.php';
       
      @@ -24,8 +26,8 @@ function membersince_uninstall()
       function membersince_display(&$a, &$b)
       {
       	// Works in Vier
      -	$b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . datetime_convert('UTC', date_default_timezone_get(), $a->profile['register_date']) . "
      \n
      ", $b, 1); + $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . Temporal::convert($a->profile['register_date'], date_default_timezone_get()) . "
      \n
      ", $b, 1); // Trying for Frio - //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . datetime_convert('UTC', date_default_timezone_get(), $a->profile['register_date']) . "
      ", $b, 1); + //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . Temporal::convert($a->profile['register_date'], date_default_timezone_get()) . "
      ", $b, 1); } diff --git a/public_server/public_server.php b/public_server/public_server.php index d3309e6e..52c115a3 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -5,10 +5,12 @@ * Version: 1.1 * Author: Keith Fernie */ + use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Model\User; +use Friendica\Util\Temporal; function public_server_install() { @@ -37,7 +39,7 @@ function public_server_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + dbesc(Temporal::convert('now +' . $days . ' days')), intval($days_posts), intval($uid) ); @@ -67,7 +69,7 @@ function public_server_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(datetime_convert()), + dbesc(Temporal::convert()), intval($rr['uid']) ); } @@ -85,7 +87,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), + dbesc(Temporal::convert('now +' . '6 days')), intval($rr['uid']) ); } @@ -98,7 +100,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), + dbesc(Temporal::convert('now +' . '6 days')), intval($rr['uid']) ); } @@ -136,7 +138,7 @@ function public_server_login($a,$b) { if(! $days) return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00'", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + dbesc(Temporal::convert('now +' . $days . ' days')), local_user() ); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 970bbf09..bdc56795 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -5,6 +5,7 @@ * Version: 0.2 * Author: Michael Vogel */ + use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -13,10 +14,11 @@ use Friendica\Core\Worker; use Friendica\Model\Contact; use Friendica\Model\GContact; use Friendica\Model\Group; -use Friendica\Model\User; use Friendica\Model\Item; use Friendica\Model\Queue; use Friendica\Util\Network; +use Friendica\Model\User; +use Friendica\Util\Temporal; require 'addon/pumpio/oauth/http.php'; require 'addon/pumpio/oauth/oauth_client.php'; @@ -869,7 +871,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { } $r = q("UPDATE `item` SET `deleted` = 1, `unseen` = 1, `changed` = '%s' WHERE `verb` = '%s' AND `uid` = %d AND `contact-id` = %d AND `thr-parent` = '%s'", - dbesc(datetime_convert()), + dbesc(Temporal::convert()), dbesc(ACTIVITY_LIKE), intval($uid), intval($contactid), @@ -1000,7 +1002,7 @@ function pumpio_get_contact($uid, $contact, $no_insert = false) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), dbesc($contact->url), dbesc(normalise_link($contact->url)), dbesc(str_replace("acct:", "", $contact->id)), @@ -1209,11 +1211,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if ($post->object->displayName != "") $postarray['title'] = $post->object->displayName; - $postarray['created'] = datetime_convert('UTC','UTC',$post->published); + $postarray['created'] = Temporal::convert($post->published); if (isset($post->updated)) - $postarray['edited'] = datetime_convert('UTC','UTC',$post->updated); + $postarray['edited'] = Temporal::convert($post->updated); elseif (isset($post->received)) - $postarray['edited'] = datetime_convert('UTC','UTC',$post->received); + $postarray['edited'] = Temporal::convert($post->received); else $postarray['edited'] = $postarray['created']; @@ -1228,7 +1230,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = share_header($share_author, $post->object->author->url, $post->object->author->image->url, "", - datetime_convert('UTC','UTC',$post->object->created), + Temporal::convert($post->object->created), $post->links->self->href). $postarray['body']."[/share]"; @@ -1236,7 +1238,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = "[share author='".$share_author. "' profile='".$post->object->author->url. "' avatar='".$post->object->author->image->url. - "' posted='".datetime_convert('UTC','UTC',$post->object->created). + "' posted='".Temporal::convert($post->object->created, 'UTC', 'UTC', ). "' link='".$post->links->self->href."']".$postarray['body']."[/share]"; */ } else { diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index d4d74f49..57095412 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -38,6 +38,8 @@ define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php'; require_once 'include/enotify.php'; +use Codebird\Codebird; +use CodebirdSN\CodebirdSN; use Friendica\App; use Friendica\Content\OEmbed; use Friendica\Content\Text\BBCode; @@ -52,6 +54,7 @@ use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\User; use Friendica\Util\Network; +use Friendica\Util\Temporal; function statusnet_install() { @@ -933,7 +936,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0 ) ", intval($uid), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -974,13 +977,13 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), intval($contact_id) ); } else { // update profile photos once every two weeks as we have no notification of when they change. - //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -2 days')) ? true : false); - $update_photo = ($r[0]['avatar-date'] < datetime_convert('', '', 'now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < Temporal::convert('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1005,9 +1008,9 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -1194,8 +1197,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = datetime_convert('UTC', 'UTC', $content->created_at); - $postarray['edited'] = datetime_convert('UTC', 'UTC', $content->created_at); + $postarray['created'] = Temporal::convert($content->created_at); + $postarray['edited'] = Temporal::convert($content->created_at); if (is_string($content->place->name)) { $postarray["location"] = $content->place->name; diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index 87c6de33..efff8c28 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -5,10 +5,12 @@ * Version: 1.0 * Author: Mike Macgirvin */ + use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Model\User; +use Friendica\Util\Temporal; function testdrive_install() { @@ -42,7 +44,7 @@ function testdrive_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + dbesc(Temporal::convert('now +' . $days . ' days')), intval($uid) ); @@ -70,7 +72,7 @@ function testdrive_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(datetime_convert()), + dbesc(Temporal::convert()), intval($rr['uid']) ); diff --git a/twitter/twitter.php b/twitter/twitter.php index 1863b8bc..d6d0ba7b 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -78,6 +78,7 @@ use Friendica\Model\Queue; use Friendica\Model\User; use Friendica\Object\Image; use Friendica\Util\Network; +use Friendica\Util\Temporal; require_once 'boot.php'; require_once 'include/dba.php'; @@ -1016,7 +1017,7 @@ function twitter_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), dbesc("https://twitter.com/" . $contact->screen_name), dbesc(normalise_link("https://twitter.com/" . $contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1060,16 +1061,16 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), intval($contact_id) ); } } else { // update profile photos once every two weeks as we have no notification of when they change. - //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -2 days')) ? true : false); - $update_photo = ($r[0]['avatar-date'] < datetime_convert('', '', 'now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < Temporal::convert('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1095,9 +1096,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), + dbesc(Temporal::convert()), dbesc("https://twitter.com/".$contact->screen_name), dbesc(normalise_link("https://twitter.com/".$contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1489,8 +1490,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $converted = twitter_expand_entities($a, $postarray['body'], $post, false, $picture); $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = datetime_convert('UTC', 'UTC', $post->created_at); - $postarray['edited'] = datetime_convert('UTC', 'UTC', $post->created_at); + $postarray['created'] = Temporal::convert($post->created_at); + $postarray['edited'] = Temporal::convert($post->created_at); $statustext = $converted["plain"]; From 6d23de1bdb6b53226006fa3d35849d45bc6bfec4 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 25 Jan 2018 22:00:29 -0500 Subject: [PATCH 044/116] Add Temporal::MYSQL constant --- dav/common/calendar.fnk.php | 5 +++-- dav/common/calendar_rendering.fnk.php | 7 ++++--- dav/common/wdcal_backend.inc.php | 9 +++++---- dav/common/wdcal_edit.inc.php | 9 +++++---- .../dav_caldav_backend_virtual_friendica.inc.php | 8 ++++---- pumpio/pumpio.php | 2 +- statusnet/statusnet.php | 2 +- twitter/twitter.php | 2 +- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/dav/common/calendar.fnk.php b/dav/common/calendar.fnk.php index 11f31f7d..1245ee2e 100644 --- a/dav/common/calendar.fnk.php +++ b/dav/common/calendar.fnk.php @@ -1,5 +1,6 @@ format("U"); } diff --git a/dav/common/calendar_rendering.fnk.php b/dav/common/calendar_rendering.fnk.php index d80892f7..ae6e39dd 100644 --- a/dav/common/calendar_rendering.fnk.php +++ b/dav/common/calendar_rendering.fnk.php @@ -1,5 +1,6 @@ getTimestamp() < time() ? 1 : 0); q("INSERT INTO %s%snotifications (`calendar_id`, `calendarobject_id`, `alert_date`, `notified`) VALUES (%d, %d, CONVERT_TZ('%s', '$timezoneOffset', @@session.time_zone), %d)", - CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar["id"]), IntVal($calendarobject["id"]), $alarm->format("Y-m-d H:i:s"), $notified + CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar["id"]), IntVal($calendarobject["id"]), $alarm->format(Temporal::MYSQL), $notified ); } diff --git a/dav/common/wdcal_backend.inc.php b/dav/common/wdcal_backend.inc.php index a3e18eb3..5418c90a 100644 --- a/dav/common/wdcal_backend.inc.php +++ b/dav/common/wdcal_backend.inc.php @@ -1,6 +1,7 @@ setDateTime(new DateTime(date("Y-m-d H:i:s", IntVal($_REQUEST["CalendarStartTime"]))), $type); + $datetime_start->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date("Y-m-d H:i:s", IntVal($_REQUEST["CalendarEndTime"]))), $type); + $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); $component->add($datetime_start); $component->add($datetime_end); @@ -182,9 +183,9 @@ function wdcal_print_feed($base_path = "") else $type = Sabre\VObject\Property\DateTime::LOCALTZ; $datetime_start = new Sabre\VObject\Property\DateTime("DTSTART"); - $datetime_start->setDateTime(new DateTime(date("Y-m-d H:i:s", IntVal($_REQUEST["CalendarStartTime"]))), $type); + $datetime_start->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date("Y-m-d H:i:s", IntVal($_REQUEST["CalendarEndTime"]))), $type); + $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); $component->__unset("DTSTART"); $component->__unset("DTEND"); diff --git a/dav/common/wdcal_edit.inc.php b/dav/common/wdcal_edit.inc.php index f4ac90c9..8154a68b 100644 --- a/dav/common/wdcal_edit.inc.php +++ b/dav/common/wdcal_edit.inc.php @@ -1,6 +1,7 @@ setDateTime(new DateTime(date("Y-m-d H:i:s", $ts_start)), $type); + $datetime_start->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_start)), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date("Y-m-d H:i:s", $ts_end)), $type); + $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_end)), $type); $component->__unset("DTSTART"); $component->__unset("DTEND"); @@ -598,7 +599,7 @@ function wdcal_set_component_recurrence(&$component, &$localization) $date = $localization->date_local2timestamp($_REQUEST["rec_until_date"]); $part_until = ";UNTIL=" . date("Ymd", $date); $datetime_until = new Sabre\VObject\Property\DateTime("UNTIL"); - $datetime_until->setDateTime(new DateTime(date("Y-m-d H:i:s", $date)), Sabre\VObject\Property\DateTime::DATE); + $datetime_until->setDateTime(new DateTime(date(Temporal::MYSQL, $date)), Sabre\VObject\Property\DateTime::DATE); break; case "count": $part_until = ";COUNT=" . IntVal($_REQUEST["rec_until_count"]); @@ -645,7 +646,7 @@ function wdcal_set_component_recurrence(&$component, &$localization) if (isset($_REQUEST["rec_exceptions"])) { $arr = array(); foreach ($_REQUEST["rec_exceptions"] as $except) { - $arr[] = new DateTime(date("Y-m-d H:i:s", $except)); + $arr[] = new DateTime(date(Temporal::MYSQL, $except)); } /** @var Sabre\VObject\Property\MultiDateTime $prop */ $prop = Sabre\VObject\Property::create("EXDATE"); diff --git a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php index 405bbb19..3baaa10c 100644 --- a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php +++ b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php @@ -88,9 +88,9 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual $type = ($allday ? Sabre\VObject\Property\DateTime::DATE : Sabre\VObject\Property\DateTime::LOCALTZ); $datetime_start = new Sabre\VObject\Property\DateTime("DTSTART"); - $datetime_start->setDateTime(new DateTime(date("Y-m-d H:i:s", $ts_start)), $type); + $datetime_start->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_start)), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date("Y-m-d H:i:s", $ts_end)), $type); + $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_end)), $type); $component->add($datetime_start); $component->add($datetime_end); @@ -175,11 +175,11 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual } if ($date_from != "") { - if (is_numeric($date_from)) $sql_where .= " AND `finish` >= '" . date("Y-m-d H:i:s", $date_from) . "'"; + if (is_numeric($date_from)) $sql_where .= " AND `finish` >= '" . date(Temporal::MYSQL, $date_from) . "'"; else $sql_where .= " AND `finish` >= '" . dbesc($date_from) . "'"; } if ($date_to != "") { - if (is_numeric($date_to)) $sql_where .= " AND `start` <= '" . date("Y-m-d H:i:s", $date_to) . "'"; + if (is_numeric($date_to)) $sql_where .= " AND `start` <= '" . date(Temporal::MYSQL, $date_to) . "'"; else $sql_where .= " AND `start` <= '" . dbesc($date_to) . "'"; } $ret = []; diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index bdc56795..7e34eab3 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -672,7 +672,7 @@ function pumpio_sync(&$a) { if ($abandon_days < 1) $abandon_days = 0; - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'pumpio' AND `k` = 'import' AND `v` = '1' ORDER BY RAND() "); if(count($r)) { diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 57095412..c5b62a5d 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -760,7 +760,7 @@ function statusnet_cron(App $a, $b) $abandon_days = 0; } - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'import' AND `v` ORDER BY RAND()"); if (count($r)) { diff --git a/twitter/twitter.php b/twitter/twitter.php index d6d0ba7b..9c2804b1 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -682,7 +682,7 @@ function twitter_cron(App $a, $b) $abandon_days = 0; } - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'twitter' AND `k` = 'import' AND `v` = '1'"); if (count($r)) { From e4f32f8ac8dbee577dc31195b1104add371f77eb Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 25 Jan 2018 23:28:13 -0500 Subject: [PATCH 045/116] Add Temporal::utcNow() --- public_server/public_server.php | 2 +- pumpio/pumpio.php | 4 ++-- statusnet/statusnet.php | 10 +++++----- testdrive/testdrive.php | 2 +- twitter/twitter.php | 14 +++++++------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/public_server/public_server.php b/public_server/public_server.php index 52c115a3..23777654 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -69,7 +69,7 @@ function public_server_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), intval($rr['uid']) ); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 7e34eab3..afdd3455 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -871,7 +871,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { } $r = q("UPDATE `item` SET `deleted` = 1, `unseen` = 1, `changed` = '%s' WHERE `verb` = '%s' AND `uid` = %d AND `contact-id` = %d AND `thr-parent` = '%s'", - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), dbesc(ACTIVITY_LIKE), intval($uid), intval($contactid), @@ -1002,7 +1002,7 @@ function pumpio_get_contact($uid, $contact, $no_insert = false) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), dbesc($contact->url), dbesc(normalise_link($contact->url)), dbesc(str_replace("acct:", "", $contact->id)), diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index c5b62a5d..ee0a6dab 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -936,7 +936,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0 ) ", intval($uid), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -977,7 +977,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), intval($contact_id) ); } else { @@ -1008,9 +1008,9 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index efff8c28..4f434123 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -72,7 +72,7 @@ function testdrive_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), intval($rr['uid']) ); diff --git a/twitter/twitter.php b/twitter/twitter.php index 9c2804b1..cc12e8de 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1017,7 +1017,7 @@ function twitter_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), dbesc("https://twitter.com/" . $contact->screen_name), dbesc(normalise_link("https://twitter.com/" . $contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1061,9 +1061,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), intval($contact_id) ); } @@ -1096,9 +1096,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), - dbesc(Temporal::convert()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), + dbesc(Temporal::utcNow()), dbesc("https://twitter.com/".$contact->screen_name), dbesc(normalise_link("https://twitter.com/".$contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), From cbc89d147d763cd57095ab22d6b068a68404c8ab Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 26 Jan 2018 07:30:06 -0500 Subject: [PATCH 046/116] Add Temporal::utc() shorthand to Temporal::convert() --- fromgplus/fromgplus.php | 4 ++-- public_server/public_server.php | 8 ++++---- pumpio/pumpio.php | 8 ++++---- statusnet/statusnet.php | 6 +++--- twitter/twitter.php | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index fa6c0e39..a65be286 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -520,12 +520,12 @@ function fromgplus_fetch($a, $uid) { if (function_exists("share_header")) $post .= share_header($item->object->actor->displayName, $item->object->actor->url, $item->object->actor->image->url, "", - Temporal::convert($item->object->published),$item->object->url); + Temporal::utc($item->object->published),$item->object->url); else $post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName). "' profile='".$item->object->actor->url. "' avatar='".$item->object->actor->image->url. - "' posted='".Temporal::convert($item->object->published). + "' posted='".Temporal::utc($item->object->published). "' link='".$item->object->url."']"; $post .= fromgplus_html2bbcode($item->object->content); diff --git a/public_server/public_server.php b/public_server/public_server.php index 23777654..29cf0f60 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -39,7 +39,7 @@ function public_server_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d", - dbesc(Temporal::convert('now +' . $days . ' days')), + dbesc(Temporal::utc('now +' . $days . ' days')), intval($days_posts), intval($uid) ); @@ -87,7 +87,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(Temporal::convert('now +' . '6 days')), + dbesc(Temporal::utc('now +' . '6 days')), intval($rr['uid']) ); } @@ -100,7 +100,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(Temporal::convert('now +' . '6 days')), + dbesc(Temporal::utc('now +' . '6 days')), intval($rr['uid']) ); } @@ -138,7 +138,7 @@ function public_server_login($a,$b) { if(! $days) return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00'", - dbesc(Temporal::convert('now +' . $days . ' days')), + dbesc(Temporal::utc('now +' . $days . ' days')), local_user() ); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index afdd3455..45dd5749 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -1211,11 +1211,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if ($post->object->displayName != "") $postarray['title'] = $post->object->displayName; - $postarray['created'] = Temporal::convert($post->published); + $postarray['created'] = Temporal::utc($post->published); if (isset($post->updated)) - $postarray['edited'] = Temporal::convert($post->updated); + $postarray['edited'] = Temporal::utc($post->updated); elseif (isset($post->received)) - $postarray['edited'] = Temporal::convert($post->received); + $postarray['edited'] = Temporal::utc($post->received); else $postarray['edited'] = $postarray['created']; @@ -1230,7 +1230,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = share_header($share_author, $post->object->author->url, $post->object->author->image->url, "", - Temporal::convert($post->object->created), + Temporal::utc($post->object->created), $post->links->self->href). $postarray['body']."[/share]"; diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index ee0a6dab..ae54e2fd 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -983,7 +983,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) } else { // update profile photos once every two weeks as we have no notification of when they change. //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); - $update_photo = ($r[0]['avatar-date'] < Temporal::convert('now -12 hours')); + $update_photo = ($r[0]['avatar-date'] < Temporal::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1197,8 +1197,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = Temporal::convert($content->created_at); - $postarray['edited'] = Temporal::convert($content->created_at); + $postarray['created'] = Temporal::utc($content->created_at); + $postarray['edited'] = Temporal::utc($content->created_at); if (is_string($content->place->name)) { $postarray["location"] = $content->place->name; diff --git a/twitter/twitter.php b/twitter/twitter.php index cc12e8de..0bffa4eb 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1070,7 +1070,7 @@ function twitter_fetch_contact($uid, $contact, $create_user) } else { // update profile photos once every two weeks as we have no notification of when they change. //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); - $update_photo = ($r[0]['avatar-date'] < Temporal::convert('now -12 hours')); + $update_photo = ($r[0]['avatar-date'] < Temporal::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1490,8 +1490,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $converted = twitter_expand_entities($a, $postarray['body'], $post, false, $picture); $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = Temporal::convert($post->created_at); - $postarray['edited'] = Temporal::convert($post->created_at); + $postarray['created'] = Temporal::utc($post->created_at); + $postarray['edited'] = Temporal::utc($post->created_at); $statustext = $converted["plain"]; From 13fb4a312dab2fefb8dd484b3492036391e80cb0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 26 Jan 2018 19:33:46 -0500 Subject: [PATCH 047/116] Add Temporal::local() shorthand for Temporal::convert() --- .../dav_caldav_backend_virtual_friendica.inc.php | 8 ++++---- membersince/membersince.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php index 3baaa10c..092dbbd8 100644 --- a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php +++ b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php @@ -68,8 +68,8 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual $component = dav_get_eventComponent($vevent); if ($row["adjust"]) { - $start = Temporal::convert($row["start"], date_default_timezone_get()); - $finish = Temporal::convert($row["finish"], date_default_timezone_get()); + $start = Temporal::local($row["start"]); + $finish = Temporal::local($row["finish"]); } else { $start = $row["start"]; $finish = $row["finish"]; @@ -116,8 +116,8 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual private function jqcal2wdcal($row, $calendar, $base_path) { if ($row["adjust"]) { - $start = Temporal::convert($row["start"], date_default_timezone_get()); - $finish = Temporal::convert($row["finish"], date_default_timezone_get()); + $start = Temporal::local($row["start"]); + $finish = Temporal::local($row["finish"]); } else { $start = $row["start"]; $finish = $row["finish"]; diff --git a/membersince/membersince.php b/membersince/membersince.php index b8bbca49..fb923bde 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -26,8 +26,8 @@ function membersince_uninstall() function membersince_display(&$a, &$b) { // Works in Vier - $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . Temporal::convert($a->profile['register_date'], date_default_timezone_get()) . "
      \n
      ", $b, 1); + $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . Temporal::local($a->profile['register_date']) . "
      \n
      ", $b, 1); // Trying for Frio - //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . Temporal::convert($a->profile['register_date'], date_default_timezone_get()) . "
      ", $b, 1); + //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . Temporal::local($a->profile['register_date']) . "
      ", $b, 1); } From 1900da6c421a939b9a98994e974f2ab01d6ded74 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 26 Jan 2018 21:39:02 -0500 Subject: [PATCH 048/116] Move Temporal::convert() to DateTimeFormat::convert() --- dav/common/calendar.fnk.php | 6 ++--- dav/common/calendar_rendering.fnk.php | 8 +++--- dav/common/wdcal_backend.inc.php | 10 +++---- dav/common/wdcal_edit.inc.php | 10 +++---- ...v_caldav_backend_virtual_friendica.inc.php | 18 ++++++------- dwpost/dwpost.php | 2 +- fromgplus/fromgplus.php | 6 ++--- ijpost/ijpost.php | 2 +- ljpost/ljpost.php | 2 +- membersince/membersince.php | 6 ++--- public_server/public_server.php | 12 ++++----- pumpio/pumpio.php | 18 ++++++------- statusnet/statusnet.php | 22 ++++++++-------- testdrive/testdrive.php | 6 ++--- twitter/twitter.php | 26 +++++++++---------- 15 files changed, 77 insertions(+), 77 deletions(-) diff --git a/dav/common/calendar.fnk.php b/dav/common/calendar.fnk.php index 1245ee2e..ef1a9b0c 100644 --- a/dav/common/calendar.fnk.php +++ b/dav/common/calendar.fnk.php @@ -1,6 +1,6 @@ format("U"); } diff --git a/dav/common/calendar_rendering.fnk.php b/dav/common/calendar_rendering.fnk.php index ae6e39dd..bc13ce39 100644 --- a/dav/common/calendar_rendering.fnk.php +++ b/dav/common/calendar_rendering.fnk.php @@ -1,6 +1,6 @@ getTimestamp() < time() ? 1 : 0); q("INSERT INTO %s%snotifications (`calendar_id`, `calendarobject_id`, `alert_date`, `notified`) VALUES (%d, %d, CONVERT_TZ('%s', '$timezoneOffset', @@session.time_zone), %d)", - CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar["id"]), IntVal($calendarobject["id"]), $alarm->format(Temporal::MYSQL), $notified + CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar["id"]), IntVal($calendarobject["id"]), $alarm->format(DateTimeFormat::MYSQL), $notified ); } diff --git a/dav/common/wdcal_backend.inc.php b/dav/common/wdcal_backend.inc.php index 5418c90a..d66251f4 100644 --- a/dav/common/wdcal_backend.inc.php +++ b/dav/common/wdcal_backend.inc.php @@ -1,7 +1,7 @@ setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); + $datetime_start->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); + $datetime_end->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); $component->add($datetime_start); $component->add($datetime_end); @@ -183,9 +183,9 @@ function wdcal_print_feed($base_path = "") else $type = Sabre\VObject\Property\DateTime::LOCALTZ; $datetime_start = new Sabre\VObject\Property\DateTime("DTSTART"); - $datetime_start->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); + $datetime_start->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, IntVal($_REQUEST["CalendarStartTime"]))), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); + $datetime_end->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, IntVal($_REQUEST["CalendarEndTime"]))), $type); $component->__unset("DTSTART"); $component->__unset("DTEND"); diff --git a/dav/common/wdcal_edit.inc.php b/dav/common/wdcal_edit.inc.php index 8154a68b..49cc1523 100644 --- a/dav/common/wdcal_edit.inc.php +++ b/dav/common/wdcal_edit.inc.php @@ -1,7 +1,7 @@ setDateTime(new DateTime(date(Temporal::MYSQL, $ts_start)), $type); + $datetime_start->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, $ts_start)), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_end)), $type); + $datetime_end->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, $ts_end)), $type); $component->__unset("DTSTART"); $component->__unset("DTEND"); @@ -599,7 +599,7 @@ function wdcal_set_component_recurrence(&$component, &$localization) $date = $localization->date_local2timestamp($_REQUEST["rec_until_date"]); $part_until = ";UNTIL=" . date("Ymd", $date); $datetime_until = new Sabre\VObject\Property\DateTime("UNTIL"); - $datetime_until->setDateTime(new DateTime(date(Temporal::MYSQL, $date)), Sabre\VObject\Property\DateTime::DATE); + $datetime_until->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, $date)), Sabre\VObject\Property\DateTime::DATE); break; case "count": $part_until = ";COUNT=" . IntVal($_REQUEST["rec_until_count"]); @@ -646,7 +646,7 @@ function wdcal_set_component_recurrence(&$component, &$localization) if (isset($_REQUEST["rec_exceptions"])) { $arr = array(); foreach ($_REQUEST["rec_exceptions"] as $except) { - $arr[] = new DateTime(date(Temporal::MYSQL, $except)); + $arr[] = new DateTime(date(DateTimeFormat::MYSQL, $except)); } /** @var Sabre\VObject\Property\MultiDateTime $prop */ $prop = Sabre\VObject\Property::create("EXDATE"); diff --git a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php index 092dbbd8..b02b9150 100644 --- a/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php +++ b/dav/friendica/dav_caldav_backend_virtual_friendica.inc.php @@ -1,7 +1,7 @@ setDateTime(new DateTime(date(Temporal::MYSQL, $ts_start)), $type); + $datetime_start->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, $ts_start)), $type); $datetime_end = new Sabre\VObject\Property\DateTime("DTEND"); - $datetime_end->setDateTime(new DateTime(date(Temporal::MYSQL, $ts_end)), $type); + $datetime_end->setDateTime(new DateTime(date(DateTimeFormat::MYSQL, $ts_end)), $type); $component->add($datetime_start); $component->add($datetime_end); @@ -116,8 +116,8 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual private function jqcal2wdcal($row, $calendar, $base_path) { if ($row["adjust"]) { - $start = Temporal::local($row["start"]); - $finish = Temporal::local($row["finish"]); + $start = DateTimeFormat::local($row["start"]); + $finish = DateTimeFormat::local($row["finish"]); } else { $start = $row["start"]; $finish = $row["finish"]; @@ -175,11 +175,11 @@ class Sabre_CalDAV_Backend_Friendica extends Sabre_CalDAV_Backend_Virtual } if ($date_from != "") { - if (is_numeric($date_from)) $sql_where .= " AND `finish` >= '" . date(Temporal::MYSQL, $date_from) . "'"; + if (is_numeric($date_from)) $sql_where .= " AND `finish` >= '" . date(DateTimeFormat::MYSQL, $date_from) . "'"; else $sql_where .= " AND `finish` >= '" . dbesc($date_from) . "'"; } if ($date_to != "") { - if (is_numeric($date_to)) $sql_where .= " AND `start` <= '" . date(Temporal::MYSQL, $date_to) . "'"; + if (is_numeric($date_to)) $sql_where .= " AND `start` <= '" . date(DateTimeFormat::MYSQL, $date_to) . "'"; else $sql_where .= " AND `start` <= '" . dbesc($date_to) . "'"; } $ret = []; diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 3730aa2b..fe4a53ef 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -187,7 +187,7 @@ function dwpost_send(&$a,&$b) { $post = xmlify($post); $tags = dwpost_get_tags($b['tag']); - $date = Temporal::convert($b['created'], $tz); + $date = DateTimeFormat::convert($b['created'], $tz); $year = intval(substr($date,0,4)); $mon = intval(substr($date,5,2)); $day = intval(substr($date,8,2)); diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index a65be286..b8d9511a 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -14,8 +14,8 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Object\Image; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; require_once 'mod/share.php'; require_once 'mod/parse_url.php'; @@ -520,12 +520,12 @@ function fromgplus_fetch($a, $uid) { if (function_exists("share_header")) $post .= share_header($item->object->actor->displayName, $item->object->actor->url, $item->object->actor->image->url, "", - Temporal::utc($item->object->published),$item->object->url); + DateTimeFormat::utc($item->object->published),$item->object->url); else $post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName). "' profile='".$item->object->actor->url. "' avatar='".$item->object->actor->image->url. - "' posted='".Temporal::utc($item->object->published). + "' posted='".DateTimeFormat::utc($item->object->published). "' link='".$item->object->url."']"; $post .= fromgplus_html2bbcode($item->object->content); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 3c4e917d..ffafa5ee 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -186,7 +186,7 @@ function ijpost_send(&$a,&$b) { $post = xmlify($post); $tags = ijpost_get_tags($b['tag']); - $date = Temporal::convert($b['created'], $tz); + $date = DateTimeFormat::convert($b['created'], $tz); $year = intval(substr($date,0,4)); $mon = intval(substr($date,5,2)); $day = intval(substr($date,8,2)); diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index ff89e5e6..2a14172f 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -187,7 +187,7 @@ function ljpost_send(&$a,&$b) { $post = xmlify($post); $tags = ljpost_get_tags($b['tag']); - $date = Temporal::convert($b['created'], $tz); + $date = DateTimeFormat::convert($b['created'], $tz); $year = intval(substr($date,0,4)); $mon = intval(substr($date,5,2)); $day = intval(substr($date,8,2)); diff --git a/membersince/membersince.php b/membersince/membersince.php index fb923bde..c1d38b83 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -9,7 +9,7 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; -use Friendica\Util\Temporal; +use Friendica\Util\DateTimeFormat; require_once 'include/datetime.php'; @@ -26,8 +26,8 @@ function membersince_uninstall() function membersince_display(&$a, &$b) { // Works in Vier - $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . Temporal::local($a->profile['register_date']) . "
      \n
      ", $b, 1); + $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . DateTimeFormat::local($a->profile['register_date']) . "
      \n
      ", $b, 1); // Trying for Frio - //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . Temporal::local($a->profile['register_date']) . "
      ", $b, 1); + //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . DateTimeFormat::local($a->profile['register_date']) . "
      ", $b, 1); } diff --git a/public_server/public_server.php b/public_server/public_server.php index 29cf0f60..a5c4cec7 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -10,7 +10,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Model\User; -use Friendica\Util\Temporal; +use Friendica\Util\DateTimeFormat; function public_server_install() { @@ -39,7 +39,7 @@ function public_server_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d", - dbesc(Temporal::utc('now +' . $days . ' days')), + dbesc(DateTimeFormat::utc('now +' . $days . ' days')), intval($days_posts), intval($uid) ); @@ -69,7 +69,7 @@ function public_server_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($rr['uid']) ); } @@ -87,7 +87,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(Temporal::utc('now +' . '6 days')), + dbesc(DateTimeFormat::utc('now +' . '6 days')), intval($rr['uid']) ); } @@ -100,7 +100,7 @@ function public_server_cron($a,$b) { if(count($r)) { foreach($r as $rr) q("update user set account_expires_on = '%s' where uid = %d", - dbesc(Temporal::utc('now +' . '6 days')), + dbesc(DateTimeFormat::utc('now +' . '6 days')), intval($rr['uid']) ); } @@ -138,7 +138,7 @@ function public_server_login($a,$b) { if(! $days) return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00'", - dbesc(Temporal::utc('now +' . $days . ' days')), + dbesc(DateTimeFormat::utc('now +' . $days . ' days')), local_user() ); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 45dd5749..1e416f47 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -18,7 +18,7 @@ use Friendica\Model\Item; use Friendica\Model\Queue; use Friendica\Util\Network; use Friendica\Model\User; -use Friendica\Util\Temporal; +use Friendica\Util\DateTimeFormat; require 'addon/pumpio/oauth/http.php'; require 'addon/pumpio/oauth/oauth_client.php'; @@ -672,7 +672,7 @@ function pumpio_sync(&$a) { if ($abandon_days < 1) $abandon_days = 0; - $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'pumpio' AND `k` = 'import' AND `v` = '1' ORDER BY RAND() "); if(count($r)) { @@ -871,7 +871,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { } $r = q("UPDATE `item` SET `deleted` = 1, `unseen` = 1, `changed` = '%s' WHERE `verb` = '%s' AND `uid` = %d AND `contact-id` = %d AND `thr-parent` = '%s'", - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc(ACTIVITY_LIKE), intval($uid), intval($contactid), @@ -1002,7 +1002,7 @@ function pumpio_get_contact($uid, $contact, $no_insert = false) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->url), dbesc(normalise_link($contact->url)), dbesc(str_replace("acct:", "", $contact->id)), @@ -1211,11 +1211,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if ($post->object->displayName != "") $postarray['title'] = $post->object->displayName; - $postarray['created'] = Temporal::utc($post->published); + $postarray['created'] = DateTimeFormat::utc($post->published); if (isset($post->updated)) - $postarray['edited'] = Temporal::utc($post->updated); + $postarray['edited'] = DateTimeFormat::utc($post->updated); elseif (isset($post->received)) - $postarray['edited'] = Temporal::utc($post->received); + $postarray['edited'] = DateTimeFormat::utc($post->received); else $postarray['edited'] = $postarray['created']; @@ -1230,7 +1230,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = share_header($share_author, $post->object->author->url, $post->object->author->image->url, "", - Temporal::utc($post->object->created), + DateTimeFormat::utc($post->object->created), $post->links->self->href). $postarray['body']."[/share]"; @@ -1238,7 +1238,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = "[share author='".$share_author. "' profile='".$post->object->author->url. "' avatar='".$post->object->author->image->url. - "' posted='".Temporal::convert($post->object->created, 'UTC', 'UTC', ). + "' posted='".DateTimeFormat::convert($post->object->created, 'UTC', 'UTC', ). "' link='".$post->links->self->href."']".$postarray['body']."[/share]"; */ } else { diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index ae54e2fd..22e8f5f9 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -53,8 +53,8 @@ use Friendica\Model\Group; use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\User; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; function statusnet_install() { @@ -760,7 +760,7 @@ function statusnet_cron(App $a, $b) $abandon_days = 0; } - $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'import' AND `v` ORDER BY RAND()"); if (count($r)) { @@ -936,7 +936,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0 ) ", intval($uid), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -977,13 +977,13 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($contact_id) ); } else { // update profile photos once every two weeks as we have no notification of when they change. - //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); - $update_photo = ($r[0]['avatar-date'] < Temporal::utc('now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < DateTimeFormat::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < DateTimeFormat::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1008,9 +1008,9 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -1197,8 +1197,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = Temporal::utc($content->created_at); - $postarray['edited'] = Temporal::utc($content->created_at); + $postarray['created'] = DateTimeFormat::utc($content->created_at); + $postarray['edited'] = DateTimeFormat::utc($content->created_at); if (is_string($content->place->name)) { $postarray["location"] = $content->place->name; diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index 4f434123..5c3930cd 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -10,7 +10,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Model\User; -use Friendica\Util\Temporal; +use Friendica\Util\DateTimeFormat; function testdrive_install() { @@ -44,7 +44,7 @@ function testdrive_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d", - dbesc(Temporal::convert('now +' . $days . ' days')), + dbesc(DateTimeFormat::convert('now +' . $days . ' days')), intval($uid) ); @@ -72,7 +72,7 @@ function testdrive_cron($a,$b) { ]); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($rr['uid']) ); diff --git a/twitter/twitter.php b/twitter/twitter.php index 0bffa4eb..bf85f081 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -77,8 +77,8 @@ use Friendica\Model\Photo; use Friendica\Model\Queue; use Friendica\Model\User; use Friendica\Object\Image; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; require_once 'boot.php'; require_once 'include/dba.php'; @@ -682,7 +682,7 @@ function twitter_cron(App $a, $b) $abandon_days = 0; } - $abandon_limit = date(Temporal::MYSQL, time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'twitter' AND `k` = 'import' AND `v` = '1'"); if (count($r)) { @@ -1017,7 +1017,7 @@ function twitter_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc("https://twitter.com/" . $contact->screen_name), dbesc(normalise_link("https://twitter.com/" . $contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1061,16 +1061,16 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($contact_id) ); } } else { // update profile photos once every two weeks as we have no notification of when they change. - //$update_photo = (($r[0]['avatar-date'] < Temporal::convert('now -2 days', '', '', )) ? true : false); - $update_photo = ($r[0]['avatar-date'] < Temporal::utc('now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < DateTimeFormat::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < DateTimeFormat::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion if ((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) { @@ -1096,9 +1096,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), - dbesc(Temporal::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc("https://twitter.com/".$contact->screen_name), dbesc(normalise_link("https://twitter.com/".$contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1490,8 +1490,8 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis $converted = twitter_expand_entities($a, $postarray['body'], $post, false, $picture); $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = Temporal::utc($post->created_at); - $postarray['edited'] = Temporal::utc($post->created_at); + $postarray['created'] = DateTimeFormat::utc($post->created_at); + $postarray['edited'] = DateTimeFormat::utc($post->created_at); $statustext = $converted["plain"]; From 80cfdc68c983f42ee43df15c50610f0a0dc49657 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Feb 2018 12:31:33 -0500 Subject: [PATCH 049/116] Replace datetime functions by Temporal methods --- forumdirectory/forumdirectory.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 03e77002..a72c45ba 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -13,6 +13,7 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Database\DBM; use Friendica\Model\Profile; +use Friendica\Util\Temporal; require_once 'boot.php'; require_once 'include/dba.php'; @@ -149,7 +150,7 @@ function forumdirectory_content(&$a) $details .= $rr['country-name']; } - if (strlen($rr['dob']) && ($years = age($rr['dob'], $rr['timezone'], '')) != 0) { + if (strlen($rr['dob']) && ($years = Temporal::getAgeByTimezone($rr['dob'], $rr['timezone'], '')) != 0) { $details .= '
      ' . L10n::t('Age: ') . $years; } From 36f964aacfa819aec684485ac86bd7cadae8abc2 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Feb 2018 19:29:39 -0500 Subject: [PATCH 050/116] [tumblr] Replace bbcode function with BBCode method --- tumblr/tumblr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 8f258f56..2ba26afc 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -376,7 +376,7 @@ function tumblr_send(&$a,&$b) { if (isset($siteinfo["text"])) $body = $siteinfo["text"]; else - $body = bb_remove_share_information($b["body"]); + $body = BBCode::removeShareInformation($b["body"]); switch ($siteinfo["type"]) { case "photo": From 8ff287e169bbdf77960166795d71fa20f26bf22b Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Mon, 5 Feb 2018 12:58:48 +0100 Subject: [PATCH 051/116] membersince: include/datetime.php isn't available anymore in core develop --- membersince/membersince.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index c1d38b83..63482579 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -11,8 +11,6 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Util\DateTimeFormat; -require_once 'include/datetime.php'; - function membersince_install() { Addon::registerHook('profile_advanced', 'addon/membersince/membersince.php', 'membersince_display'); From 476bb091b3b22ad5c959efefcf6736fb49c1c5ef Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Mon, 5 Feb 2018 13:04:28 +0100 Subject: [PATCH 052/116] remove more requirements for include/datetime.php --- dwpost/dwpost.php | 1 - ljpost/ljpost.php | 1 - 2 files changed, 2 deletions(-) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index fe4a53ef..6a9cfe52 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -180,7 +180,6 @@ function dwpost_send(&$a,&$b) { if($dw_username && $dw_password && $dw_blog) { require_once('include/bbcode.php'); - require_once('include/datetime.php'); $title = $b['title']; $post = bbcode($b['body']); diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 2a14172f..de62c976 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -180,7 +180,6 @@ function ljpost_send(&$a,&$b) { if($lj_username && $lj_password && $lj_blog) { require_once('include/bbcode.php'); - require_once('include/datetime.php'); $title = xmlify($b['title']); $post = bbcode($b['body']); From 8b049a96bd3733126f77ac83507306243bc7663d Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 6 Feb 2018 14:24:24 +0000 Subject: [PATCH 053/116] Direct calls to the database are replace by class calls to the item class --- pumpio/pumpio.php | 32 ++++++++------------------------ statusnet/statusnet.php | 6 +----- twitter/twitter.php | 11 ++--------- 3 files changed, 11 insertions(+), 38 deletions(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 1e416f47..82d54a94 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -543,10 +543,7 @@ function pumpio_send(&$a,&$b) { logger('pumpio_send '.$username.': success '.$post_id); if($post_id && $iscomment) { logger('pumpio_send '.$username.': Update extid '.$post_id." for post id ".$b['id']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc($post_id), - intval($b['id']) - ); + Item::update(['extid' => $post_id], ['id' => $b['id']]); } } else { logger('pumpio_send '.$username.': '.$url.' general error: ' . print_r($user,true)); @@ -870,13 +867,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { $contactid = $orig_post['contact-id']; } - $r = q("UPDATE `item` SET `deleted` = 1, `unseen` = 1, `changed` = '%s' WHERE `verb` = '%s' AND `uid` = %d AND `contact-id` = %d AND `thr-parent` = '%s'", - dbesc(DateTimeFormat::utcNow()), - dbesc(ACTIVITY_LIKE), - intval($uid), - intval($contactid), - dbesc($orig_post['uri']) - ); + Item::delete(["`verb` = ? AND `uid` = ? AND `contact-id` = ? AND `thr-parent` = ?", ACTIVITY_LIKE, $uid, $contactid, $orig_post['uri']]); if(count($r)) logger("pumpio_dounlike: unliked existing like. User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']); @@ -1060,7 +1051,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return Item::delete($r[0]["id"]); + return Item::deleteById($r[0]["id"]); $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", dbesc($post->object->id), @@ -1068,7 +1059,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return Item::delete($r[0]["id"]); + return Item::deleteById($r[0]["id"]); } function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = true) { @@ -1256,13 +1247,9 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray["id"] = $top_item; if (($top_item == 0) && ($post->verb == "update")) { - $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s' , `changed` = '%s' WHERE `uri` = '%s' AND `uid` = %d", - dbesc($postarray["title"]), - dbesc($postarray["body"]), - dbesc($postarray["edited"]), - dbesc($postarray["uri"]), - intval($uid) - ); + $fields = ['title' => $postarray["title"], 'body' => $postarray["body"], 'changed' => $postarray["edited"]]; + $condition = ['uri' => $postarray["uri"], 'uid' => $uid]; + Item::update($fields, $condition); } if ($post->object->objectType == "comment") { @@ -1491,10 +1478,7 @@ function pumpio_queue_hook(&$a,&$b) { logger('pumpio_queue: send '.$username.': success '.$post_id); if($post_id && $iscomment) { logger('pumpio_send '.$username.': Update extid '.$post_id." for post id ".$z['item']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc($post_id), - intval($z['item']) - ); + Item::update(['extid' => $post_id], ['id' => $z['item']]); } Queue::removeItem($x['id']); } else diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 22e8f5f9..f1c080f4 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -600,11 +600,7 @@ function statusnet_post_hook(App $a, &$b) logger('Send to GNU Social failed: "' . $result->error . '"'); } elseif ($iscomment) { logger('statusnet_post: Update extid ' . $result->id . " for post id " . $b['id']); - q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - dbesc($hostname . "::" . $result->id), - dbesc($result->text), - intval($b['id']) - ); + Item::update(['extid' => $hostname . "::" . $result->id, 'body' => $result->text], ['id' => $b['id']]); } } if ($tempfile != "") { diff --git a/twitter/twitter.php b/twitter/twitter.php index bf85f081..47b4fa07 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -571,11 +571,7 @@ function twitter_post_hook(App $a, &$b) $image = ""; } elseif ($iscomment) { logger('twitter_post: Update extid ' . $result->id_str . " for post id " . $b['id']); - q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - dbesc("twitter::" . $result->id_str), - dbesc($result->text), - intval($b['id']) - ); + Item::update(['extid' => "twitter::" . $result->id_str, 'body' => $result->text], ['id' => $b['id']]); } } @@ -621,10 +617,7 @@ function twitter_post_hook(App $a, &$b) notice(L10n::t('Twitter post failed. Queued for retry.') . EOL); } elseif ($iscomment) { logger('twitter_post: Update extid ' . $result->id_str . " for post id " . $b['id']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc("twitter::" . $result->id_str), - intval($b['id']) - ); + Item::update(['extid' => "twitter::" . $result->id_str], ['id' => $b['id']]); } } } From d29890613ebafb39dfd175c041f48da8416adc4f Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 6 Feb 2018 16:24:35 +0000 Subject: [PATCH 054/116] Simpler form --- pumpio/pumpio.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 82d54a94..8e194f85 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -867,7 +867,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { $contactid = $orig_post['contact-id']; } - Item::delete(["`verb` = ? AND `uid` = ? AND `contact-id` = ? AND `thr-parent` = ?", ACTIVITY_LIKE, $uid, $contactid, $orig_post['uri']]); + Item::delete(['verb' => ACTIVITY_LIKE, 'uid' => $uid, 'contact-id' => $contactid, 'thr-parent' => $orig_post['uri']]); if(count($r)) logger("pumpio_dounlike: unliked existing like. User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']); From 22ac032cc3ca8580dd974ac0c55ea2378b0680c1 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Tue, 6 Feb 2018 18:24:03 +0100 Subject: [PATCH 055/116] membersince addon works now with frio --- membersince/membersince.php | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index 63482579..de7519c9 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -23,9 +23,37 @@ function membersince_uninstall() function membersince_display(&$a, &$b) { - // Works in Vier - $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . DateTimeFormat::local($a->profile['register_date']) . "
      \n
      ", $b, 1); + if (current_theme() == 'frio') { + // Works in Frio. + $doc = new DOMDocument(); + $doc->loadHTML($b); - // Trying for Frio - //$b = preg_replace('/<\/div>/', "

      " . L10n::t('Member since:') . "
      " . DateTimeFormat::local($a->profile['register_date']) . "
      ", $b, 1); + $elm = $doc->getElementById('aprofile-fullname'); + + $div = $doc->createElement('div'); + $div->setAttribute('id','aprofile-membersince'); + $div->setAttribute('class','col-lg-12 col-md-12 col-sm-12 col-xs-12 aprofile'); + + // The seperator line. + $hr = $doc->createElement('hr',''); + $hr->setAttribute('class','profile-separator'); + + // The label div. + $label = $doc->createElement('div', L10n::t('Member since:')); + $label->setAttribute('class', 'col-lg-4 col-md-4 col-sm-4 col-xs-12 profile-label-name text-muted'); + + // The div for the register date of the profile owner. + $entry = $doc->createElement('div', DateTimeFormat::local($a->profile['register_date'])); + $entry->setAttribute('class', 'col-lg-8 col-md-8 col-sm-8 col-xs-12 profile-entry'); + + $div->appendChild($hr); + $div->appendChild($label); + $div->appendChild($entry); + $elm->parentNode->appendChild($div); + + $b = $doc->saveHTML(); + } else { + // Works in Vier. + $b = preg_replace('/<\/dl>/', "\n\n\n
      \n
      " . L10n::t('Member since:') . "
      \n
      " . DateTimeFormat::local($a->profile['register_date']) . "
      \n
      ", $b, 1); + } } From 40f99e48287c6cb44e3f1d3df3e8dabfb9d9c259 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Tue, 6 Feb 2018 18:26:34 +0100 Subject: [PATCH 056/116] update membersince addon to version 1.1 since it does now support frio --- membersince/membersince.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index de7519c9..67d29e1d 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -2,7 +2,7 @@ /** * Name: MemberSince * Description: Display membership date in profile - * Version: 1.0 + * Version: 1.1 * Author: Mike Macgirvin * */ From 9faa56702aeaa5cba1ec512a9868d75545e8a34f Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Wed, 7 Feb 2018 14:34:30 +0100 Subject: [PATCH 057/116] membersince is now added in frio after the fullname entry --- membersince/membersince.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index 67d29e1d..8c42c135 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -49,7 +49,7 @@ function membersince_display(&$a, &$b) $div->appendChild($hr); $div->appendChild($label); $div->appendChild($entry); - $elm->parentNode->appendChild($div); + $elm->parentNode->insertBefore($div, $elm->nextSibling); $b = $doc->saveHTML(); } else { From a307bf472e54f245d3202b500f3dd60e091f0fd8 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Wed, 7 Feb 2018 17:01:27 +0100 Subject: [PATCH 058/116] membersince: fix utf-8 encoding issues --- membersince/membersince.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index 8c42c135..01de8fd4 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -26,7 +26,7 @@ function membersince_display(&$a, &$b) if (current_theme() == 'frio') { // Works in Frio. $doc = new DOMDocument(); - $doc->loadHTML($b); + $doc->loadHTML(mb_convert_encoding($b, 'HTML-ENTITIES', 'UTF-8')); $elm = $doc->getElementById('aprofile-fullname'); From 760abd869449719ebf0276130374f6521ae6d180 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Feb 2018 20:19:22 -0500 Subject: [PATCH 059/116] [twitter] Fix TwitterOauth library usage - Use array result instead of object --- twitter/twitter.php | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 47b4fa07..82651812 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -288,34 +288,28 @@ function twitter_settings(App $a, &$s) $s .= ''; if ((!$ckey) && (!$csecret)) { - /* * * - * no global consumer keys + /* no global consumer keys * display warning and skip personal config */ $s .= '

      ' . L10n::t('No consumer key pair for Twitter found. Please contact your site administrator.') . '

      '; } else { - /* * * - * ok we have a consumer key pair now look into the OAuth stuff - */ + // ok we have a consumer key pair now look into the OAuth stuff if ((!$otoken) && (!$osecret)) { - /* * * - * the user has not yet connected the account to twitter... + /* the user has not yet connected the account to twitter... * get a temporary OAuth key/secret pair and display a button with * which the user can request a PIN to connect the account to a * account at Twitter. */ $connection = new TwitterOAuth($ckey, $csecret); $result = $connection->oauth('oauth/request_token', ['oauth_callback' => 'oob']); - /* * * - * make some nice form - */ + $s .= '

      ' . L10n::t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

      '; - $s .= '' . L10n::t('Log in with Twitter') . ''; + $s .= '' . L10n::t('Log in with Twitter') . ''; $s .= '
      '; $s .= ''; $s .= ''; - $s .= ''; - $s .= ''; + $s .= ''; + $s .= ''; $s .= '
      '; $s .= '
      '; } else { From afae967c5d0bb43e6e24944ee75422f7febeff98 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Feb 2018 20:20:42 -0500 Subject: [PATCH 060/116] [twitter] Add POST parameter checks - Add Exception handling --- twitter/twitter.php | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 82651812..ca67dfbc 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -200,11 +200,11 @@ function twitter_settings_post(App $a, $post) return; } // don't check twitter settings if twitter submit button is not clicked - if (!x($_POST, 'twitter-submit')) { + if (empty($_POST['twitter-disconnect']) && empty($_POST['twitter-submit'])) { return; } - if (isset($_POST['twitter-disconnect'])) { + if (!empty($_POST['twitter-disconnect'])) { /* * * * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * from the user configuration @@ -229,12 +229,20 @@ function twitter_settings_post(App $a, $post) // the token and secret for which the PIN was generated were hidden in the settings // form as token and token2, we need a new connection to Twitter using these token // and secret to request a Access Token with the PIN - $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); - $token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]); - // ok, now that we have the Access Token, save them in the user config - PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); - PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); - PConfig::set(local_user(), 'twitter', 'post', 1); + try { + if (empty($_POST['twitter-pin'])) { + throw new Exception(L10n::t('You submitted an empty PIN, please Sign In with Twitter again to get a new one.')); + } + + $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); + $token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]); + // ok, now that we have the Access Token, save them in the user config + PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); + PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); + PConfig::set(local_user(), 'twitter', 'post', 1); + } catch(Exception $e) { + info($e->getMessage()); + } // reload the Addon Settings page, if we don't do it see Bug #42 goaway('settings/connectors'); } else { From 91a9d5e2ef6e7497624a94379bcee82414be75d5 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Feb 2018 22:41:25 -0500 Subject: [PATCH 061/116] [twitter] Remove unused function parameter in twitter_expand_entities - Remove duplicate assignment to $tags --- twitter/twitter.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 47b4fa07..279a660f 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1147,10 +1147,8 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") return $contact_id; } -function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $picture) +function twitter_expand_entities(App $a, $body, $item, $picture) { - $tags = ""; - $plain = $body; if (isset($item->entities->urls)) { @@ -1234,10 +1232,6 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur $body = add_page_info_to_body($body); } - if ($no_tags) { - return ["body" => $body, "tags" => "", "plain" => $plain]; - } - $tags_arr = []; foreach ($item->entities->hashtags AS $hashtag) { @@ -1302,7 +1296,7 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur * @param object $post Twitter object with the post * @param array $postarray Array of the item that is about to be posted * - * @return $picture string Returns a a single picture string if it isn't a media post + * @return $picture string Image URL or empty string */ function twitter_media_entities($post, &$postarray) { @@ -1480,7 +1474,7 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis // Search for media links $picture = twitter_media_entities($post, $postarray); - $converted = twitter_expand_entities($a, $postarray['body'], $post, false, $picture); + $converted = twitter_expand_entities($a, $postarray['body'], $post, $picture); $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; $postarray['created'] = DateTimeFormat::utc($post->created_at); From 471b3788eb3a8abd9f4acc90186c1814020fa934 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Feb 2018 22:43:22 -0500 Subject: [PATCH 062/116] [twitter] Perform mention/hashtags replacements before expanding links - Move mention/hashtags replacement out of URL existence check --- twitter/twitter.php | 93 +++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 279a660f..7a94ebbc 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1151,6 +1151,20 @@ function twitter_expand_entities(App $a, $body, $item, $picture) { $plain = $body; + $tags_arr = []; + + foreach ($item->entities->hashtags AS $hashtag) { + $url = "#[url=" . $a->get_baseurl() . "/search?tag=" . rawurlencode($hashtag->text) . "]" . $hashtag->text . "[/url]"; + $tags_arr["#" . $hashtag->text] = $url; + $body = str_replace("#" . $hashtag->text, $url, $body); + } + + foreach ($item->entities->user_mentions AS $mention) { + $url = "@[url=https://twitter.com/" . rawurlencode($mention->screen_name) . "]" . $mention->screen_name . "[/url]"; + $tags_arr["@" . $mention->screen_name] = $url; + $body = str_replace("@" . $mention->screen_name, $url, $body); + } + if (isset($item->entities->urls)) { $type = ""; $footerurl = ""; @@ -1231,62 +1245,49 @@ function twitter_expand_entities(App $a, $body, $item, $picture) } elseif (($footer == "") && ($picture == "")) { $body = add_page_info_to_body($body); } + } - $tags_arr = []; + // it seems as if the entities aren't always covering all mentions. So the rest will be checked here + $tags = get_tags($body); - foreach ($item->entities->hashtags AS $hashtag) { - $url = "#[url=" . $a->get_baseurl() . "/search?tag=" . rawurlencode($hashtag->text) . "]" . $hashtag->text . "[/url]"; - $tags_arr["#" . $hashtag->text] = $url; - $body = str_replace("#" . $hashtag->text, $url, $body); - } + if (count($tags)) { + foreach ($tags as $tag) { + if (strstr(trim($tag), " ")) { + continue; + } - foreach ($item->entities->user_mentions AS $mention) { - $url = "@[url=https://twitter.com/" . rawurlencode($mention->screen_name) . "]" . $mention->screen_name . "[/url]"; - $tags_arr["@" . $mention->screen_name] = $url; - $body = str_replace("@" . $mention->screen_name, $url, $body); - } - - // it seems as if the entities aren't always covering all mentions. So the rest will be checked here - $tags = get_tags($body); - - if (count($tags)) { - foreach ($tags as $tag) { - if (strstr(trim($tag), " ")) { + if (strpos($tag, '#') === 0) { + if (strpos($tag, '[url=')) { continue; } - if (strpos($tag, '#') === 0) { - if (strpos($tag, '[url=')) { - continue; - } - - // don't link tags that are already embedded in links - if (preg_match('/\[(.*?)' . preg_quote($tag, '/') . '(.*?)\]/', $body)) { - continue; - } - if (preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag, '/') . '(.*?)\)/', $body)) { - continue; - } - - $basetag = str_replace('_', ' ', substr($tag, 1)); - $url = '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; - $body = str_replace($tag, $url, $body); - $tags_arr["#" . $basetag] = $url; - } elseif (strpos($tag, '@') === 0) { - if (strpos($tag, '[url=')) { - continue; - } - - $basetag = substr($tag, 1); - $url = '@[url=https://twitter.com/' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; - $body = str_replace($tag, $url, $body); - $tags_arr["@" . $basetag] = $url; + // don't link tags that are already embedded in links + if (preg_match('/\[(.*?)' . preg_quote($tag, '/') . '(.*?)\]/', $body)) { + continue; } + if (preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag, '/') . '(.*?)\)/', $body)) { + continue; + } + + $basetag = str_replace('_', ' ', substr($tag, 1)); + $url = '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; + $body = str_replace($tag, $url, $body); + $tags_arr["#" . $basetag] = $url; + } elseif (strpos($tag, '@') === 0) { + if (strpos($tag, '[url=')) { + continue; + } + + $basetag = substr($tag, 1); + $url = '@[url=https://twitter.com/' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; + $body = str_replace($tag, $url, $body); + $tags_arr["@" . $basetag] = $url; } } - - $tags = implode($tags_arr, ","); } + + $tags = implode($tags_arr, ","); + return ["body" => $body, "tags" => $tags, "plain" => $plain]; } From 590baf22e5cbdd68266e9394aeaf39da7001fdcf Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 8 Feb 2018 05:40:21 +0000 Subject: [PATCH 063/116] Namethingy is now unsupported --- namethingy/namethingy.php | 1 + 1 file changed, 1 insertion(+) diff --git a/namethingy/namethingy.php b/namethingy/namethingy.php index b5faf9fd..c758fc08 100644 --- a/namethingy/namethingy.php +++ b/namethingy/namethingy.php @@ -5,6 +5,7 @@ * Description: The Ultimate Random Name Generator * Version: 1.0 * Author: Mike Macgirvin + * Status: Unsupported */ use Friendica\Core\Addon; From 297a4ff92f4a609c368f54168b8cf412f0f34f5d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Thu, 8 Feb 2018 07:09:48 +0100 Subject: [PATCH 064/116] regen twitter messages.po file for new strings from #521 --- twitter/lang/C/messages.po | 80 +++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/twitter/lang/C/messages.po b/twitter/lang/C/messages.po index 95c07141..f6d08a44 100644 --- a/twitter/lang/C/messages.po +++ b/twitter/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2018-02-08 07:07+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,25 +17,31 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: twitter.php:77 +#: twitter.php:193 msgid "Post to Twitter" msgstr "" -#: twitter.php:129 +#: twitter.php:234 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "" + +#: twitter.php:261 msgid "Twitter settings updated." msgstr "" -#: twitter.php:157 -msgid "Twitter Posting Settings" +#: twitter.php:291 twitter.php:295 +msgid "Twitter Import/Export/Mirror" msgstr "" -#: twitter.php:164 +#: twitter.php:302 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "" -#: twitter.php:183 +#: twitter.php:314 msgid "" "At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -44,77 +50,73 @@ msgid "" "be posted to Twitter." msgstr "" -#: twitter.php:184 +#: twitter.php:315 msgid "Log in with Twitter" msgstr "" -#: twitter.php:186 +#: twitter.php:317 msgid "Copy the PIN from Twitter here" msgstr "" -#: twitter.php:191 twitter.php:229 twitter.php:556 -msgid "Submit" +#: twitter.php:322 twitter.php:364 twitter.php:642 +msgid "Save Settings" msgstr "" -#: twitter.php:200 +#: twitter.php:334 msgid "Currently connected to: " msgstr "" -#: twitter.php:201 +#: twitter.php:335 +msgid "Disconnect" +msgstr "" + +#: twitter.php:345 +msgid "Allow posting to Twitter" +msgstr "" + +#: twitter.php:345 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for " "every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:203 +#: twitter.php:348 msgid "" -"Note: Due your privacy settings (Hide your profile " +"Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " "postings relayed to Twitter will lead the visitor to a blank page informing " "the visitor that the access to your profile has been restricted." msgstr "" -#: twitter.php:206 -msgid "Allow posting to Twitter" -msgstr "" - -#: twitter.php:209 +#: twitter.php:351 msgid "Send public postings to Twitter by default" msgstr "" -#: twitter.php:213 -msgid "Mirror all posts from twitter that are no replies or retweets" +#: twitter.php:354 +msgid "Mirror all posts from twitter that are no replies" msgstr "" -#: twitter.php:217 -msgid "Shortening method that optimizes the tweet" +#: twitter.php:357 +msgid "Import the remote timeline" msgstr "" -#: twitter.php:221 -msgid "Send linked #-tags and @-names to Twitter" +#: twitter.php:360 +msgid "Automatically create contacts" msgstr "" -#: twitter.php:226 -msgid "Clear OAuth configuration" +#: twitter.php:619 +msgid "Twitter post failed. Queued for retry." msgstr "" -#: twitter.php:550 +#: twitter.php:634 msgid "Settings updated." msgstr "" -#: twitter.php:558 +#: twitter.php:644 msgid "Consumer key" msgstr "" -#: twitter.php:559 +#: twitter.php:645 msgid "Consumer secret" msgstr "" - -#: twitter.php:560 -msgid "Name of the Twitter Application" -msgstr "" - -#: twitter.php:560 -msgid "set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "" From 3f398723f2c579e422ff154095070cf02843d83c Mon Sep 17 00:00:00 2001 From: Andy H3 Date: Fri, 9 Feb 2018 17:14:20 +0700 Subject: [PATCH 065/116] Update blockem.php Add description and improved displayed text --- blockem/blockem.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/blockem/blockem.php b/blockem/blockem.php index 3f4b8865..45272e00 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -1,7 +1,7 @@ * @@ -56,7 +56,8 @@ function blockem_addon_settings(&$a, &$s) $s .= ''; $s .= '
      '; - $s .= ''; + $s .= '
      '. L10n::t("Hides user's content by collapsing posts. Also replaces their avatar with generic image.") . '
      '; + $s .= ''; $s .= ''; $s .= '
      '; @@ -136,7 +137,7 @@ function blockem_prepare_body(&$a,&$b) { } if($found) { $rnd = random_string(8); - $b['html'] = ''; + $b['html'] = ''; } } From c0c96ea1c45c4f29d47726a192ca0db692841e8b Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 9 Feb 2018 13:01:31 +0100 Subject: [PATCH 066/116] regen blockem master messages.po file --- blockem/lang/C/messages.po | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/blockem/lang/C/messages.po b/blockem/lang/C/messages.po index 39c4f231..ad7ea9c2 100644 --- a/blockem/lang/C/messages.po +++ b/blockem/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,35 +17,41 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blockem.php:53 blockem.php:57 +#: blockem.php:51 blockem.php:55 msgid "\"Blockem\"" msgstr "" -#: blockem.php:61 -msgid "Comma separated profile URLS to block" +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." msgstr "" -#: blockem.php:65 +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "" + +#: blockem.php:64 msgid "Save Settings" msgstr "" -#: blockem.php:78 +#: blockem.php:77 msgid "BLOCKEM Settings saved." msgstr "" -#: blockem.php:142 +#: blockem.php:140 #, php-format -msgid "Blocked %s - Click to open/close" +msgid "Hidden content by %s - Click to open/close" msgstr "" -#: blockem.php:197 +#: blockem.php:193 msgid "Unblock Author" msgstr "" -#: blockem.php:199 +#: blockem.php:195 msgid "Block Author" msgstr "" -#: blockem.php:231 +#: blockem.php:227 msgid "blockem settings updated" msgstr "" From f7092a20df878f213a4712977d000825492789ae Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Fri, 9 Feb 2018 21:26:48 +0100 Subject: [PATCH 067/116] membersince: mark membersince as unsupported because it is now in core --- membersince/membersince.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/membersince/membersince.php b/membersince/membersince.php index 01de8fd4..982a704d 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -4,7 +4,7 @@ * Description: Display membership date in profile * Version: 1.1 * Author: Mike Macgirvin - * + * Status: Unsupported */ use Friendica\Core\Addon; From 585970cb7e33f47cbdd0c085e13a438afadc8a1a Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Fri, 9 Feb 2018 21:57:16 +0100 Subject: [PATCH 068/116] communityhome: bring login button back in frio --- communityhome/communityhome.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/communityhome/communityhome.css b/communityhome/communityhome.css index 45a65537..09da8ea2 100644 --- a/communityhome/communityhome.css +++ b/communityhome/communityhome.css @@ -41,3 +41,8 @@ aside #likes { margin: 0px; padding: 0px; list-style: none; } aside #div_id_remember { overflow: auto; width: 100%; padding-top:120px;} #login_openid input { width: 160px; } + +/* frio fix */ +body.mod-home .navbar.navbar-fixed-top ul.nav.navbar-nav #nav-login { + display: block; +} From 7b4a7bfc32cd95b6102f70d829d85114160ff453 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 10 Feb 2018 18:40:53 +0100 Subject: [PATCH 069/116] updated translation for blockem addon --- blockem/lang/de/messages.po | 49 +++++++++++++++++++++---------------- blockem/lang/de/strings.php | 9 ++++--- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/blockem/lang/de/messages.po b/blockem/lang/de/messages.po index c2384d61..14665878 100644 --- a/blockem/lang/de/messages.po +++ b/blockem/lang/de/messages.po @@ -4,50 +4,57 @@ # # # Translators: -# bavatar , 2014-2015 +# Tobias Diekershoff , 2014 +# Tobias Diekershoff , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-07-27 05:29+0000\n" -"Last-Translator: bavatar \n" -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-02-10 17:32+0000\n" +"Last-Translator: Tobias Diekershoff \n" +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blockem.php:51 -msgid "\"Blockem\" Settings" -msgstr "\"Blockem\"-Einstellungen" +#: blockem.php:51 blockem.php:55 +msgid "\"Blockem\"" +msgstr "\"Blockem\"" -#: blockem.php:53 -msgid "Comma separated profile URLS to block" -msgstr "Profil-URLs, die geblockt werden sollen (durch Kommas getrennt)" +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Verbirgt Inhalte von Kontakten durch kollabieren der Beiträge. Des weiteren wird das Profilbild durch einen generischen Avatar ersetzt." -#: blockem.php:57 -msgid "Submit" -msgstr "Senden" +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "Komma separierte Liste von Profil URLs" -#: blockem.php:70 +#: blockem.php:64 +msgid "Save Settings" +msgstr "Einstellungen speichern" + +#: blockem.php:77 msgid "BLOCKEM Settings saved." msgstr "BLOCKEM-Einstellungen gesichert." -#: blockem.php:105 +#: blockem.php:140 #, php-format -msgid "Blocked %s - Click to open/close" -msgstr "%s blockiert - Zum Öffnen/Schließen klicken" +msgid "Hidden content by %s - Click to open/close" +msgstr "Verborgene Inhalte von %s - Zum Öffnen/Schließen klicken" -#: blockem.php:160 +#: blockem.php:193 msgid "Unblock Author" msgstr "Autor freischalten" -#: blockem.php:162 +#: blockem.php:195 msgid "Block Author" msgstr "Autor blockieren" -#: blockem.php:194 +#: blockem.php:227 msgid "blockem settings updated" msgstr "blockem Einstellungen aktualisiert" diff --git a/blockem/lang/de/strings.php b/blockem/lang/de/strings.php index d3089c4d..e9de08dc 100644 --- a/blockem/lang/de/strings.php +++ b/blockem/lang/de/strings.php @@ -5,11 +5,12 @@ function string_plural_select_de($n){ return ($n != 1);; }} ; -$a->strings["\"Blockem\" Settings"] = "\"Blockem\"-Einstellungen"; -$a->strings["Comma separated profile URLS to block"] = "Profil-URLs, die geblockt werden sollen (durch Kommas getrennt)"; -$a->strings["Submit"] = "Senden"; +$a->strings["\"Blockem\""] = "\"Blockem\""; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Verbirgt Inhalte von Kontakten durch kollabieren der Beiträge. Des weiteren wird das Profilbild durch einen generischen Avatar ersetzt."; +$a->strings["Comma separated profile URLS:"] = "Komma separierte Liste von Profil URLs"; +$a->strings["Save Settings"] = "Einstellungen speichern"; $a->strings["BLOCKEM Settings saved."] = "BLOCKEM-Einstellungen gesichert."; -$a->strings["Blocked %s - Click to open/close"] = "%s blockiert - Zum Öffnen/Schließen klicken"; +$a->strings["Hidden content by %s - Click to open/close"] = "Verborgene Inhalte von %s - Zum Öffnen/Schließen klicken"; $a->strings["Unblock Author"] = "Autor freischalten"; $a->strings["Block Author"] = "Autor blockieren"; $a->strings["blockem settings updated"] = "blockem Einstellungen aktualisiert"; From f6b3e9058d28b4d087ed0bf71377a549ab9e6a2e Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 10 Feb 2018 18:44:07 +0100 Subject: [PATCH 070/116] updated DE translation of the Twitter addon --- twitter/lang/de/messages.po | 84 ++++++++++++++++++------------------- twitter/lang/de/strings.php | 11 +++-- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/twitter/lang/de/messages.po b/twitter/lang/de/messages.po index b17031a7..cb26733b 100644 --- a/twitter/lang/de/messages.po +++ b/twitter/lang/de/messages.po @@ -4,40 +4,47 @@ # # # Translators: -# bavatar , 2014 +# Tobias Diekershoff , 2014-2015 +# Tobias Diekershoff , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-09-06 11:55+0000\n" -"Last-Translator: bavatar \n" -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" +"POT-Creation-Date: 2018-02-08 07:07+0100\n" +"PO-Revision-Date: 2018-02-10 17:41+0000\n" +"Last-Translator: Tobias Diekershoff \n" +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:146 +#: twitter.php:193 msgid "Post to Twitter" -msgstr "An Twitter senden" +msgstr "Auf Twitter veröffentlichen" -#: twitter.php:203 +#: twitter.php:234 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter and um eine neue PIN zu erhalten." + +#: twitter.php:261 msgid "Twitter settings updated." msgstr "Twitter Einstellungen aktualisiert." -#: twitter.php:233 twitter.php:237 +#: twitter.php:291 twitter.php:295 msgid "Twitter Import/Export/Mirror" msgstr "Twitter Import/Export/Spiegeln" -#: twitter.php:245 +#: twitter.php:302 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite." -#: twitter.php:264 +#: twitter.php:314 msgid "" "At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -46,82 +53,73 @@ msgid "" " be posted to Twitter." msgstr "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." -#: twitter.php:265 +#: twitter.php:315 msgid "Log in with Twitter" msgstr "bei Twitter anmelden" -#: twitter.php:267 +#: twitter.php:317 msgid "Copy the PIN from Twitter here" msgstr "Kopiere die Twitter-PIN hier her" -#: twitter.php:272 twitter.php:311 twitter.php:569 +#: twitter.php:322 twitter.php:364 twitter.php:642 msgid "Save Settings" msgstr "Einstellungen speichern" -#: twitter.php:281 +#: twitter.php:334 msgid "Currently connected to: " msgstr "Momentan verbunden mit: " -#: twitter.php:282 +#: twitter.php:335 +msgid "Disconnect" +msgstr "Trennen" + +#: twitter.php:345 +msgid "Allow posting to Twitter" +msgstr "Veröffentlichung bei Twitter erlauben" + +#: twitter.php:345 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen." -#: twitter.php:284 +#: twitter.php:348 msgid "" -"Note: Due your privacy settings (Hide your profile " +"Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " "postings relayed to Twitter will lead the visitor to a blank page informing " "the visitor that the access to your profile has been restricted." msgstr "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde." -#: twitter.php:287 -msgid "Allow posting to Twitter" -msgstr "Veröffentlichung bei Twitter erlauben" - -#: twitter.php:290 +#: twitter.php:351 msgid "Send public postings to Twitter by default" msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter" -#: twitter.php:294 +#: twitter.php:354 msgid "Mirror all posts from twitter that are no replies" msgstr "Spiegle alle Beiträge von Twitter die keine Antworten oder wiederholten Nachrichten sind" -#: twitter.php:299 +#: twitter.php:357 msgid "Import the remote timeline" msgstr "Importiere die entfernte Zeitleiste" -#: twitter.php:303 +#: twitter.php:360 msgid "Automatically create contacts" msgstr "Automatisch Kontakte anlegen" -#: twitter.php:308 -msgid "Clear OAuth configuration" -msgstr "OAuth Konfiguration löschen" - -#: twitter.php:539 +#: twitter.php:619 msgid "Twitter post failed. Queued for retry." msgstr "Twitter post failed. Queued for retry." -#: twitter.php:563 +#: twitter.php:634 msgid "Settings updated." msgstr "Einstellungen aktualisiert." -#: twitter.php:571 +#: twitter.php:644 msgid "Consumer key" msgstr "Consumer Key" -#: twitter.php:572 +#: twitter.php:645 msgid "Consumer secret" msgstr "Consumer Secret" - -#: twitter.php:573 -msgid "Name of the Twitter Application" -msgstr "Name der Twitter Anwendung" - -#: twitter.php:573 -msgid "" -"set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "Setze dies um eine Spiegelung von ~friendica zu ~friendica zu vermeiden" diff --git a/twitter/lang/de/strings.php b/twitter/lang/de/strings.php index 69083a2b..e6adf09c 100644 --- a/twitter/lang/de/strings.php +++ b/twitter/lang/de/strings.php @@ -5,7 +5,8 @@ function string_plural_select_de($n){ return ($n != 1);; }} ; -$a->strings["Post to Twitter"] = "An Twitter senden"; +$a->strings["Post to Twitter"] = "Auf Twitter veröffentlichen"; +$a->strings["You submitted an empty PIN, please Sign In with Twitter again to get a new one."] = "Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter and um eine neue PIN zu erhalten."; $a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert."; $a->strings["Twitter Import/Export/Mirror"] = "Twitter Import/Export/Spiegeln"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite."; @@ -14,17 +15,15 @@ $a->strings["Log in with Twitter"] = "bei Twitter anmelden"; $a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter-PIN hier her"; $a->strings["Save Settings"] = "Einstellungen speichern"; $a->strings["Currently connected to: "] = "Momentan verbunden mit: "; -$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; -$a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde."; +$a->strings["Disconnect"] = "Trennen"; $a->strings["Allow posting to Twitter"] = "Veröffentlichung bei Twitter erlauben"; +$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; +$a->strings["Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde."; $a->strings["Send public postings to Twitter by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter"; $a->strings["Mirror all posts from twitter that are no replies"] = "Spiegle alle Beiträge von Twitter die keine Antworten oder wiederholten Nachrichten sind"; $a->strings["Import the remote timeline"] = "Importiere die entfernte Zeitleiste"; $a->strings["Automatically create contacts"] = "Automatisch Kontakte anlegen"; -$a->strings["Clear OAuth configuration"] = "OAuth Konfiguration löschen"; $a->strings["Twitter post failed. Queued for retry."] = "Twitter post failed. Queued for retry."; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Consumer key"] = "Consumer Key"; $a->strings["Consumer secret"] = "Consumer Secret"; -$a->strings["Name of the Twitter Application"] = "Name der Twitter Anwendung"; -$a->strings["set this to avoid mirroring postings from ~friendica back to ~friendica"] = "Setze dies um eine Spiegelung von ~friendica zu ~friendica zu vermeiden"; From f4e38b6ee9f88afbf5eaba9eba8523fe0295dd01 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 14 Feb 2018 21:38:37 -0500 Subject: [PATCH 071/116] Fix use statements --- dwpost/dwpost.php | 2 +- ijpost/ijpost.php | 2 +- ljpost/ljpost.php | 2 +- pumpio/pumpio.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 6a9cfe52..d9d06675 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -11,8 +11,8 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; function dwpost_install() { Addon::registerHook('post_local', 'addon/dwpost/dwpost.php', 'dwpost_post_local'); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index ffafa5ee..cd4d72cd 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -11,8 +11,8 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; function ijpost_install() { Addon::registerHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index de62c976..8fbc3b11 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -11,8 +11,8 @@ use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Util\Temporal; function ljpost_install() { Addon::registerHook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 8e194f85..6a7a08cf 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -16,9 +16,9 @@ use Friendica\Model\GContact; use Friendica\Model\Group; use Friendica\Model\Item; use Friendica\Model\Queue; -use Friendica\Util\Network; use Friendica\Model\User; use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; require 'addon/pumpio/oauth/http.php'; require 'addon/pumpio/oauth/oauth_client.php'; From 91fd77af3b2cff61ad474f52a13e733cd696098e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 14 Feb 2018 21:43:40 -0500 Subject: [PATCH 072/116] Refactor bbcode() into BBCode::convert() --- blogger/blogger.php | 4 +++- dwpost/dwpost.php | 3 ++- ijpost/ijpost.php | 3 ++- impressum/impressum.php | 7 ++++--- ljpost/ljpost.php | 3 ++- mailstream/mailstream.php | 6 ++++-- newmemberwidget/newmemberwidget.php | 3 ++- notifyall/notifyall.php | 6 ++++-- pumpio/pumpio.php | 3 ++- tumblr/tumblr.php | 12 ++++++------ windowsphonepush/windowsphonepush.php | 4 +++- wppost/wppost.php | 6 +++--- 12 files changed, 37 insertions(+), 23 deletions(-) diff --git a/blogger/blogger.php b/blogger/blogger.php index 7dfbcc4a..76c12bbb 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -5,6 +5,8 @@ * Version: 1.0 * */ + +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -184,7 +186,7 @@ function blogger_send(&$a, &$b) require_once('include/bbcode.php'); $title = '' . (($b['title']) ? $b['title'] : L10n::t('Post from Friendica')) . ''; - $post = $title . bbcode($b['body']); + $post = $title . BBCode::convert($b['body']); $post = xmlify($post); $xml = <<< EOT diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index d9d06675..7e8488c3 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -8,6 +8,7 @@ * Author: Cat Gray */ +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -182,7 +183,7 @@ function dwpost_send(&$a,&$b) { require_once('include/bbcode.php'); $title = $b['title']; - $post = bbcode($b['body']); + $post = BBCode::convert($b['body']); $post = xmlify($post); $tags = dwpost_get_tags($b['tag']); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index cd4d72cd..5ccb6761 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -8,6 +8,7 @@ * Author: Cat Gray */ +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -182,7 +183,7 @@ function ijpost_send(&$a,&$b) { require_once('include/datetime.php'); $title = $b['title']; - $post = bbcode($b['body']); + $post = BBCode::convert($b['body']); $post = xmlify($post); $tags = ijpost_get_tags($b['tag']); diff --git a/impressum/impressum.php b/impressum/impressum.php index 3a5efbcc..ae6ddf18 100644 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -10,6 +10,7 @@ require_once 'include/bbcode.php'; require_once 'mod/proxy.php'; +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -39,7 +40,7 @@ function obfuscate_email ($s) { return $s; } function impressum_footer($a, &$b) { - $text = proxy_parse_html(bbcode(Config::get('impressum','footer_text'), true)); + $text = proxy_parse_html(BBCode::convert(Config::get('impressum','footer_text'))); if (! $text == '') { $a->page['htmlhead'] .= ''; $b .= '
      '; @@ -50,8 +51,8 @@ function impressum_show($a,&$b) { $b .= '

      '.L10n::t('Impressum').'

      '; $owner = Config::get('impressum', 'owner'); $owner_profile = Config::get('impressum','ownerprofile'); - $postal = proxy_parse_html(bbcode(Config::get('impressum', 'postal'), true)); - $notes = proxy_parse_html(bbcode(Config::get('impressum', 'notes'), true)); + $postal = proxy_parse_html(BBCode::convert(Config::get('impressum', 'postal'))); + $notes = proxy_parse_html(BBCode::convert(Config::get('impressum', 'notes'))); $email = obfuscate_email( Config::get('impressum','email') ); if (strlen($owner)) { if (strlen($owner_profile)) { diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 8fbc3b11..97daf519 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -8,6 +8,7 @@ * Author: Cat Gray */ +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -182,7 +183,7 @@ function ljpost_send(&$a,&$b) { require_once('include/bbcode.php'); $title = xmlify($b['title']); - $post = bbcode($b['body']); + $post = BBCode::convert($b['body']); $post = xmlify($post); $tags = ljpost_get_tags($b['tag']); diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 4ff4c69d..acab5914 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -5,6 +5,8 @@ * Version: 1.1 * Author: Matthew Exon */ + +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -180,7 +182,7 @@ function mailstream_sender($item) { } function mailstream_decode_subject($subject) { - $html = bbcode($subject); + $html = BBCode::convert($subject); if (!$html) { return $subject; } @@ -285,7 +287,7 @@ function mailstream_send($a, $message_id, $item, $user) { $mail->IsHTML(true); $mail->CharSet = 'utf-8'; $template = get_markup_template('mail.tpl', 'addon/mailstream/'); - $item['body'] = bbcode($item['body']); + $item['body'] = BBCode::convert($item['body']); $item['url'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $item['id']; $mail->Body = replace_macros($template, [ '$upstream' => L10n::t('Upstream'), diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index 807c05a5..6ea83367 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -8,6 +8,7 @@ require_once 'include/bbcode.php'; +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -31,7 +32,7 @@ function newmemberwidget_network_mod_init ( $a, $b) { $t .= ''.L10n::t('Local Support Forum').'
      '.EOL; $ft = Config::get('newmemberwidget','freetext'); if (!trim($ft)=="") - $t .= '

      '.bbcode(trim($ft)).'

      '; + $t .= '

      '.BBCode::convert(trim($ft)).'

      '; $t .= '
      '; $a->page['aside'] = $t . $a->page['aside']; } diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index e35d7bf1..5ea0db38 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -7,6 +7,8 @@ * Author: Mike Macgirvin (Inital Author of the hubbwall Addon for the Hubzilla Project) * Author: Rabuzarus (Port to Friendica) */ + +use Friendica\Content\Text\BBCode; use Friendica\Core\L10n; use Friendica\Util\Emailer; @@ -49,9 +51,9 @@ function notifyall_post(&$a) { $subject = $_REQUEST['subject']; - $textversion = strip_tags(html_entity_decode(bbcode(stripslashes(str_replace(["\\r", "\\n"],[ "", "\n"], $text))),ENT_QUOTES,'UTF-8')); + $textversion = strip_tags(html_entity_decode(BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "\n"], $text))), ENT_QUOTES, 'UTF-8')); - $htmlversion = bbcode(stripslashes(str_replace(["\\r","\\n"], ["","
      \n"],$text))); + $htmlversion = BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "
      \n"], $text))); // if this is a test, send it only to the admin(s) // admin_email might be a comma separated list, but we need "a@b','c@d','e@f diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 6a7a08cf..129f2738 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -6,6 +6,7 @@ * Author: Michael Vogel */ +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -475,7 +476,7 @@ function pumpio_send(&$a,&$b) { $title = trim($b['title']); - $content = bbcode($b['body'], false, false, 4); + $content = BBCode::convert($b['body'], false, 4); $params = []; diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 2ba26afc..831dd615 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -381,7 +381,7 @@ function tumblr_send(&$a,&$b) { switch ($siteinfo["type"]) { case "photo": $params['type'] = "photo"; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); if (isset($siteinfo["url"])) $params['link'] = $siteinfo["url"]; @@ -392,22 +392,22 @@ function tumblr_send(&$a,&$b) { $params['type'] = "link"; $params['title'] = $title; $params['url'] = $siteinfo["url"]; - $params['description'] = bbcode($body, false, false, 4); + $params['description'] = BBCode::convert($body, false, 4); break; case "audio": $params['type'] = "audio"; $params['external_url'] = $siteinfo["url"]; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); break; case "video": $params['type'] = "video"; $params['embed'] = $siteinfo["url"]; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); break; default: $params['type'] = "text"; $params['title'] = $title; - $params['body'] = bbcode($b['body'], false, false, 4); + $params['body'] = BBCode::convert($b['body'], false, 4); break; } @@ -416,7 +416,7 @@ function tumblr_send(&$a,&$b) { "

      ".$params['caption']."

      "; if (trim($params['caption']) == "") - $params['caption'] = bbcode("[quote]".$siteinfo["description"]."[/quote]", false, false, 4); + $params['caption'] = BBCode::convert("[quote]" . $siteinfo["description"] . "[/quote]", false, 4); $consumer_key = Config::get('tumblr','consumer_key'); $consumer_secret = Config::get('tumblr','consumer_secret'); diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 033d2a64..346f550f 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -25,7 +25,9 @@ * sets the counter back * count only unseen elements which are not type=activity (likes and dislikes not seen as new elements) */ + use Friendica\App; +use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -211,7 +213,7 @@ function windowsphonepush_cron() } else { require_once('include/bbcode.php'); require_once("include/html2plain.php"); - $body = bbcode($body, false, false, 2, true); + $body = BBCode::convert($body, false, 2, true); $body = html2plain($body, 0); $body = ((strlen($body) > 137) ? substr($body, 0, 137) . "..." : $body); } diff --git a/wppost/wppost.php b/wppost/wppost.php index e3127e8e..23f928bc 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -145,7 +145,7 @@ function wppost_settings_post(&$a,&$b) { PConfig::set(local_user(),'wppost','backlink',trim($_POST['wp_backlink'])); PConfig::set(local_user(),'wppost','shortcheck',trim($_POST['wp_shortcheck'])); $wp_backlink_text = notags(trim($_POST['wp_backlink_text'])); - $wp_backlink_text = bbcode($wp_backlink_text, false, false, 8); + $wp_backlink_text = BBCode::convert($wp_backlink_text, false, 8); $wp_backlink_text = html2plain($wp_backlink_text, 0, true); PConfig::set(local_user(),'wppost','wp_backlink_text', $wp_backlink_text); @@ -266,7 +266,7 @@ function wppost_send(&$a,&$b) { // Remove the share element before fetching the first line $title = trim(preg_replace("/\[share.*?\](.*?)\[\/share\]/ism","\n$1\n",$b['body'])); - $title = html2plain(bbcode($title, false, false), 0, true)."\n"; + $title = html2plain(BBCode::convert($title, false), 0, true)."\n"; $pos = strpos($title, "\n"); $trailer = ""; if (($pos == 0) || ($pos > 100)) { @@ -279,7 +279,7 @@ function wppost_send(&$a,&$b) { } $title = '' . (($wptitle) ? $wptitle : L10n::t('Post from Friendica')) . ''; - $post = bbcode($b['body'], false, false, 4); + $post = BBCode::convert($b['body'], false, 4); // If a link goes to youtube then remove the stuff around it. Wordpress detects youtube links and embeds it $post = preg_replace('/(.*?)<\/a>/ism',"\n$1\n",$post); From ab23f858cb1673c3bbb11953cbc7877522c99efe Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 14 Feb 2018 21:46:33 -0500 Subject: [PATCH 073/116] Remove unused $preserve_nl parameter from bb2diaspora() --- diaspora/diaspora.php | 4 ++-- libertree/libertree.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index b486c095..49a9cfc4 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -338,7 +338,7 @@ function diaspora_send(&$a,&$b) { } while ($oldbody != $body); // convert to markdown - $body = bb2diaspora($body, false, true); + $body = bb2diaspora($body); // Adding the title if(strlen($title)) @@ -367,7 +367,7 @@ function diaspora_send(&$a,&$b) { $a->contact = $r[0]["id"]; $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $body]); - + Queue::add($a->contact, NETWORK_DIASPORA2, $s); notice(L10n::t('Diaspora post failed. Queued for retry.').EOL); } diff --git a/libertree/libertree.php b/libertree/libertree.php index b48c9b18..06851238 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -217,7 +217,7 @@ function libertree_send(&$a,&$b) { } while ($oldbody != $body); // convert to markdown - $body = bb2diaspora($body, false, false); + $body = bb2diaspora($body, false); // Adding the title if(strlen($title)) From 16c3c2b93a6dddc7aed148d2df0665b9d7af78ef Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 14 Feb 2018 22:03:54 -0500 Subject: [PATCH 074/116] [ijpost] Remove rogue reference to include/datetime.php --- ijpost/ijpost.php | 1 - 1 file changed, 1 deletion(-) diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 5ccb6761..439018f4 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -180,7 +180,6 @@ function ijpost_send(&$a,&$b) { if($ij_username && $ij_password && $ij_blog) { require_once('include/bbcode.php'); - require_once('include/datetime.php'); $title = $b['title']; $post = BBCode::convert($b['body']); From 88ca2f5a1e83c2cd93c6b08863fdd361a3a9bd69 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 14 Feb 2018 22:04:06 -0500 Subject: [PATCH 075/116] Remove references to include/bbcode.php --- blogger/blogger.php | 2 -- dwpost/dwpost.php | 3 --- ijpost/ijpost.php | 3 --- impressum/impressum.php | 1 - ljpost/ljpost.php | 3 --- mailstream/mailstream.php | 2 +- newmemberwidget/newmemberwidget.php | 2 -- pumpio/pumpio.php | 3 --- statusnet/statusnet.php | 1 - tumblr/tumblr.php | 3 --- windowsphonepush/windowsphonepush.php | 2 +- wppost/wppost.php | 1 - 12 files changed, 2 insertions(+), 24 deletions(-) diff --git a/blogger/blogger.php b/blogger/blogger.php index 76c12bbb..30c450bd 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -183,8 +183,6 @@ function blogger_send(&$a, &$b) $bl_blog = PConfig::get($b['uid'], 'blogger', 'bl_blog'); if ($bl_username && $bl_password && $bl_blog) { - require_once('include/bbcode.php'); - $title = '' . (($b['title']) ? $b['title'] : L10n::t('Post from Friendica')) . ''; $post = $title . BBCode::convert($b['body']); $post = xmlify($post); diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 7e8488c3..a46f55b2 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -179,9 +179,6 @@ function dwpost_send(&$a,&$b) { $dw_blog = 'http://www.dreamwidth.org/interface/xmlrpc'; if($dw_username && $dw_password && $dw_blog) { - - require_once('include/bbcode.php'); - $title = $b['title']; $post = BBCode::convert($b['body']); $post = xmlify($post); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 439018f4..8d529085 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -178,9 +178,6 @@ function ijpost_send(&$a,&$b) { $ij_blog = 'http://www.insanejournal.com/interface/xmlrpc'; if($ij_username && $ij_password && $ij_blog) { - - require_once('include/bbcode.php'); - $title = $b['title']; $post = BBCode::convert($b['body']); $post = xmlify($post); diff --git a/impressum/impressum.php b/impressum/impressum.php index ae6ddf18..50458ee5 100644 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -7,7 +7,6 @@ * License: 3-clause BSD license */ -require_once 'include/bbcode.php'; require_once 'mod/proxy.php'; use Friendica\Content\Text\BBCode; diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 97daf519..ec99f9ba 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -179,9 +179,6 @@ function ljpost_send(&$a,&$b) { $lj_blog = xmlify('http://www.livejournal.com/interface/xmlrpc'); if($lj_username && $lj_password && $lj_blog) { - - require_once('include/bbcode.php'); - $title = xmlify($b['title']); $post = BBCode::convert($b['body']); $post = xmlify($post); diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index acab5914..6c057b21 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -257,7 +257,7 @@ function mailstream_send($a, $message_id, $item, $user) { return; } require_once(dirname(__file__).'/phpmailer/class.phpmailer.php'); - require_once('include/bbcode.php'); + $attachments = []; mailstream_do_images($a, $item, $attachments); $frommail = Config::get('mailstream', 'frommail'); diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index 6ea83367..57b49230 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -6,8 +6,6 @@ * Author: Tobias Diekershoff ***/ -require_once 'include/bbcode.php'; - use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\Config; diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 129f2738..a1ca2ade 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -471,9 +471,6 @@ function pumpio_send(&$a,&$b) { $public = PConfig::get($b['uid'], "pumpio", "public"); if($oauth_token && $oauth_token_secret) { - - require_once('include/bbcode.php'); - $title = trim($b['title']); $content = BBCode::convert($b['body'], false, 4); diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index f1c080f4..c54ff55f 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -544,7 +544,6 @@ function statusnet_post_hook(App $a, &$b) return; } - require_once 'include/bbcode.php'; $dent = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); $max_char = $dent->get_maxlength(); // max. length for a dent diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 831dd615..b2dec5b5 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -342,9 +342,6 @@ function tumblr_send(&$a,&$b) { $tmbl_blog = 'blog/'.$page.'/post'; if($oauth_token && $oauth_token_secret && $tmbl_blog) { - - require_once('include/bbcode.php'); - $tag_arr = []; $tags = ''; $x = preg_match_all('/\#\[(.*?)\](.*?)\[/',$b['tag'],$matches,PREG_SET_ORDER); diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 346f550f..206b0883 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -211,8 +211,8 @@ function windowsphonepush_cron() if (substr($body, 0, 4) == "[url") { $body = "URL/Image ..."; } else { - require_once('include/bbcode.php'); require_once("include/html2plain.php"); + $body = BBCode::convert($body, false, 2, true); $body = html2plain($body, 0); $body = ((strlen($body) > 137) ? substr($body, 0, 137) . "..." : $body); diff --git a/wppost/wppost.php b/wppost/wppost.php index 23f928bc..8d14b170 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -221,7 +221,6 @@ function wppost_send(&$a,&$b) { } if ($wp_username && $wp_password && $wp_blog) { - require_once 'include/bbcode.php'; require_once 'include/html2plain.php'; $wptitle = trim($b['title']); From 9b77bbeafb8df13b363b2dc3e8975006a19761ab Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 18 Feb 2018 10:21:44 +0100 Subject: [PATCH 076/116] EN_GB translation of blockem addon THX Andy H3 --- blockem/lang/en-gb/messages.po | 59 ++++++++++++++++++++++++++++++++++ blockem/lang/en-gb/strings.php | 16 +++++++++ 2 files changed, 75 insertions(+) create mode 100644 blockem/lang/en-gb/messages.po create mode 100644 blockem/lang/en-gb/strings.php diff --git a/blockem/lang/en-gb/messages.po b/blockem/lang/en-gb/messages.po new file mode 100644 index 00000000..b2fb55e8 --- /dev/null +++ b/blockem/lang/en-gb/messages.po @@ -0,0 +1,59 @@ +# ADDON blockem +# Copyright (C) +# This file is distributed under the same license as the Friendica blockem addon package. +# +# +# Translators: +# Andy H3 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-02-17 11:24+0000\n" +"Last-Translator: Andy H3 \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/Friendica/friendica/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: blockem.php:51 blockem.php:55 +msgid "\"Blockem\"" +msgstr "\"Blockem\"" + +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image." + +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "Comma separated profile URLs:" + +#: blockem.php:64 +msgid "Save Settings" +msgstr "Save settings" + +#: blockem.php:77 +msgid "BLOCKEM Settings saved." +msgstr "Blockem settings saved." + +#: blockem.php:140 +#, php-format +msgid "Hidden content by %s - Click to open/close" +msgstr "Hidden content by %s - Show/hide" + +#: blockem.php:193 +msgid "Unblock Author" +msgstr "Unblock author" + +#: blockem.php:195 +msgid "Block Author" +msgstr "Block author" + +#: blockem.php:227 +msgid "blockem settings updated" +msgstr "Blockem settings updated" diff --git a/blockem/lang/en-gb/strings.php b/blockem/lang/en-gb/strings.php new file mode 100644 index 00000000..3ad8da0d --- /dev/null +++ b/blockem/lang/en-gb/strings.php @@ -0,0 +1,16 @@ +strings["\"Blockem\""] = "\"Blockem\""; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Hides user's content by collapsing posts. Also replaces their avatar with generic image."; +$a->strings["Comma separated profile URLS:"] = "Comma separated profile URLs:"; +$a->strings["Save Settings"] = "Save settings"; +$a->strings["BLOCKEM Settings saved."] = "Blockem settings saved."; +$a->strings["Hidden content by %s - Click to open/close"] = "Hidden content by %s - Show/hide"; +$a->strings["Unblock Author"] = "Unblock author"; +$a->strings["Block Author"] = "Block author"; +$a->strings["blockem settings updated"] = "Blockem settings updated"; From 446ab8c6780a19b17d425d371bcb5c3c1970f9cf Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 18 Feb 2018 22:20:38 +0000 Subject: [PATCH 077/116] Issue issue-1312: Reworked "public server" addon --- public_server/public_server.php | 196 +++++++++++++++----------------- 1 file changed, 90 insertions(+), 106 deletions(-) diff --git a/public_server/public_server.php b/public_server/public_server.php index a5c4cec7..a86dd82a 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -9,53 +9,46 @@ use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; -use Friendica\Model\User; use Friendica\Util\DateTimeFormat; function public_server_install() { - Addon::registerHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::registerHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); Addon::registerHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::registerHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } - function public_server_uninstall() { - Addon::unregisterHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::unregisterHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); Addon::unregisterHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::unregisterHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } -function public_server_register_account($a,$b) { - +function public_server_register_account($a, $b) { $uid = $b; - $days = Config::get('public_server','expiredays'); - $days_posts = Config::get('public_server','expireposts'); - if(! $days) + $days = Config::get('public_server', 'expiredays'); + $days_posts = Config::get('public_server', 'expireposts'); + if (!$days) { return; + } - $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d", - dbesc(DateTimeFormat::utc('now +' . $days . ' days')), - intval($days_posts), - intval($uid) - ); + $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days'), 'expire' => $days_posts]; + dba::update('user', $fields, ['uid' => $uid]); +} -}; - - -function public_server_cron($a,$b) { +function public_server_cron($a, $b) { logger("public_server: cron start"); require_once('include/enotify.php'); - $r = q("select * from user where account_expires_on < UTC_TIMESTAMP() + INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00' and - expire_notification_sent = '0000-00-00 00:00:00' "); + $r = q("select * FROM `user` WHERE `account_expires_on` < UTC_TIMESTAMP() + INTERVAL 5 DAY AND + `account_expires_on` > '%s' AND + expire_notification_sent <= '%s'", + dbesc(NULL_DATE), dbesc(NULL_DATE)); - if(count($r)) { - foreach($r as $rr) { + if (DBM::is_result($r)) { + foreach ($r as $rr) { notification([ 'uid' => $rr['uid'], 'type' => NOTIFY_SYSTEM, @@ -68,109 +61,100 @@ function public_server_cron($a,$b) { 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', ]); - q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(DateTimeFormat::utcNow()), - intval($rr['uid']) - ); + $fields = ['expire_notification_sent' => DateTimeFormat::utcNow()]; + dba::update('user', $fields, ['uid' => $rr['uid']]); } } - $r = q("select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00'"); - if(count($r)) { - foreach($r as $rr) { - User::remove($rr['uid']); + $nologin = Config::get('public_server', 'nologin', false); + if ($nologin) { + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND login_date <= '%s' AND `register_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s'", + dbesc(NULL_DATE), intval($nologin), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + $fields = ['account_expires_on' => DateTimeFormat::utc('now +6 days')]; + dba::update('user', $fields, ['uid' => $rr['uid']]); + } } } - $nologin = Config::get('public_server','nologin'); - if($nologin) { - $r = q("select uid from user where account_expired = 0 and login_date = '0000-00-00 00:00:00' and register_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00'",intval($nologin)); - if(count($r)) { - foreach($r as $rr) - q("update user set account_expires_on = '%s' where uid = %d", - dbesc(DateTimeFormat::utc('now +' . '6 days')), - intval($rr['uid']) - ); + + $flagusers = Config::get('public_server', 'flagusers', false); + if ($flagusers) { + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s' AND `page-flags` = 0", + intval($flagusers), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + $fields = ['account_expires_on' => DateTimeFormat::utc('now +6 days')]; + dba::update('user', $fields, ['uid' => $rr['uid']]); + } } - } + } - - $flagusers = Config::get('public_server','flagusers'); - if($flagusers) { - $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and `page-flags` = 0",intval($flagusers)); - if(count($r)) { - foreach($r as $rr) - q("update user set account_expires_on = '%s' where uid = %d", - dbesc(DateTimeFormat::utc('now +' . '6 days')), - intval($rr['uid']) - ); - } - } - - $flagposts = Config::get('public_server','flagposts'); - $flagpostsexpire = Config::get('public_server','flagpostsexpire'); + $flagposts = Config::get('public_server', 'flagposts'); + $flagpostsexpire = Config::get('public_server', 'flagpostsexpire'); if ($flagposts && $flagpostsexpire) { - $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and expire = 0 and `page-flags` = 0",intval($flagposts)); - if(count($r)) { - foreach($r as $rr) - q("update user set expire = %d where uid = %d", - intval($flagpostsexpire), - intval($rr['uid']) - ); + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s' and `expire` = 0 AND `page-flags` = 0", + intval($flagposts), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + dba::update('user', ['expire' => $flagpostsexpire], ['uid' => $rr['uid']]); + } } - } + } logger("public_server: cron end"); - } function public_server_enotify(&$a, &$b) { - if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM + if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { - $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename')); - $b['subject'] = L10n::t('Your Friendica account is about to expire.'); - $b['body'] = L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); - } + $b['itemlink'] = $a->get_baseurl(); + $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename')); + $b['subject'] = L10n::t('Your Friendica account is about to expire.'); + $b['body'] = L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + } } -function public_server_login($a,$b) { - $days = Config::get('public_server','expiredays'); - if(! $days) +function public_server_login($a, $b) { + $days = Config::get('public_server', 'expiredays'); + if (!$days) { return; - $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00'", - dbesc(DateTimeFormat::utc('now +' . $days . ' days')), - local_user() - ); + } + + $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days')]; + $condition = ["`uid` = ? AND `account_expires_on` > ?", local_user(), NULL_DATE]; + dba::update('user', $fields, $condition); } -function public_server_addon_admin_post ( &$a ) { - check_form_security_token_redirectOnErr('/admin/addons/publicserver', 'publicserver'); - $expiredays = (( x($_POST, 'expiredays') ) ? notags(trim($_POST['expiredays'] )) : ''); - $expireposts = (( x($_POST, 'expireposts') ) ? notags(trim($_POST['expireposts'] )) : ''); - $nologin = (( x($_POST, 'nologin') ) ? notags(trim($_POST['nologin'] )) : ''); - $flagusers = (( x($_POST, 'flagusers') ) ? notags(trim($_POST['flagusers'] )) : ''); - $flagposts = (( x($_POST, 'flagposts') ) ? notags(trim($_POST['flagposts'] )) : ''); - $flagpostsexpire = (( x($_POST, 'flagpostsexpire') ) ? notags(trim($_POST['flagpostsexpire'] )) : ''); - Config::set( 'public_server','expiredays',$expiredays ); - Config::set( 'public_server','expireposts',$expireposts ); - Config::set( 'public_server','nologin',$nologin ); - Config::set( 'public_server','flagusers',$flagusers); - Config::set( 'public_server','flagposts',$flagposts ); - Config::set( 'public_server','flagpostsexpire',$flagpostsexpire ); - info(L10n::t('Settings saved').EOL ); +function public_server_addon_admin_post (&$a) { + check_form_security_token_redirectOnErr('/admin/addons/publicserver', 'publicserver'); + $expiredays = (x($_POST, 'expiredays') ? notags(trim($_POST['expiredays'])) : ''); + $expireposts = (x($_POST, 'expireposts') ? notags(trim($_POST['expireposts'])) : ''); + $nologin = (x($_POST, 'nologin') ? notags(trim($_POST['nologin'])) : ''); + $flagusers = (x($_POST, 'flagusers') ? notags(trim($_POST['flagusers'])) : ''); + $flagposts = (x($_POST, 'flagposts') ? notags(trim($_POST['flagposts'])) : ''); + $flagpostsexpire = (x($_POST, 'flagpostsexpire') ? notags(trim($_POST['flagpostsexpire'])) : ''); + Config::set('public_server', 'expiredays', $expiredays); + Config::set('public_server', 'expireposts', $expireposts); + Config::set('public_server', 'nologin', $nologin); + Config::set('public_server', 'flagusers', $flagusers); + Config::set('public_server', 'flagposts', $flagposts); + Config::set('public_server', 'flagpostsexpire', $flagpostsexpire); + info(L10n::t('Settings saved').EOL); } -function public_server_addon_admin ( &$a, &$o) { - $token = get_form_security_token("publicserver"); - $t = get_markup_template( "admin.tpl", "addon/public_server"); - $o = replace_macros($t, [ - '$submit' => L10n::t('Save Settings'), - '$form_security_token' => $token, - '$infotext' => L10n::t('Set any of these options to 0 to deactivate it.'), - '$expiredays' => [ "expiredays","Expire Days", intval(Config::get('public_server', 'expiredays')), "When an account is created on the site, it is given a hard "], - '$expireposts' => [ "expireposts", "Expire Posts", intval(Config::get('public_server','expireposts')), "Set the default days for posts to expire here"], - '$nologin' => [ "nologin", "No Login", intval(Config::get('public_server','nologin')), "Remove users who have never logged in after nologin days "], - '$flagusers' => [ "flagusers", "Flag users", intval(Config::get('public_server','flagusers')), "Remove users who last logged in over flagusers days ago"], - '$flagposts' => [ "flagposts", "Flag posts", intval(Config::get('public_server','flagposts')), "For users who last logged in over flagposts days ago set post expiry days to flagpostsexpire "], - '$flagpostsexpire' => [ "flagpostsexpire", "Flag posts expire", intval(Config::get('public_server','flagpostsexpire'))], - ]); + +function public_server_addon_admin (&$a, &$o) { + $token = get_form_security_token("publicserver"); + $t = get_markup_template("admin.tpl", "addon/public_server"); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$form_security_token' => $token, + '$infotext' => L10n::t('Set any of these options to 0 to deactivate it.'), + '$expiredays' => ["expiredays","Expire Days", intval(Config::get('public_server', 'expiredays')), "When an account is created on the site, it is given a hard "], + '$expireposts' => ["expireposts", "Expire Posts", intval(Config::get('public_server', 'expireposts')), "Set the default days for posts to expire here"], + '$nologin' => ["nologin", "No Login", intval(Config::get('public_server', 'nologin')), "Remove users who have never logged in after nologin days "], + '$flagusers' => ["flagusers", "Flag users", intval(Config::get('public_server', 'flagusers')), "Remove users who last logged in over flagusers days ago"], + '$flagposts' => ["flagposts", "Flag posts", intval(Config::get('public_server', 'flagposts')), "For users who last logged in over flagposts days ago set post expiry days to flagpostsexpire "], + '$flagpostsexpire' => ["flagpostsexpire", "Flag posts expire", intval(Config::get('public_server', 'flagpostsexpire'))], + ]); } From f37adf4342428c236f9df2e4dd2e6ab43a870f79 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 19 Feb 2018 05:19:02 +0000 Subject: [PATCH 078/116] standards --- public_server/public_server.php | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/public_server/public_server.php b/public_server/public_server.php index a86dd82a..1df37c66 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -11,21 +11,24 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Util\DateTimeFormat; -function public_server_install() { +function public_server_install() +{ Addon::registerHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::registerHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); Addon::registerHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::registerHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } -function public_server_uninstall() { +function public_server_uninstall() +{ Addon::unregisterHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); Addon::unregisterHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); Addon::unregisterHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); Addon::unregisterHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } -function public_server_register_account($a, $b) { +function public_server_register_account($a, $b) +{ $uid = $b; $days = Config::get('public_server', 'expiredays'); @@ -38,13 +41,14 @@ function public_server_register_account($a, $b) { dba::update('user', $fields, ['uid' => $uid]); } -function public_server_cron($a, $b) { +function public_server_cron($a, $b) +{ logger("public_server: cron start"); require_once('include/enotify.php'); - $r = q("select * FROM `user` WHERE `account_expires_on` < UTC_TIMESTAMP() + INTERVAL 5 DAY AND + $r = q("SELECT * FROM `user` WHERE `account_expires_on` < UTC_TIMESTAMP() + INTERVAL 5 DAY AND `account_expires_on` > '%s' AND - expire_notification_sent <= '%s'", + `expire_notification_sent` <= '%s'", dbesc(NULL_DATE), dbesc(NULL_DATE)); if (DBM::is_result($r)) { @@ -68,7 +72,7 @@ function public_server_cron($a, $b) { $nologin = Config::get('public_server', 'nologin', false); if ($nologin) { - $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND login_date <= '%s' AND `register_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s'", + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` <= '%s' AND `register_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s'", dbesc(NULL_DATE), intval($nologin), dbesc(NULL_DATE)); if (DBM::is_result($r)) { foreach ($r as $rr) { @@ -105,7 +109,8 @@ function public_server_cron($a, $b) { logger("public_server: cron end"); } -function public_server_enotify(&$a, &$b) { +function public_server_enotify(&$a, &$b) +{ if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { $b['itemlink'] = $a->get_baseurl(); @@ -115,7 +120,8 @@ function public_server_enotify(&$a, &$b) { } } -function public_server_login($a, $b) { +function public_server_login($a, $b) +{ $days = Config::get('public_server', 'expiredays'); if (!$days) { return; @@ -126,7 +132,8 @@ function public_server_login($a, $b) { dba::update('user', $fields, $condition); } -function public_server_addon_admin_post (&$a) { +function public_server_addon_admin_post(&$a) +{ check_form_security_token_redirectOnErr('/admin/addons/publicserver', 'publicserver'); $expiredays = (x($_POST, 'expiredays') ? notags(trim($_POST['expiredays'])) : ''); $expireposts = (x($_POST, 'expireposts') ? notags(trim($_POST['expireposts'])) : ''); @@ -143,7 +150,8 @@ function public_server_addon_admin_post (&$a) { info(L10n::t('Settings saved').EOL); } -function public_server_addon_admin (&$a, &$o) { +function public_server_addon_admin(&$a, &$o) +{ $token = get_form_security_token("publicserver"); $t = get_markup_template("admin.tpl", "addon/public_server"); $o = replace_macros($t, [ From bd6ec212c19ea9f5fc34e20e6992bea7249b9836 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 19 Feb 2018 13:56:47 +0000 Subject: [PATCH 079/116] Missed "use" --- public_server/public_server.php | 1 + 1 file changed, 1 insertion(+) diff --git a/public_server/public_server.php b/public_server/public_server.php index 1df37c66..cfcb8fd7 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -9,6 +9,7 @@ use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; +use Friendica\Database\DBM; use Friendica\Util\DateTimeFormat; function public_server_install() From c67b26ed73bb27c35606f773bfa062713aca72a4 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 2 Mar 2018 11:33:41 +0100 Subject: [PATCH 080/116] =?UTF-8?q?ZH=20CN=20translation=20of=20the=20piwi?= =?UTF-8?q?k=20addon=20THX=20=E6=9C=B1=E9=99=88=E9=94=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- piwik/lang/zh-cn/messages.po | 64 ++++++++++++++++++++++++++++++++++++ piwik/lang/zh-cn/strings.php | 27 ++++++++------- 2 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 piwik/lang/zh-cn/messages.po diff --git a/piwik/lang/zh-cn/messages.po b/piwik/lang/zh-cn/messages.po new file mode 100644 index 00000000..6db5342a --- /dev/null +++ b/piwik/lang/zh-cn/messages.po @@ -0,0 +1,64 @@ +# ADDON piwik +# Copyright (C) +# This file is distributed under the same license as the Friendica piwik addon package. +# +# +# Translators: +# 朱陈锬 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-26 12:49+0200\n" +"PO-Revision-Date: 2018-03-01 09:57+0000\n" +"Last-Translator: 朱陈锬 \n" +"Language-Team: Chinese (China) (http://www.transifex.com/Friendica/friendica/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: piwik.php:79 +msgid "" +"This website is tracked using the Piwik " +"analytics tool." +msgstr "此网站用 Piwik 追踪分析工具。" + +#: piwik.php:82 +#, php-format +msgid "" +"If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of " +"the site (opt-out)." +msgstr "" + +#: piwik.php:89 +msgid "Save Settings" +msgstr "保存设置" + +#: piwik.php:90 +msgid "Piwik Base URL" +msgstr "" + +#: piwik.php:90 +msgid "" +"Absolute path to your Piwik installation. (without protocol (http/s), with " +"trailing slash)" +msgstr "" + +#: piwik.php:91 +msgid "Site ID" +msgstr "" + +#: piwik.php:92 +msgid "Show opt-out cookie link?" +msgstr "" + +#: piwik.php:93 +msgid "Asynchronous tracking" +msgstr "异步追踪" + +#: piwik.php:105 +msgid "Settings updated." +msgstr "设置已更新。" diff --git a/piwik/lang/zh-cn/strings.php b/piwik/lang/zh-cn/strings.php index 21ce8b6f..ad99b364 100644 --- a/piwik/lang/zh-cn/strings.php +++ b/piwik/lang/zh-cn/strings.php @@ -1,11 +1,16 @@ -strings["This website is tracked using the Piwik analytics tool."] = "这个网站用Piwik分析工具追踪 。"; -$a->strings["If you do not want that your visits are logged this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."] = "如果您不想您访问这样记录您可以用一个cookie防Piwik追踪未来的访问(选择性退出)。"; -$a->strings["Submit"] = "提交"; -$a->strings["Piwik Base URL"] = "Piwik基础URL"; -$a->strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "绝对道路到Piwik安装。(没有协议(http/s)跟斜线后缀)"; -$a->strings["Site ID"] = "网站ID"; -$a->strings["Show opt-out cookie link?"] = " 显示选择性退出cookie按钮?"; -$a->strings["Asynchronous tracking"] = "异步追踪"; -$a->strings["Settings updated."] = "设置跟新了"; +strings["This website is tracked using the Piwik analytics tool."] = "此网站用 Piwik 追踪分析工具。"; +$a->strings["If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."] = ""; +$a->strings["Save Settings"] = "保存设置"; +$a->strings["Piwik Base URL"] = ""; +$a->strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = ""; +$a->strings["Site ID"] = ""; +$a->strings["Show opt-out cookie link?"] = ""; +$a->strings["Asynchronous tracking"] = "异步追踪"; +$a->strings["Settings updated."] = "设置已更新。"; From 32315922c4f23320d64daa88b4207b080b87e3f5 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 2 Mar 2018 11:35:45 +0100 Subject: [PATCH 081/116] =?UTF-8?q?ZH=20CN=20translation=20of=20mathjax=20?= =?UTF-8?q?addon=20THX=20=E6=9C=B1=E9=99=88=E9=94=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mathjax/lang/zh-cn/messages.po | 53 ++++++++++++++++++++++++++++++++++ mathjax/lang/zh-cn/strings.php | 23 +++++++++------ 2 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 mathjax/lang/zh-cn/messages.po diff --git a/mathjax/lang/zh-cn/messages.po b/mathjax/lang/zh-cn/messages.po new file mode 100644 index 00000000..4e464fbb --- /dev/null +++ b/mathjax/lang/zh-cn/messages.po @@ -0,0 +1,53 @@ +# ADDON mathjax +# Copyright (C) +# This file is distributed under the same license as the Friendica mathjax addon package. +# +# +# Translators: +# 朱陈锬 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2018-03-01 09:50+0000\n" +"Last-Translator: 朱陈锬 \n" +"Language-Team: Chinese (China) (http://www.transifex.com/Friendica/friendica/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: mathjax.php:36 +msgid "Settings" +msgstr "设置" + +#: mathjax.php:37 +msgid "" +"The MathJax addon renders mathematical formulae written using the LaTeX " +"syntax surrounded by the usual $$ or an eqnarray block in the postings of " +"your wall,network tab and private mail." +msgstr "" + +#: mathjax.php:38 +msgid "Use the MathJax renderer" +msgstr "使用 MathJax 渲染" + +#: mathjax.php:42 +msgid "Submit" +msgstr "提交" + +#: mathjax.php:66 +msgid "Settings updated." +msgstr "设置已更新" + +#: mathjax.php:75 +msgid "MathJax Base URL" +msgstr "" + +#: mathjax.php:75 +msgid "" +"The URL for the javascript file that should be included to use MathJax. Can " +"be either the MathJax CDN or another installation of MathJax." +msgstr "" diff --git a/mathjax/lang/zh-cn/strings.php b/mathjax/lang/zh-cn/strings.php index 24ac6e99..05103a5d 100644 --- a/mathjax/lang/zh-cn/strings.php +++ b/mathjax/lang/zh-cn/strings.php @@ -1,9 +1,14 @@ -strings["Settings"] = "配置"; -$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "MathJax插件表示用LaTeX句法的数学公式,围绕$"; -$a->strings["Use the MathJax renderer"] = "用MathJax表示器"; -$a->strings["Submit"] = "提交"; -$a->strings["Settings updated."] = "设置跟新了"; -$a->strings["MathJax Base URL"] = "MathJax基础URL"; -$a->strings["The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax."] = "URL JavaScript文件应该包括为用MathJax。可以MathJax CDN或者别的MathJax安装。"; +strings["Settings"] = "设置"; +$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = ""; +$a->strings["Use the MathJax renderer"] = "使用 MathJax 渲染"; +$a->strings["Submit"] = "提交"; +$a->strings["Settings updated."] = "设置已更新"; +$a->strings["MathJax Base URL"] = ""; +$a->strings["The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax."] = ""; From 7bd10aedcc919e1d77d801b7b9ce341e52c653f5 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 2 Mar 2018 11:38:46 +0100 Subject: [PATCH 082/116] added ZH CN translation for langfilter addon THX ZhuChentan --- langfilter/lang/zh-cn/messages.po | 69 +++++++++++++++++++++++++++++++ langfilter/lang/zh-cn/strings.php | 17 ++++++++ 2 files changed, 86 insertions(+) create mode 100644 langfilter/lang/zh-cn/messages.po create mode 100644 langfilter/lang/zh-cn/strings.php diff --git a/langfilter/lang/zh-cn/messages.po b/langfilter/lang/zh-cn/messages.po new file mode 100644 index 00000000..6c991ef8 --- /dev/null +++ b/langfilter/lang/zh-cn/messages.po @@ -0,0 +1,69 @@ +# ADDON langfilter +# Copyright (C) +# This file is distributed under the same license as the Friendica langfilter addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-22 15:18+0200\n" +"PO-Revision-Date: 2017-08-03 17:29+0000\n" +"Last-Translator: fabrixxm \n" +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/Friendica/friendica/language/cs_CZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs_CZ\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: langfilter.php:44 +msgid "Language Filter" +msgstr "" + +#: langfilter.php:45 +msgid "" +"This addon tries to identify the language of a postings. If it does not " +"match any language spoken by you (see below) the posting will be collapsed. " +"Remember detecting the language is not perfect, especially with short " +"postings." +msgstr "" + +#: langfilter.php:46 +msgid "Use the language filter" +msgstr "" + +#: langfilter.php:47 +msgid "I speak" +msgstr "" + +#: langfilter.php:47 +msgid "" +"List of abbreviations (iso2 codes) for languages you speak, comma separated." +" For example \"de,it\"." +msgstr "" + +#: langfilter.php:48 +msgid "Minimum confidence in language detection" +msgstr "" + +#: langfilter.php:48 +msgid "" +"Minimum confidence in language detection being correct, from 0 to 100. Posts" +" will not be filtered when the confidence of language detection is below " +"this percent value." +msgstr "" + +#: langfilter.php:49 +msgid "Save Settings" +msgstr "" + +#: langfilter.php:73 +msgid "Language Filter Settings saved." +msgstr "" + +#: langfilter.php:123 +#, php-format +msgid "unspoken language %s - Click to open/close" +msgstr "" diff --git a/langfilter/lang/zh-cn/strings.php b/langfilter/lang/zh-cn/strings.php new file mode 100644 index 00000000..2de17b0a --- /dev/null +++ b/langfilter/lang/zh-cn/strings.php @@ -0,0 +1,17 @@ +=2 && $n<=4) ? 1 : 2;; +}} +; +$a->strings["Language Filter"] = ""; +$a->strings["This addon tries to identify the language of a postings. If it does not match any language spoken by you (see below) the posting will be collapsed. Remember detecting the language is not perfect, especially with short postings."] = ""; +$a->strings["Use the language filter"] = ""; +$a->strings["I speak"] = ""; +$a->strings["List of abbreviations (iso2 codes) for languages you speak, comma separated. For example \"de,it\"."] = ""; +$a->strings["Minimum confidence in language detection"] = ""; +$a->strings["Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value."] = ""; +$a->strings["Save Settings"] = ""; +$a->strings["Language Filter Settings saved."] = ""; +$a->strings["unspoken language %s - Click to open/close"] = ""; From 80faa02a58ff80ba3dec073649f61491dea176b3 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 2 Mar 2018 11:57:35 +0100 Subject: [PATCH 083/116] args, wrong file --- langfilter/lang/zh-cn/messages.po | 13 +++++++------ langfilter/lang/zh-cn/strings.php | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/langfilter/lang/zh-cn/messages.po b/langfilter/lang/zh-cn/messages.po index 6c991ef8..ce18b535 100644 --- a/langfilter/lang/zh-cn/messages.po +++ b/langfilter/lang/zh-cn/messages.po @@ -4,19 +4,20 @@ # # # Translators: +# 朱陈锬 , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-22 15:18+0200\n" -"PO-Revision-Date: 2017-08-03 17:29+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Czech (Czech Republic) (http://www.transifex.com/Friendica/friendica/language/cs_CZ/)\n" +"PO-Revision-Date: 2018-02-28 11:28+0000\n" +"Last-Translator: 朱陈锬 \n" +"Language-Team: Chinese (China) (http://www.transifex.com/Friendica/friendica/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs_CZ\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: langfilter.php:44 msgid "Language Filter" @@ -57,7 +58,7 @@ msgstr "" #: langfilter.php:49 msgid "Save Settings" -msgstr "" +msgstr "保存设置" #: langfilter.php:73 msgid "Language Filter Settings saved." diff --git a/langfilter/lang/zh-cn/strings.php b/langfilter/lang/zh-cn/strings.php index 2de17b0a..75f6b6b4 100644 --- a/langfilter/lang/zh-cn/strings.php +++ b/langfilter/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ if(! function_exists("string_plural_select_zh_cn")) { function string_plural_select_zh_cn($n){ - return ($n==1) ? 0 : ($n>=2 && $n<=4) ? 1 : 2;; + return 0;; }} ; $a->strings["Language Filter"] = ""; @@ -12,6 +12,6 @@ $a->strings["I speak"] = ""; $a->strings["List of abbreviations (iso2 codes) for languages you speak, comma separated. For example \"de,it\"."] = ""; $a->strings["Minimum confidence in language detection"] = ""; $a->strings["Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value."] = ""; -$a->strings["Save Settings"] = ""; +$a->strings["Save Settings"] = "保存设置"; $a->strings["Language Filter Settings saved."] = ""; $a->strings["unspoken language %s - Click to open/close"] = ""; From cc6108d9caa35384e16a050012cd7def687c2262 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Mar 2018 13:59:02 -0500 Subject: [PATCH 084/116] [communityhome] Fix formatting --- communityhome/communityhome.php | 132 ++++++++++++++++---------------- 1 file changed, 67 insertions(+), 65 deletions(-) diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 78d9fe8a..11309635 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -1,4 +1,5 @@ L10n::t('Hide login form'), - 'showlastusers'=>L10n::t('Show last new users'), - 'showactiveusers'=>L10n::t('Show last active users'), - 'showlastphotos'=>L10n::t('Show last photos'), - 'showlastlike'=>L10n::t('Show last liked items'), - 'showcommunitystream'=>L10n::t('Show community stream') + 'hidelogin' => L10n::t('Hide login form'), + 'showlastusers' => L10n::t('Show last new users'), + 'showactiveusers' => L10n::t('Show last active users'), + 'showlastphotos' => L10n::t('Show last photos'), + 'showlastlike' => L10n::t('Show last liked items'), + 'showcommunitystream' => L10n::t('Show community stream') ]; } @@ -45,7 +48,7 @@ function communityhome_addon_admin(&$a, &$o) ]; foreach ($opts as $k => $v) { - $ctx['fields'][] = ['communityhome_'.$k, $v, Config::get('communityhome', $k)]; + $ctx['fields'][] = ['communityhome_' . $k, $v, Config::get('communityhome', $k)]; } $o = replace_macros($tpl, $ctx); } @@ -55,27 +58,27 @@ function communityhome_addon_admin_post(&$a, &$b) if (x($_POST, 'communityhome-submit')) { $opts = communityhome_getopts(); foreach ($opts as $k => $v) { - Config::set('communityhome', $k, x($_POST, 'communityhome_'.$k)); + Config::set('communityhome', $k, x($_POST, 'communityhome_' . $k)); } } } - -function communityhome_home(&$a, &$o){ +function communityhome_home(&$a, &$o) +{ // custom css - $a->page['htmlhead'] .= ''; + $a->page['htmlhead'] .= ''; - if (!Config::get('communityhome','hidelogin')){ + if (!Config::get('communityhome', 'hidelogin')) { $aside = [ '$tab_1' => L10n::t('Login'), '$tab_2' => L10n::t('OpenID'), - '$noOid' => Config::get('system','no_openid'), + '$noOid' => Config::get('system', 'no_openid'), ]; // login form - $aside['$login_title'] = L10n::t('Login'); + $aside['$login_title'] = L10n::t('Login'); $aside['$login_form'] = Login::form($a->query_string, $a->config['register_policy'] == REGISTER_CLOSED ? false : true); - } else { + } else { $aside = [ //'$tab_1' => L10n::t('Login'), //'$tab_2' => L10n::t('OpenID'), @@ -84,26 +87,26 @@ function communityhome_home(&$a, &$o){ } // last 12 users - if (Config::get('communityhome','showlastusers')){ + if (Config::get('communityhome', 'showlastusers')) { $aside['$lastusers_title'] = L10n::t('Latest users'); $aside['$lastusers_items'] = []; $sql_extra = ""; - $publish = (Config::get('system','publish_all') ? '' : " AND `publish` = 1 " ); + $publish = (Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 " ); $order = " ORDER BY `register_date` DESC "; $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` - WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ", + WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d, %d ", 0, 12 ); - # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); - $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); - if(count($r)) { + # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + $tpl = get_markup_template('directory_item.tpl', 'addon/communityhome/'); + if (count($r)) { $photo = 'thumb'; - foreach($r as $rr) { + foreach ($r as $rr) { $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); - $entry = replace_macros($tpl,[ + $entry = replace_macros($tpl, [ '$id' => $rr['id'], '$profile_link' => $profile_link, '$photo' => $rr[$photo], @@ -115,7 +118,7 @@ function communityhome_home(&$a, &$o){ } // 12 most active users (by posts and contacts) // this query don't work on some mysql versions - if (Config::get('communityhome','showactiveusers')){ + if (Config::get('communityhome', 'showactiveusers')) { $r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM (SELECT COUNT(*) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`, (SELECT COUNT(*) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`, @@ -129,25 +132,26 @@ function communityhome_home(&$a, &$o){ GROUP BY `uid` ORDER BY `items` DESC,`contacts` DESC LIMIT 0,10"); - if($r && count($r)) { - $aside['$activeusers_title'] = L10n::t('Most active users'); - $aside['$activeusers_items'] = []; + if ($r && count($r)) { + $aside['$activeusers_title'] = L10n::t('Most active users'); + $aside['$activeusers_items'] = []; $photo = 'thumb'; - foreach($r as $rr) { + foreach ($r as $rr) { $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); - $entry = replace_macros($tpl,[ + $entry = replace_macros($tpl, [ '$id' => $rr['id'], '$profile_link' => $profile_link, '$photo' => $rr[$photo], - '$photo_user' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0')) + '$photo_user' => sprintf("%s (%s posts, %s contacts)", $rr['name'], ($rr['items'] ? $rr['items'] : '0'), + ($rr['contacts'] ? $rr['contacts'] : '0')) ]); $aside['$activeusers_items'][] = $entry; } } } // last 12 photos - if (Config::get('communityhome','showlastphotos')){ + if (Config::get('communityhome', 'showlastphotos')) { $aside['$photos_title'] = L10n::t('Latest photos'); $aside['$photos_items'] = []; $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM @@ -161,19 +165,19 @@ function communityhome_home(&$a, &$o){ AND `user`.`hidewall` = 0 ORDER BY `photo`.`edited` DESC LIMIT 0, 12", - dbesc(L10n::t('Contact Photos')), - dbesc(L10n::t('Profile Photos')) - ); + dbesc(L10n::t('Contact Photos')), + dbesc(L10n::t('Profile Photos')) + ); - if(count($r)) { - # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); - $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); - foreach($r as $rr) { + if (count($r)) { + # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + $tpl = get_markup_template('directory_item.tpl', 'addon/communityhome/'); + foreach ($r as $rr) { $photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id']; - $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg'; + $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg'; - $entry = replace_macros($tpl,[ + $entry = replace_macros($tpl, [ '$id' => $rr['id'], '$profile_link' => $photo_page, '$photo' => $photo_url, @@ -187,7 +191,7 @@ function communityhome_home(&$a, &$o){ } // last 10 liked items - if (Config::get('communityhome','showlastlike')){ + if (Config::get('communityhome', 'showlastlike')) { $aside['$like_title'] = L10n::t('Latest likes'); $aside['$like_items'] = []; $r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM @@ -198,17 +202,18 @@ function communityhome_home(&$a, &$o){ GROUP BY `uri` ORDER BY `T1`.`created` DESC LIMIT 0,10", - $a->get_baseurl(),$a->get_baseurl() - ); + $a->get_baseurl(), + $a->get_baseurl() + ); foreach ($r as $rr) { - $author = '' . $rr['liker'] . ''; - $objauthor = '' . $rr['author-name'] . ''; + $author = '' . $rr['liker'] . ''; + $objauthor = '' . $rr['author-name'] . ''; //var_dump($rr['verb'],$rr['object-type']); killme(); - switch($rr['verb']){ + switch ($rr['verb']) { case 'http://activitystrea.ms/schema/1.0/post': - switch ($rr['object-type']){ + switch ($rr['object-type']) { case 'http://activitystrea.ms/schema/1.0/event': $post_type = L10n::t('event'); break; @@ -217,9 +222,10 @@ function communityhome_home(&$a, &$o){ } break; default: - if ($rr['resource-id']){ + if ($rr['resource-id']) { $post_type = L10n::t('photo'); - $m=[]; preg_match("/\[url=([^]]*)\]/", $rr['body'], $m); + $m = []; + preg_match("/\[url=([^]]*)\]/", $rr['body'], $m); $rr['plink'] = $m[1]; } else { $post_type = L10n::t('status'); @@ -228,7 +234,6 @@ function communityhome_home(&$a, &$o){ $plink = '' . $post_type . ''; $aside['$like_items'][] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink); - } } @@ -236,19 +241,16 @@ function communityhome_home(&$a, &$o){ $tpl = get_markup_template('communityhome.tpl', 'addon/communityhome/'); $a->page['aside'] = replace_macros($tpl, $aside); - $o = '

      ' . ((x($a->config,'sitename')) ? L10n::t("Welcome to %s", $a->config['sitename']) : "" ) . '

      '; + $o = '

      ' . ((x($a->config, 'sitename')) ? L10n::t("Welcome to %s", $a->config['sitename']) : "" ) . '

      '; - if(file_exists('home.html')) - $o = file_get_contents('home.html'); + if (file_exists('home.html')) $o = file_get_contents('home.html'); - if (Config::get('communityhome','showcommunitystream')){ - $oldset = Config::get('system','community_page_style'); - if ($oldset == CP_NO_COMMUNITY_PAGE) - Config::set('system','community_page_style', CP_USERS_ON_SERVER); + if (Config::get('communityhome', 'showcommunitystream')) { + $oldset = Config::get('system', 'community_page_style'); + if ($oldset == CP_NO_COMMUNITY_PAGE) Config::set('system', 'community_page_style', CP_USERS_ON_SERVER); - $o .= community_content($a,1); + $o .= community_content($a, 1); - if ($oldset == CP_NO_COMMUNITY_PAGE) - Config::set('system','community_page_style', $oldset); + if ($oldset == CP_NO_COMMUNITY_PAGE) Config::set('system', 'community_page_style', $oldset); } } From 9a30d2663dc693de1dd66fcbbb051f2611b7f159 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Mar 2018 14:00:48 -0500 Subject: [PATCH 085/116] [communityhome] Remove extra parameter in communityhome_addon_admin_post() - Add type hint for Friendica\App object --- communityhome/communityhome.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 11309635..a4c956c2 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -6,6 +6,8 @@ * Version: 2.0 * Author: Fabio Comuni */ + +use Friendica\App; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -37,7 +39,7 @@ function communityhome_getopts() ]; } -function communityhome_addon_admin(&$a, &$o) +function communityhome_addon_admin(App $a, &$o) { $tpl = get_markup_template('settings.tpl', 'addon/communityhome/'); @@ -53,7 +55,7 @@ function communityhome_addon_admin(&$a, &$o) $o = replace_macros($tpl, $ctx); } -function communityhome_addon_admin_post(&$a, &$b) +function communityhome_addon_admin_post(App $a) { if (x($_POST, 'communityhome-submit')) { $opts = communityhome_getopts(); @@ -63,7 +65,7 @@ function communityhome_addon_admin_post(&$a, &$b) } } -function communityhome_home(&$a, &$o) +function communityhome_home(App $a, &$o) { // custom css $a->page['htmlhead'] .= ''; From b739a08e22319851aafc2b507f0001f8183455f4 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Mar 2018 14:13:02 -0500 Subject: [PATCH 086/116] [communityhome] Remove active user feature - Updated README with latest addon state --- communityhome/README.md | 35 ++++++----------------- communityhome/communityhome.php | 34 ---------------------- communityhome/templates/communityhome.tpl | 13 ++------- 3 files changed, 11 insertions(+), 71 deletions(-) diff --git a/communityhome/README.md b/communityhome/README.md index 91838d9f..61bbc99a 100644 --- a/communityhome/README.md +++ b/communityhome/README.md @@ -1,34 +1,17 @@ Community Home -------------- -This addon overwrites the default home page shown to not logged users. -On sidebar there are the login form, last ten users (if they have -choosed to be in site directory), last ten public photos and last ten -"likes" sent by a site user or about a site user's item +This addon overwrites the default home page shown to anonymous users. +On the sidebar there are the login form, last ten users (if they chose +to be in the site directory), last ten public photos and last ten +"likes" sent by a site user or about a site user's item. -In main content is shown the community stream. This addon doesn't -honour your community page visibility site setting: the community +In the main content is shown the community stream. This addon doesn't +honor your community page visibility site setting: the community stream is shown also if you have choose to not show the community page. -If 'home.html' is found in your friendica root, its content is inserted +If 'home.html' is found in your friendica root, its content is inserted before community stream -Each elements can be show or not. At the moment, there is no admin page -for settings, so this settings must be added to yout .htconfig.php - - - $a->config['communityhome']['showcommunitystream'] = true; - $a->config['communityhome']['showlastlike'] = true; - $a->config['communityhome']['showlastphotos'] = true; - $a->config['communityhome']['showactiveusers'] = true; - $a->config['communityhome']['showlastusers'] = true; - -If you don't want to show something, set it to false. - -Note: ------ - -- Default is "false". With no settings in .htconfig.php, nothing is -shown, except login form and content of 'home.html' - -- Active users query can be heavy for db, and on some system don't work +By default no features are enabled, you can edit this addon's settings +through the admin panel. \ No newline at end of file diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index a4c956c2..2024133f 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -32,7 +32,6 @@ function communityhome_getopts() return [ 'hidelogin' => L10n::t('Hide login form'), 'showlastusers' => L10n::t('Show last new users'), - 'showactiveusers' => L10n::t('Show last active users'), 'showlastphotos' => L10n::t('Show last photos'), 'showlastlike' => L10n::t('Show last liked items'), 'showcommunitystream' => L10n::t('Show community stream') @@ -118,40 +117,7 @@ function communityhome_home(App $a, &$o) } } } - // 12 most active users (by posts and contacts) - // this query don't work on some mysql versions - if (Config::get('communityhome', 'showactiveusers')) { - $r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM - (SELECT COUNT(*) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`, - (SELECT COUNT(*) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`, - ( - SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid` - UNION ALL - SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid` - ) AS `uni`, `user`, `profile` - WHERE `uni`.`uid`=`user`.`uid` - AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1 - GROUP BY `uid` - ORDER BY `items` DESC,`contacts` DESC - LIMIT 0,10"); - if ($r && count($r)) { - $aside['$activeusers_title'] = L10n::t('Most active users'); - $aside['$activeusers_items'] = []; - $photo = 'thumb'; - foreach ($r as $rr) { - $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); - $entry = replace_macros($tpl, [ - '$id' => $rr['id'], - '$profile_link' => $profile_link, - '$photo' => $rr[$photo], - '$photo_user' => sprintf("%s (%s posts, %s contacts)", $rr['name'], ($rr['items'] ? $rr['items'] : '0'), - ($rr['contacts'] ? $rr['contacts'] : '0')) - ]); - $aside['$activeusers_items'][] = $entry; - } - } - } // last 12 photos if (Config::get('communityhome', 'showlastphotos')) { $aside['$photos_title'] = L10n::t('Latest photos'); diff --git a/communityhome/templates/communityhome.tpl b/communityhome/templates/communityhome.tpl index b8f80381..c2e458be 100644 --- a/communityhome/templates/communityhome.tpl +++ b/communityhome/templates/communityhome.tpl @@ -15,9 +15,9 @@ $("#tab_1").removeClass("active"); e.preventDefault(); return false; - + }); - + }); {{if $noOid}} @@ -41,15 +41,6 @@ {{/if}} -{{if $activeusers_title}} -

      {{$activeusers_title}}

      -
      -{{foreach $activeusers_items as $i}} - {{$i}} -{{/foreach}} -
      -{{/if}} - {{if $photos_title}}

      {{$photos_title}}

      From 35dfae16454a44e9428cc8e673a71d31bfee09db Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 8 Mar 2018 04:47:47 -0500 Subject: [PATCH 087/116] [communityhome] Add Unsupported flag --- communityhome/communityhome.php | 1 + 1 file changed, 1 insertion(+) diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 2024133f..dc0a6baf 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -5,6 +5,7 @@ * Description: Show last community activity in homepage * Version: 2.0 * Author: Fabio Comuni + * Status: Unsupported */ use Friendica\App; From 7e516b541dd92691ad490e1fb6efae123599cd85 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 18:09:13 +0100 Subject: [PATCH 088/116] regen pageheader messages.po --- pageheader/lang/C/messages.po | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pageheader/lang/C/messages.po b/pageheader/lang/C/messages.po index e0fdbb35..9c3f7989 100644 --- a/pageheader/lang/C/messages.po +++ b/pageheader/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2018-03-11 18:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,14 +17,20 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pageheader.php:50 +#: pageheader.php:52 msgid "\"pageheader\" Settings" msgstr "" -#: pageheader.php:55 -msgid "Submit" +#: pageheader.php:54 +msgid "" +"Message to display on every page on this server (or put a pageheader.html " +"file in your docroot)" msgstr "" -#: pageheader.php:68 +#: pageheader.php:58 +msgid "Save Settings" +msgstr "" + +#: pageheader.php:71 msgid "pageheader Settings saved." msgstr "" From eec360c9c86f961d69e0845b980db217782c7489 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 18:52:47 +0100 Subject: [PATCH 089/116] regen pageheader messages.po --- pageheader/lang/C/messages.po | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pageheader/lang/C/messages.po b/pageheader/lang/C/messages.po index 9c3f7989..f8958d2f 100644 --- a/pageheader/lang/C/messages.po +++ b/pageheader/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-11 18:08+0100\n" +"POT-Creation-Date: 2018-03-11 18:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,20 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pageheader.php:52 +#: pageheader.php:53 msgid "\"pageheader\" Settings" msgstr "" +#: pageheader.php:54 +msgid "Message" +msgstr "" + #: pageheader.php:54 msgid "" "Message to display on every page on this server (or put a pageheader.html " "file in your docroot)" msgstr "" -#: pageheader.php:58 +#: pageheader.php:55 msgid "Save Settings" msgstr "" -#: pageheader.php:71 +#: pageheader.php:69 msgid "pageheader Settings saved." msgstr "" From 5c64ee11cfec90b752766a63f687e53616efcb50 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 18:53:21 +0100 Subject: [PATCH 090/116] moved pageheader settings to template --- pageheader/templates/settings.tpl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 pageheader/templates/settings.tpl diff --git a/pageheader/templates/settings.tpl b/pageheader/templates/settings.tpl new file mode 100644 index 00000000..55887cb5 --- /dev/null +++ b/pageheader/templates/settings.tpl @@ -0,0 +1,14 @@ + +

      {{$title}}

      +
      + +
      From b0e0821d072db0156db55541ab502d0caa80bff1 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 18:54:01 +0100 Subject: [PATCH 091/116] addon should be commited as well --- pageheader/pageheader.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 7b692416..eb121fb5 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -48,14 +48,12 @@ function pageheader_addon_settings(&$a,&$s) { if(! $words) $words = ''; - $s .= '
      '; - $s .= '

      ' . L10n::t('"pageheader" Settings') . '

      '; - $s .= '
      '; - - $s .= '
      '; + $t = get_markup_template("settings.tpl", "addon/pageheader/"); + $s .= replace_macros($t, [ + '$title' => L10n::t('"pageheader" Settings'), + '$phwords' => ['pageheader-words', L10n::t('Message'), $words, L10n::t('Message to display on every page on this server (or put a pageheader.html file in your docroot)')], + '$submit' => L10n::t('Save Settings') + ]); return; From 83425a7f269e57cf9d3959da59bfd4191e86ee91 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 18:58:33 +0100 Subject: [PATCH 092/116] indentation --- pageheader/templates/settings.tpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pageheader/templates/settings.tpl b/pageheader/templates/settings.tpl index 55887cb5..db1a4093 100644 --- a/pageheader/templates/settings.tpl +++ b/pageheader/templates/settings.tpl @@ -7,8 +7,8 @@ {{include file="field_textarea.tpl" field=$phwords}} -
      - -
      +
      + +
      From 61d078d1247a67fdac424e740ea0d689ffdaf595 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 19:13:59 +0100 Subject: [PATCH 093/116] regen mailstream messages.po --- mailstream/lang/C/messages.po | 62 ++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/mailstream/lang/C/messages.po b/mailstream/lang/C/messages.po index ac528cc6..80344780 100644 --- a/mailstream/lang/C/messages.po +++ b/mailstream/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" +"POT-Creation-Date: 2018-03-11 19:13+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,62 +17,80 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: mailstream.php:55 +#: mailstream.php:77 msgid "From Address" msgstr "" -#: mailstream.php:57 +#: mailstream.php:79 msgid "Email address that stream items will appear to be from." msgstr "" -#: mailstream.php:60 mailstream.php:282 +#: mailstream.php:82 mailstream.php:380 msgid "Save Settings" msgstr "" -#: mailstream.php:165 +#: mailstream.php:223 msgid "Re:" msgstr "" -#: mailstream.php:173 +#: mailstream.php:231 msgid "Friendica post" msgstr "" -#: mailstream.php:176 +#: mailstream.php:234 msgid "Diaspora post" msgstr "" -#: mailstream.php:183 +#: mailstream.php:244 msgid "Feed item" msgstr "" -#: mailstream.php:186 +#: mailstream.php:247 msgid "Email" msgstr "" -#: mailstream.php:188 +#: mailstream.php:249 msgid "Friendica Item" msgstr "" -#: mailstream.php:229 +#: mailstream.php:293 msgid "Upstream" msgstr "" -#: mailstream.php:230 +#: mailstream.php:294 msgid "Local" msgstr "" -#: mailstream.php:274 -msgid "Email Address" -msgstr "" - -#: mailstream.php:276 -msgid "Leave blank to use your account email address" -msgstr "" - -#: mailstream.php:279 +#: mailstream.php:362 msgid "Enabled" msgstr "" -#: mailstream.php:281 +#: mailstream.php:366 +msgid "Email Address" +msgstr "" + +#: mailstream.php:368 +msgid "Leave blank to use your account email address" +msgstr "" + +#: mailstream.php:371 +msgid "Exclude Likes" +msgstr "" + +#: mailstream.php:373 +msgid "Check this to omit mailing \"Like\" notifications" +msgstr "" + +#: mailstream.php:376 +msgid "Attach Images" +msgstr "" + +#: mailstream.php:378 +msgid "" +"Download images in posts and attach them to the email. Useful for reading " +"email while offline." +msgstr "" + +#: mailstream.php:379 msgid "Mail Stream Settings" msgstr "" From a477adfc687d0a56bb28ac6e96006ce9452a5e0e Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 11 Mar 2018 19:14:19 +0100 Subject: [PATCH 094/116] added missing open/close for settings header --- mailstream/templates/settings.tpl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mailstream/templates/settings.tpl b/mailstream/templates/settings.tpl index 37610828..599837ba 100644 --- a/mailstream/templates/settings.tpl +++ b/mailstream/templates/settings.tpl @@ -1,5 +1,10 @@ -
      -

      {{$title}}

      + +

      {{$title}}

      +
      +

      &2HkSF3%@nLp98uSM#+_3HLXY45tTW~cO4{M)U1 z!OEseclM13V4eS@nA1>sGtTV3Lk% z-IMRvHsit)2k=Hk)2j9F&+FQ6{u-{noMAXJ5~5$LuT~4e6}IaZ-AT_)zJJf#lN*2a zmunYmUxss}l_UJ$Iix%H=&#G&;zAYcuh%N|s&}JR`L=C4PEUQJz2)uyq+0zOF6f_r zxw|*3>s7qPkmA;lPiB$4SuP*&uXjO0cA@1*S#N)kJu2rwQG4cPa zFaQ7pvO$^yfa(Q(*A@L7U3omy{~!NW%2nh_DT#8&I_O43a+fgIETlvzVvKDiawT%D z5Tzu>mMh0>i%3W!GYLb^jm`BjX2!8`~7*pUeD_-=4tLugqnEb2FRyu zST2j%a_s_!I-Ofp0SCg!U|oTDBiV zc3w5~viHcKze78iH~tA;!{? z6G+!Xu98VE70+fw8O+u5PH;_Ov)B@LpzpMNM0o`1QUfpqxHnLf+*m6f;FxQ!i9aj;$ z^KFNsqFwT`;j6a9Oib^}H)LH6#Dzo^;;5>2&{^j_a z5+*y<*yOY`uI0pStWi%P6#WqjIUec`xKqS9COF=Rpu*`BUBt72>d{A`)iI8gRLQP= zP4v)+*0y}wB`n>U8XE<-=b4^o^PlF}kmk zK9+%D-Q3`GMK_?3{7{@{2P)v2je3y<9fP%h5WkX*xl-VO;^pLCb!F;%B}9ed zOsi*RyO2jmvU-pJZn^M|pd4NvKEz?VnV7JDKBHJL7b_i99yqT&+1f0PRSCF-qqvyp zu^gqT6zw;y5CVB}c_`31-S!n^YLriwA5_kfb&EZz0_s}IdDt~+dO9Tq z|M89;EhO0O^+w`UA{Kh}C>ecTdw zmK8|Dx>TEJ+9B#C)l}L~+yL(CVxCiO{{40HneJ`(itk?~0(%YbC&tOV$neg6TiqiZ zliIT9rC^uFk1H=jGj!h9>5H!ivag$e zORr>|MX4x-7z#V5i3`d!Yk11>v25%=XoB zi#=~8f4BD&kFVw((9O-=nNr=mpyi$b_|?q9^iu`O!->E&7b#m!<5z5aGZ zT|(Sk^-!X%nw+Ftw}V0<#xrbBSp(E9G~Q_<^~^zis-Ph7b!I?}jsWxQN7F}@ll-l> z-XMg3cyBF*(pkdW!k$e`RJ-E4*<3}b>6tIRKf_GiPPmuXWm8X&<1gmr@F|v&vxB4R&OG-o^G?^Y5JV%&i2DUNqQ**rU7)GUsDPCko_C_+xfd!mgts4@>yCM z65=l&U9G%oEibp-todrX`4KsB5%cN#>9FY9g>W5wiE?q9vr=}rfpTu)YCiO8Ocg5^ zVD*!#9KP6&6vY}*T63e}+T_Pi-hYCiPP(03p_mCw7@L5wBhQjR_T9B$w3Q?MI+3-d z9n&usoK^GbskMve0i^pDOnv%Ei#4gQw*JYrKM+fVb5;^Fh!4!zVJ*1hgNayvc*DMj zZ}_+0sBwBXpTjW-6B&F(`IZMi%fCMqEl_@SvfblCrs<#TuyR3Rj?(HK`Cl?2=Pcfe zt53{3ey&2j%qh5hw#)p&f8gxNr`yUO-nI3IX}YJ@9wm`D)vJjw%Q{}XluwH99{P>H z`9nJ#CdGC>#U5pj9Of%M^PCOJPvO2-BEV2QMf*A&`vQ)9t0=kQh|u5;Vuel;(`;enys@D$}i=F=SYrLGbCDd0o@lbF7X2@5+=`sb8b7 zDy&Mb5yac_k?Z#SS~1n~b2ET|#>PaewcgA(?M7uy1RNnbtp~T%^Txce=SB>Y;L=$ZSi zyDF~B1x7!;D;3rj`t#>O68RDIbrVwmOBi$`YAwv*ygR>LAuVTVxd*57R5L*m8A6NR z67Zi(ZL{8vn>7rF^nFJ5z7Fc-*L3PHF*e70V$Klb`7=+_r%}iNG>Y8LK%q_1Hh;hQqDRb)Qb4Gz#^uRal0^)%xD_ z#b<6h^oOW#Hds%E69e=2n`3q)D(*MCQR9~%XGdH4iL#;x-6r4oEwn8#%B0aQeBN#S z1<&(-4&I#kZOiwCCnYGy{{N&)?i>&5(M%e<@-XJ1Mw0lu2E3xe#C;~`Ui9|gU)B~8 zZ{{0)*NwB_ehQXvRkSsgM&g^2MS1TPwS6xAd3x9TS%-{ETIs^$hyVSz!_+iaWQ)YV zt`J>`27CWRCg?PD_91|E)*N_vc!3B$3|Ghj^@4>!3L9Vvu%u0w^<)LAfTWnIPWy|^ z=ex5TbiFFA1v(C{wQVSZtu{u}Xtzph)}8EazpG!S{oavlLg|=J0Ff#kzyYek9Gn_B z8{!Os;@&p|;Mlb{JV0a%PNw0g7qV_+Y!s5A-1m7PfL_b2Wz+O08z)S>X1vzhI^Sbx zcrd})MZF;&iJ{OOBM(pd<~4;TkFqBO7-|`x(q9vsgXf15T&~7Ov8fE&?jh}=rmsm( zKgGFiMmU==co+<}(Mc59KT2U-L@&QeBMhA7QUb5jWSB>xR|x?Qz6zrQ^(03%rCWYS z5A{4zJ@k1gD4{?}^##@c#W69cIHp-$^oHMeio{Ap?i(HFDXCZTZ$rM>_6Bij6BmAc zNi@6J7O;uO7SDNoe8yJeE#38*OXfG+E=^rkHrIc&fuV@}w(D=Xwt)^M zyw9b@+9mAjPg%5jGYaX)jy+AB+JMHMTrl{`x3=u%$!+k2S`_!?oVS!acVX%g?}LNj z)Nu6*s{o6%xZ5J~Cz3z@x8wBvJj^pOD8RiZt>HJ6gg` z{xVy4!k3`AE<21hkN5@n`mFpse&`_q=6!fPwsT|RaoxKRCa3IEqllyL)9=MUu0mU$ zma*6ePCb~JA{{N&>FSeu^H$v&aHo!}IP+`;9|PyT&-^@e(zt@Ha!M&C5bu!IFPrnz zLQK^27;3*HK1Khsy)r6RPV~9fgGiI3Nhi1dNASDzYm}sii2evyd9Af^kG(b{eEWPK z&lHj}X_mH8l18{%&}P^J8T<0pPu|JrJR#wF{TNu)4>vYARk<^3vwcDph5F6`x{(9W zUxQa(Ml%MQweNrN-TDx*cRO5Vut>^tsrj*|?|kw2gWt&R_8s~pPo7NIY^3#UY+hYR zop|a+3m+wiiT!3fBL5TBN|>16ckSxX-rJ_|l;hv6wqFV0<1z^?GpTxS9(Iz+t_k(R zGf$tK`1Lwz7ZfE|AxA9ib&uEON4vaEaA7mb0|D6)J0oRt}0yn3&X%aJ>T zQQECP6SIOWDDzU}K!qb>Nb9bybuHbit>3e9pRLd)W>u%3NY5xK8N?ip-DT*|@ZX$% zzd$VNzRvwl2x08YCw$l*r(M_0E*Y7Or6mjpWQblRyZGIzT`R3!7DAGyeLe1=C6^DN zpOoPu&U$0Ariz6-4#*f3M)fJrF=vv`Y!rU;|CxW8jq$d3QX22N|FkhU)^Ogt5s9VU^;TR;thpHhhijv z3fzp9+qKDFZ{p;{cZh!O8x(mQyfo6h`&5J%u)He4gP?Aw;3M zbs6xErWVl&Uf|9kc6pq>dlZI@YxRBy$hZA95Q$kv6BylOjta+P-1wk#&icBsAB)=8 zPgn?NaBBFC!qI0fsU+{-`Ag3t2Il0A>KB61^415(3WpQAAGN zxe^AUTS4$Dv{?rgL>T52~apb2Jw=R!m2x+rV4=?!Ut~!F_N-wH|05(wQ<}2mi4HHXp}+u$avj_ zFqI1Dw#XyxBkuB)?FtLRj#FEc3ctkkyQsX2h7OH$zd~`c7{#I5zqJeyv7j;lOa(e* ze*h0y;v1<9P>k-#33$BsSI+d`p*aX7{okux{H^Z$Wre2xq9gV4%psFl>+~BSk?`l! z-)?o#672pSg{&zcaeu1|kl)j9sQ|Oj5uR3>s8# z#GMp&&BQ1w=J$R$vAs=nqX}6ka$;}ge8jV_GvEB^Avl7e?A<5~#tqpqR#evu6S_9$ zlriudDdSW|1K$V7Yei{eI2KPjHielh0tcxet5??U)c`AXl%&uF6{NbEkhmb&2C(>q zV09COI%svsm|TTsussWeK!`hJ`bGIK$-ftMM?ruY5IY@l> z!-wg0Zi)qI746;S#>_}z4oD(sIFMqZO&u;`09~3hld-bziTlYO7QVGM^l&s}wH6tx z&&JN?64X^c$D$TiZEM+3bc!C8FK6#HDx?t5!mKzFwX2m@R2N7GVFY+lb`yFbl;FM~ zCmmA=2gaT~QZm4KjiVpy%1uCu+p^&lH>=r7G#+rDs-;kVsNU&vpa+=7oQx|WFkMHG z6b8=(Z9@mBNQzE#-$>a#FEiFVs?59C0|j&%TCF}}mOgay6-WYZmom-WzQuYwk}uf> zbWOG1dS?k;(jEMf9fbTq5rVo2p^!$VwbTBAVe1ruE`Vi@plN}@)SgWjV|We$Knr%e zvjIfwM3Yak(t29nv=K)7*eJ*4K_~l#3@7N-vBSAxndI}?y2Zi==cBura2rT}#{&R` zcV^sN@Bqq`r=U~|fbZ30IQ3QK^0}Zp6kINJJMUg~`+eEiF3+1kY--q>UJGtRO|f;3 zrI{4QfPO8Wox~5^OD6I?Gz)p7r9u&7^E=1Z)t?UX7bM@AxM9@s#7!uh%+-U>dEwg; z)^H(?AJ8Ri(RF6DaZlzvn}tG5!o&NHI(Ljb^@LFcReXCagT>V#`DOp|j>k)$I)mEGKTl(wgV?NYZrPK_&G< z=gv*fxo=R*;54G^J76wG{%&$o(0e5JnBcM*!bxi8?@3#lz?#kOAI(O-ok80J=1(!VE-^B%1i%jSo&0nCO7^f)UuHWj3qyk?py*FRKv>1HiKEC*wWfE zY5mu0%TIRbPegF3<%l`(3JfQ2-QAS9ju+Jngx)cp%(X6t{o{w9XOSIj;X2fNXG(&p zxUK(=&<(S#rdzxSXBC&2`Gqv$jZC#C9x53&b6i}O!$?e)e}00oL}kg$vfCZ$$DD8G zIsBj@V3{ta4?E4I1q=^S6eGm+F8fGqZ|}~nO51HVp4_zlg&#M*E^%f{`XS|tIL4C} zDf3-B4JklaO~mO@->YeStkTV#1q%fvcp`WqH^!0J0(L`v0YjfnURx8lOOPF76FDR6 zM~q|7&7ZOn^?#=@_VmNtN#8ZwJeMn%3Oa@~9^E}FMM2qT`zBIq*HXT}!P{*uKN*I0noTM{%$; z2aC8a!6)6XnTn?h28bfZ6Vs|!`agc%iCmEp-M3q1{Jf5#IsD=pci&4dxlZe$>JrF? z$>euclU^f8S;kBwxfyYP!1BkmP>$G;bVq-am-!<9#telVRpW@-NN4>o#o^)jSc#`nDN4i(9BtCqmA$-RSj4UJ@nqfbypRhswo8Nk+$9AC>O z>T{q&pB&OS)?N$F>2}=(41oqo?i~=@Xn{qo#VHg0J|TKTK3>Yc>;c%ShzGeNQJlIe z?>*gtgTW?OJUXo=Dej!#;s^HHu*p;gct91c{b{+WmQhXQqvZ*fb>ho1yRjWQ+1g=#Os4o4I?6rC48>#ind& zWDLHt6>-_9imUhv@Z}UQ_sk;$9;hAe#oAcvVlk<|+>Xye06jDw3OLhg1T@hIs!OIx z056iKiUf5T;ex3)YD#SifCHi%;&f~VeE5O#6x>9P2f_6{Wq>f?%6bKwGN&6V_Ba*h zOa$BTWjZM|ZKKf40XS|u)1?rG7@DyPXmgm;Eko7@Pl3fm0D!EGGJ*psK*#_^>hk4y zY24GK{g|@3EsN3@(!>iH?jRb~s@X(6n+Ok!54zw6l7!1?l<<3zi zCX)bqj*W*Yay!|t0&{GLd_}#@QrQU%$gNh*tAA~2+7ircahdxyqPsv${*?FjS=A=t z+P#b54g z-M7CtZZF4enRnBStExhNq^{Ebo-~J}lk-(#eTW-4JMLkMNNwL&SWOBO(v`7OV_N9N zcMlGpj%MzZ>qu~^<^h}gp4TDhj1io2Q3F?l=nCnyKj(Y5I6<>47_>k#NpMfQp((G* zYep0f<i=l%LLab6vsf8HW}6UifmcgBeXv{Qas+dA z>;2h6tpCI0hcBz42o@rQ(mR1mEDEGfF7JO3M@P;7nLiU=3(w7}+dMJ-9+bAIOcqp3 z2rEKV`uhc;S{p4GHjv^qTlIg4_COGE$dTrMx=tqmNY1%*evX1;eG4DlCm%H_Sq#sQ1j%_rIGnc>3LMM#0=QbqZ;S}VCzGgO3f|N5uY1UA>^E#=A{ zD4Mwj4DKPPF1MAi@4+i#E{(lel9mZb?WLc10F_3}p576CmEFgs9BjMda(0Ll5x+TM z;_#G*wVoAUm-yp;HoN`625V#5p7maoVe&TP^L4H5b@%<8cJ}>2AOG_z27}tiZga%6 z!-SR%nrq15qjyBk9QgP=pg3`18Ffb*2DoK8HNQ?XZ!Xy1KNBlBYkT0|NS}fu6={74 zX4W1#x!vs1jn7w)92Vc%@@kb;AEuuSF%Y+kzY|H4?%*W|6S`w0LBMOhXXMl0nIH4F z;rA4s)$qWn0TNwG5AVipI_OD`x6PZHJcf}O=3Pf4UR@7*PXM8HZaN) zctSc ze)ke`o`?<^9CG{bdLnw)Ni3O6nS{Sz+W#n3v-)XlJfCf#VcytRn3-^5^;ejJ@eYE6 z&)2c4{>Yq^t4(`J5C5UE;5fyT%>JqFKkktb2ldNuoIub$E>ZPZqUS(00eYf-bX)^> zq*N!_=4D`I>zZ&lz#%G9SiwKtW?5)IGc-#ILcfZq zQGBPFsm#g35YI43PPJrLM)E|d^_51i$8~;Q;$1=`%hixV;lL;yICIt4EU@BE;rFV| zgG9=%vW|Cy*TEF#hC~Z`YQ~c32e;|8S149VxNK>fdU0UM*F7x{kZbIrELJ^BFr=q( zLgv`?+nLr#^Ix#8(B^#c*Y`3`K{0MUvoFm_KUqYVfcxq*-;A>xD5gF1z%_3Bika>a zE+I;BW#LnnZpiJ|4FfAu%`S2b_!(lEwTo=_FJ1EMO%x<4*ZXPE6I@;U$Qj(O0@rO1 zL8>HOL;j?pS+n`Et2d9!#FLoFrJ3lQ5xZco`>t`0@8W5fTKSlf(+PAE zbkRnEV*XAr^Q?6LC6!p+mg-I8c>g|1l2v%;KylU`_iMwaWdozlI*WJi8?bpk=fcZ* z_xiVsi;(%~^S@zP%d5t3Z3VIPM9@zV7k529?ud*WDNJk1@aen!V5%cy$_O1x zoA))C4U8SnggG*Sa)J&^w-V2EZ>B9orkFSJ`F+ix%&f5bPl}C&a)?wO7XK!Jh+bJZ zs;D#crUYN7@cgh0ALA95S9f{K?dhy8$l{_}I)3JH`jPbC;!fduQ+u5vbWhGD;Skf!~XdNd_KGS?~ynbt9ms(PJd&-%RX{i+wFZ_m@LD^ z%f`8L?EEK{Z}&EzjB`}h&~L{E+pla$l@15S3QoXw)&IIchrQYK-le+Kq>*r|ip}sUr zdk$Pbcvt4W^lQn^w_C1XRypcqRzUp632dD*&E2sjd3*S*EgYBKdNr*UCsQrQXa$bC z8DSV;*^vOjrDQORljDOiE_^pG6Yv|NB0B{cX?z=0qXldaiG5hQ^_XrYgD9x>RCv+jMQR12lu$VHCJ%Ir!y@)g^xTP!|zM zhQn+EK%50syJGei4p5+=S2Og$h21*4ez5!Nm{NR{3kflFn8p$NgD0}o*b13qA-Q<| zo_FNUT?q3}zJJU!g_`9=0+jdeN~;R$?F?@+`cfENK!RetNC@=`1cRWCOT|eSjeC9j z1obc1=M_>s`ruzqJaN1H7W*?!^*?sY@zFK0zu)HGna*RqlHgscp;KJ}?YDvIiCu}p zsr)Em96n__8pJ<*0VD2|CeFmjg0+FPRWv9hqLmqO(tpJBPr2^tisu%!=0r zhGPa_c^)>z=95`KJ6{f-vl_RP$Zg5afdE0uoOO1dbVPwn3PnV6FSs6af`$vj82( zBXTkXM*Y}=QYQw6aRVkOS1cglz|TS3_#{#^J6d@o>4bMAh2*N|^ir>;%VB#cCnhPs zElr`!-t)lYTE8gPiMg*7Osq~w*V5S?&}gfT+`P;c;>Tx(H2<0 zfm%@EBqda5#h}X-aSG!f2GARSKljdm6vpaUMOsZA?&YBC5xaTk7m{$)k$>(Jhprn4 zrIZ?LB0_Rw%%?A~)W>kUTA^81OTX!ALehk~HufgKWn-MUf^ zEkeu|;Q%cyilE+MHvJ0aGI+JhHUzlPAC>(hzdjVgmxkd&&N2qnT~z<2;5^pK;W(9| zSCHOwaQF4vImqrRB&SXBaV6vsAsH&1p35GIJ=4`Sk6X`e3LPc6vTMr==<9531YCe0 z&^7`)Nl=BERlB@_rjLCQI~Z(WC5O;dQqnacxR`7|)~DlD!&-^F>}ySqGj<^G9JTOT zg-Poyb}^M(lTXK)!;lqBShkzXiclWnsikT}v zl;V{!S<3{HZM+hJmOC?l18JfB(8LjUxTi;C!KMf|AYWllK`kh47OQIqlT|#XCxMUosf@1nYKe_$RJpLYYSk>B9KsXc^hj68jt9 zmUO2CO(D;UY&Hr;yw}m!cB^m7yx*j>AYPoT9AFbf3if>_to!3_s~ko4E-rx%@)bfr2aU>Hx%wee;F<#exi&7i%z+C~(!-*=9#b#=3t6}K*;5~w%w8F|?2$4hEH{V@j0nGxteDG>K2gGD zFCoZ(1TpY{Q`vl19>6>KftuN1heGG_LAsLS#R36iuLb0MYY3`n96DSuC*Sr+_+VFE zAO`F})Zuwm8a$cx(Y+|oa(h-_VGnJg#{qkzL})BMYRLxldHe_M;_y`$-PY%4`&^Ps zkyes?A*KP6LnY9PR~$X#7WtDzVh|q>Yq-G$yvbcBWhUD>XH$jh)7M=>D~?ajs<1rr zsHB-y`vup2Au}8KlA^vUND`fOzg=UA_A)l!CFNjD#*^f<(k#J-5MVYa!dx}x4}T9; z`cVCg@{wBNJHFC)LhPKn|5N4kMkW4l45-9n3Rmxh(19=2ce;!O2V}qUt`A{&hWqX? zE;)60U{=JOq&6G0jSfl=zzFCLW6aGye}R}o6?#F|8AW;GRPZ)IDb#n_MRgS5jOXW+bO6gCqsR+T-Gc2 zdJ*Lr%%t`Zxg*-QfbVELoZwva!pT8pMXV0BS~t9E7Yf}kw1bW;od8MBNZYrm^sikB z+{39|DUKmf@TH4Cnw zX*a880^g+h7xGEg4qdzcl3i85&|heDt;l~F1iYSZKezl91%})D4`_4UKm#Uht~(Y`RP)CNEl5cFvXw zJ>`|lr-tjiknP{0d^>xJF!jrN%Qrt4ooFnoK) zi-0=ZSVMAd0g;|;B-Oo!LH3~Z1DeWNOgX?9**4i2JF{19$i1YzXaY(sFn++*?p+0d&3Ui<9o z6!|=d>CDst${jiM2igI`v(7tC6H?z=xK|HuULzN|sH9yMJjK4`5Gvoilzn`wZOS|0 zZ^gM9TOyS8(Sm%64+nfp0BDvO&k_;pUay&-GMOs02p-ViY)9x2wj-M%LzTbpKL!~H z7?ha}T7N*{?vxm4aWjFI%{tQYV2v5T2@iyVu_c@J+0jMk!4JG0ehhoG-qI`wPr6Yl zIh<3D{wTCafDR8NDXbDa9NkwPj^@;Jiy0OV2F{Sx*KsHCk=?liTq4;0Z9|r(LG#u`bofZOMfNacL!%o zIgynKV9FuQyFyxWxT{!&E^aOIu+>zDG>R%nNkA}l8ykVS3N(y>Kv$>>8VMrRVp1JH z_g~)z;F-S-4qt=O{Ta)AbYEHg(rx*{6EgoZ|{m9Z3x8U{mS&=mc? zVXV!N)U4m`gMT8RAA$_H6z9n!h7SfR7tLHw^pLm)&XWu2hxA*bw>hzO&l8}^*ZSU| z@vI6lACjAw&(i0|Jk?8Sc@xp{Nac`~2=lssgsCE{Nwf3o*MPtu;oSTbVRQV}yuJec z_ReFMPVBS$(#PFQKH=eFIKTUAUrfc#g1_F4%3IL2Xz`O?tW6wWQIXN-zMA7}{gtn% zzv;zqR}w}Ut1Q}(n7R$YT%Z*sXxYtoPFX5?Cs#~z^!U{Dm0v?^*p5bfe&D#jI;AZg}#5{QZTF{YSY&7rMiOL8Qmiyi8Zua-~UU#T~j-^fm9|!rr zNL#8#4kPu@4Kdb@BqfS@R5%Q!YP4EjMseBiNrAS-XnK**gdqx(HrZVV<#GbEk%!Us zR^hV*ZtdqSN9EJ+%Ioghw#B>N)n8U(XWSc8t#ln(v8S!fppn2fng__Zb~{^B?OMv8 zf1YrM+cNF;kz?{~cts52-^=>;MeTom|*qR#Fc34KJexBe@NTljO`#-RxhD5udx9*4vsm-vOPf z{+qirSF5K~RDurI{`rL(C{ebd)HzNdktbFwW(@Fn%Iz*G$tUWPU*2WS>*!zo8i5i2 zM2L0DFP^GwSkz1~YrRdFZ~pubWH~A?9uIo^552heuT6jCqqf{}zhh@Wt&R+9Q9^8PPvxT4A;~6@^SCIw zN|*QeIPPn?w0puVUtGq@nI4RgC7A{_JhGNKc&7Z>uOl;*X#XIzuanf4ga796@c#kO zpGS{Kitl`LLuYa5lgm~5^#^Q{W4emMlod8$FuEm> z8md<>1ak1(Z{G-Dw;kh_Ffo0TgNp7=h0)xEzL)@=Z-I6>`_cX2t!T!YU7tS+_I$o{ zr`$%_KIAE*?`_P?s(&8ukK*Za#AVj|Gg1eiTkp5GrG7YZHO)inw?+6;K=G|>Zc$%Q z1-NhG@Y;3w(H`H8EM#>uJ^A3l@yh|g>jSZ(3jr^D91GtjWS{VPo@-~SXO^$uk~5wd zl)YS6Y3MflCg7bYRqXZt9h+Z8wK3m~)q*c#rQkrxxuiYI|ArPu|-hDDMvbDkRuHuirzi5&hBuTRCp(48B$=A&A zGHvlFTEd6uw5s24D7CC>pR&)0cp=vZ4|-1Rr07ci47{9Izq8%0Ax_Wfa=B?@Y&vb{iscZbQfaj@uG9^Cik93!hh?1(31=*di&+6Xc?xXtF z-7>QY`gYUew@zB#rvcbwJt?m@#Z?^(!%zcf-RmM~f`6h3{V4HvKZ?RUYqhFcdG&f0Qt z8b8wZYAZ&(^uy;Xf)4SZGyc(-a)K`E7Lysq}FzU@j1ydi+*zHokgf(9K~IQ0mxj z_C?#W8NFj})lhQp=+NWcrow}KnlW@SuP0wVP;m9o^Ugi?{Wr?z|6uoi zWR(VPZcLE{@N5r3wks$CI{f!6v@yFu#;;eB8t}4RFB`KD`V0=oQ#^_MXv`XjRFwu0 zy+BWH_A|73sWSy0QGpnG=dSTp|3l~yDHQKd?AX|hIA4=fenpp!145`7L$zXV5P8zi z_@tabJe5pLDyTs6y-3J~=*6t+wUd?DC7WS#IW}?qrM|7gP4Z^)oL33S#mj*)9u~6_ zW_PRU-gEvvo?v|rVTR|yj=Z?jg={DxdXcR`f|I7xbcv3;W{lb7t$$z%mxF7W&Y&QQ z;m&kV#DMM~Kdz03z_tUbCnc>WK&^2L1UNFN55;DYl-1D zfg?6_!h=^h9!1mYlrCa}W#mx;#Mv0m9O^}Ay1^}^mxJaC|1&$w)q5~w893d6xYD98dOfC_K3R!g`jHSGzMK}ge5m!C` za3L<)90b%0yiE8hF*V=5k3H2D?oWlD#$iLx$BQBYtQ>9q^A zjrr4Nb{Ro-ThC%=_&)P;U)2sBOa;0yH&T%IYy!UAcn0QbL`Z)4ameV-zFz1MN$NKM z<&sAky=nv#iAzuXO*kW<`E|oi35#SSHZ;0LcvOqxI7 zlBz&wT!mJV*m-1Xqb4wSK_;(Y5Tf77>izvsh%L^2Usimb%IKqqhaxqcQUAL2E8wb) z)!81J$ONMbSd(QKcM_H8IfH^Phlev2Jil{gI>MRQaK3nJROS z!1TNh<$}EhrK5wek{z>LWfe8Qd7LT9{y2KG_|kvFyjxqF_Xzf<&i%w6sbidLQ;zc} zrFn{6Y<;C)6byGKm=mZEziSg+Ke*_!%5hL*EW9)T*pL_knvIZC5F83;$D}c{94bI1 zNToy1k^va=8)XbuaN2w~Pg`=WW=duZD7^FmSy51a*+>~Eo|u}0gG79Gq$XBtneIah z<;ewVTJGQ$(6kLbR20?mBVB=_7(-Z8XfGiUJ6XmazR@V`_=76nPZv3_+4j4*QDBP< zkGGj2Jmqv;xH?~d+!|ok;+7G2Ts3P7&U6<^W5*JDz>tEbk(Zd}U2fB2B>^GlJwg<5xnSfo2PR7o)nM`-uxap|OS0aY{O%{_v78}&m2@nb1{uKh z$DhU%8-!j@7rk}243)e-bGglO{KHdSVMF+%w8FqvSMf*r7w^`r!RJ;O&VOts8^Jt* zdkX1x;PU#y&(OzU!^<$(~FUKCG?KiHP`^Ddo)D>o&+=Ek^(e)GELLv;4Y|Cx5(zv1&$K9uOR7jnpg@ zo>A2j3gHB_tU>0!>@EjPQB%AC46x~%We)+*_=pkM1|!uVPe`OdMjq_`M08=B!z=gL z-o!k|e1W}8g?#*~(ze?>rbg62Y?9mTOrPf6SfXk@+Peyqn}~@=sUiF8En5%~--~ou zbDKCa>tB`uxSbNOY;^M7;bv}eHB=!N$|&%n;-`UFPxACXb|u0zSA47W_ORj6I12OE zl8Fsm(AY626bf;xs+?v*z)Pf1n8cpS9Kg{)8P4m_gdr=v@DZdHtH9%sauq!ot9HaYpQcru z!_@@X&H!jh1mI!ZHfP;%PPheVocP7%%n)8*QsCo)J^SboxgmzNCRAZ)wSeGKJ6wk=a4l1QlpqtwnZX_J zt6EAUSU$;^1VejmSj8;TzQ2qn7?E8*Ma6$ReR4O9r2p`15>%lkS7bmG-ESq}QC%i|35K1h! z^8oJYHXpo{HAU!g>XkOatZR~3oX5cJnKGF}Lf&w{Gt+T|xnZ$q@^AA+Xc<=2r-1vR+F8cY96f;8=*0F4JO7VZrYFy1wD8id$KWHNX} zJ3$3^N-m)7{`H|@Tq`7!EnoLLW{?->GM>1NCjTB0{YeNOFo9t`U} zf!Cj4OvKbjs7s3RR4;0yq;7o9+AW?wCOqZ4IQ#;NWeNnuydL<+GZ6*+>p$@ofejEK zpgVE#<=Lq55$utZgE$EX`@)$$Js;l^KB;V&Uk!d~6kR*Zw<$$~jiJvMZ}LdvaXtTXPszXRu$HV z=c!M|+>6?{ARK*Y|DMvzLgORi0&J2&hdN%F!|mi}Y8FgDR?(G%Z`G_&y+#;juMPpY z-?+Tz-~gFPgM#FdBln~N({Ykk)SpwE*)FJ1AkZMifq?S621p~NS7{7{Dqd*0NQh@7 zUw!=o^dpMI9f`y>HO*W)@*b8IZ|jmF_s|0nZ8O9_9+!qMp%1&1Jr1HSo;l9H4izd^ z0Yi7*(>*J07U~_=#?<{)dOJpmQWpKPmTD8y5!-@Zy>D7dModztQ%pqvNIEY*JTEa8 zu{NFYEjn}Mw(^ICfjc9*YeqZ`+~Kw_m`?bbB&{8x7IX?#$vvH!Sr<8z_hkH!Oke9aHfC;WF0 z92cmR5RW(WHa!j^6UXCswt!|sHCeGF^fKJ&7Q-24U11yF_ulbJ!nVu@aGOY>WZeoq zZ&9VJTHrWha|M>>=T4Rj$kyvNwA{uwk)~u%NiLs1FE3XyKYw<~p>anLwIM%0U{=9v z#LFVcTvtU!;Jt#8-u5`o&?||_>s5UY^T0G3#cPn$G0G2pm(sGsY<|3s8|#RmbH8K? z0ykUkE+OBPs=hxq02WPVu3e@!@4fF`Fuycpxn-LVpzYd|8Vc*jef%Fy=N``F|Nrq0 z`jqOEb2>=}ha%QVDj_1YL^5M`D5V_ADJ;X*CzL}d$0BDcW?R%^W?P90Nn}%%Vw6MDp zfOeIhB`$dz_JvI`PGGz?DvF@-s~XCH_pR+dyOYz@kgLxy{-p!yHPHgvWieGkNvTXexvR!a{GfS-(9qc~=@Hf50OfHu0jttV~K zM19?@tz{MZb?>+Q9i>7V(A8@ghaT5hS`9j?hJBZ*GQ+$dh$0XDbN8^nVn-ZL^v^O` z-~)N?XB=y`K63Ww-DUM3(&9wUQ_i^@>f78X@`jFBK>?{fuMYAICm;axJT%t71)tllSYVx@nt2 zK1UUOFscZBNb;)2UVM$nyn=i2_*+HNBe%~fK`hCgRjcC9zIm{^of#X^Zhkdpg|CxO z|I^Y9XO%DRz3%nY*s!vOq}r%`;zc2!@$`X(04->iGwicBEZLRnkX(3{7=BOTsolMb9+~;cP~t)|2vQnWG%#ZY=S?-E^>QPyWTHk zsk}pf`AP3_e5ErjxdaJjEtI<2+UX5O<}}tRhx!pJ6X?TTc;uPNELuDh|2f~J~L;1sY#5@h|*m^RiW7O9~i&irwCAT1Wf z?W5vmjq5c7VR5Wp)5-SZ7z$JX)I`L$J5PV-asE63=`J1(0oz=NNobZ=xC>msZ=lyt zVyMv6#el*&Vq6*qtp6DiQb{NrLUB@QjRk+pMbKAzOnw!h@-X7(1@nV`ba9~gvKEMo zf#1wzId?oR ze8Bm7ogulr0-hvp9C+azF6HcP6#s4WbVdBh!2!WOummL+-xEJixAdiBK;649W(V(F zUQ2Gr_eNj=o*ItirNlXs?^`GyQB*!L{ZMtL1HM=o+|p1B{#WuI!#b-U~9$rlD#?`^NX~W=e!STw~=Vv-w z?QV6li>kGtc)AOJoT2tiJeHyq+ZR%+@VGDbw+wsWfcF{Sn5^(1BI#kTrg)5zTHHvq zNjI^4@EI_i_Ess>&sp0%tc&eurtFRNp?Jt~LWX*&JQuQ{9<~VxM;Ivl_4amcLg`V_ zyqQ<5Pkvq?JaKCK(G3>!iK%BlOuLTwG-iz(ZK?gTnc=JGU7)SMPVmqZC(nV=mt_D! z>F{{*xrIj7j00ugdq{3m`1OG&Z3J7)q(NyeBzD%Z^`+v-+tkPPs@ff!T!K@*EH%5I z4PGu@X7SNL`Ciw>G8Yx6cgF8x9@y1~o+uibyB0%lU!>06@%53A#+a;&#PIH1mDTYp z*6w|O-KMG0z+=q6CfSp_?gEzX{ zYO;2_i@^zh0SA?Qf2-fjS#v^v+Bx zDu_iS_#G>+gDDUZfAnX%p=?^Uh+>Oj3f}5&H_Cbpi#|aA*AJ+)^N$3GV-Xe}e0Dqv zN0ZJJuIWJVy^l@ZPvNh9y$AuAb?0v>HL0%E^MpVgx6mt16| z(s5|}4-uOPt2FUd8!NykQ9gM`&Z--3)lnzR?=C;nAn82ARIKW+yB6(5_#to$=ZOyK zcHt%v^+jDSIHZ{WvoMuMycd*7=wOV<7Bn;!4M-H|t6B^xE@KW@kNCP4*erwFCy4;_ zG0no{i}onoArX5^6?ldMtIWC;ZL7k{DEZF{7a@ww8GV_Dg4Oc|cx7Z#*}MhZLNOu_ zpfK6(Pivt4cXFSiMUR=j!P4Nz$nor4L9aSOBoXxP1-6T49uMH%Bu~*Jc>rUhPr)dq z+syJoPWe{p+n6hKD1n`UV4yTaioxR;<>6-(loK8Wh==1mTl!3-k`Aq#;Uh=y5&)HE zY60-QC(;|JDTBvvoQRzaQ)*;bo6{aa!z6v};7M*s#MAKA&NqQ_jYq-z94Qh9$ubx1 z;N*jby$}vp4N~a_h)^_3U#^sW=|0co^Ui1rnwX*330=2R7?|fP6b7S99tWHDR}`~PC>JJ)r9PzRY<1juPUg==aa{uo(e zQ9ZyX^N2cSFVLylSV1Mj*P7zY4;KQ+T_nel0=?-qd0K9v;6S>d@G`8R%iNHx&bujv zl#BT@juj2*EC(Dry2)zrME+Mb!KO^^f0?oEKhxU>${YhYVm`QSgA41Nge|eljJ}O{OdF_r#gz? z$!7F6FH)qOfaU=zp4!L2HF#ItXvYiS5%#kbGzC&wqz0a&xq>K5-$-E0y-S2qAyCvT zRoc>4=@5vT1y5Ch=8x*~DYmN)jwU2y^{U!OCjy>{m?{eRIEOsBZck~z_`;ceIvsuw zVY9WO7C0qwJhz6M-rIm{gzrdTAtula-?^Pry+`LOo;k%vi+x7HmIKp-U)(hj08P}S z@;M{q6ux-4!4g?`?kbP0OY*3l@@ZtX3fO|ZCSj#f3LXh6$Q_LQ$NCscJ~8$22@miY zF~Hpwq(Blm;b%6gSZj7m`SpVbxf1KP=rRDeU zD9aHGSy7eZy-)!rx5E}W+c4^p^Bo%@aGU=Z(&{H9b?wLjLpn4k$J%4$XyFX&bXMV- zbKegw)S(%DVwv!_IM;_3GkzGe{+k%-r>NVq;}7b`1nXClbwTo$_b(K}#*M=VN=BYN zqcJkEaQ(6txErS$#clnW$UY^xMoD`WJ|$Nemj3T9quA;ne*G4swXtwynol6S>T#n1 zm)0NwX#ld7LN_Lf*yQEg-Lv)_T&oNU*J97H1b`hX+mVD4LV4SboKr7*MFnKTy|lG2 zoXWot^(Uvr@^yso_JQW|i{L4+zVa~Gd`*3*LOo{7`WKd_w<5YWM$b4qe@{Emy8Q$9IKSx7g=~$Z zKbP-&yy(1XU&dZ_-;_a^J7=X1R-Jx5Ci=&<1`GYHxgSpsQZ})h!ghbj@KOCyh`G%R zT&@)9^pbGy!E)I5ouA)cCEapf{B(N1M$O&gNaR_?xz5rQB{dDJP~OVNJ)hvuv>W5+ zCaeau6Yt4 zI#%0#=%hz^-e1AZM2asAx66+>(Q|%Zx?en+)%k}`)k^xba%C|7v--A)=|frDmh|e$BVh+ojvPc6UgO#j52A*W4wmg2GhKvDdBJ zEm{5sxZJYzG?&0s|Lu1Km#VgM#m+s6w!7BG+uFE3vU{(M<3!`6g~kT8qvj)8Zue29 zZqg0-{LFi)<^6@;^40diC55Ri3#=^}qBT?Hj@^b=$NQ>r9UF%~_1-1!A5qFYjy;~n zUD%(Uc%{(H)bjvzIHGvu<<0Vkzdsa@ha!4(;;<`%Oe@zrKR#0(+)O@Uzej5R zZ$|b+i5zRJ) z_9t%@Flj|~JUS_*k@kL-W@Cor>AfO}F$KFDZLLF?jGCOPI_#Pswon;E7-W1!&)gge zi&#(iPuctYyf$xs|1q9j-?dc1->L2n)0evKZ;}O5GM~Xq@n<$2B98FH855O^ddtcT zSDKr^UU$fF&Kr8ZY*y!6ZM#>*?@5BtH^x}@+so*@@g}V^<6ZjNrGC4w=pAY+{<(Yy z05EE;-Jo>m(otac(FDk|lMk{C)Rp6HFP%&Tq`o!TFK^-(Lk~(y^Jp2cgM9uO#D_VH zd%@3I=cUnB)w<6K%cG4h#dCDEAH~o=VBH`5=+GbiaIPgW!bt2lQIdQK^0Dz|gg$Fa z``kMZb+ZVqJmrY>1wCi}%2Ta78$Nxq+o?1C$3*X%V&36>s95#zi+A6T3*G4nNEFmR z-1*c%W~;OM?S}8yh2C6E%@uQIEPu@h?W@@Gilvr$`It@K`jtzXgBze9o|>f*@D#Wq zQKuE#JqN^hZV;lD(g}d)2;$T#{f_4%mrznLyxQ_B6xSI8WR*!rYvvRovYC~H&z6XH9o!<{XA`J z29z2=3v%%w`!-REXr@lG2~QT^!${^~r0^ti$N~;5@GGbcF+`Z;76TKJ-VC!QUohs6 zirZeXyxaN1Ook zyT#(#$W-(b7J;sF#7uNaHP&AZ_tvoX-@~yk8i5>1Y^SIoDmLUH4-GmvHQ0Mu>NcxJ z`&XM+Ec=of0L7xWq^iVed;4bxbNj!xCj`1qNcuQMhD4rY4U|7TOU2j9HH;<^$`4iU zJ|tKzygYE32t??*3cuWA9`)i%h&Xx%8O;7Yp=iNdM zm1iB$YPohS)%7(T3gcgb3betFo}DRD%v>v6vlleH%YTEjjxz$@Eoi}+M<)bXb^7eq zz^;u9FbJXcnP7diN$RyRgc)kP*%uI^+fxWu>O{G>IFK4fiZ1ooce6i-U*Uh+SOSxZ zquO{DU2T53(%q{BJc_G`N4(5}6H!FFN!@BUoH&SKO}r-%E<_+mP^Z{dKA(--HE4P+ z_q9}vtHJtnqsMWiXm&JVu^L~~Ub@kgQynJIk%qYc@eHZ&m3^xKH-mzX zWh2Ni0=ZP~!*bJ4{-Hg}IkvMi;0w%;L# zeeHt+gHh{yb%RI2ltP)mA&QQUK9fiw)<3O1$D*JxrC7gO3P6Em6_OxOb{J2Pfcpg@ zW2)6Q?z-|?ba|m$*XDqP2WgNv>$e6>OL@~hEmswIs>T(rk@$TfkQR3#py>Rr&2V(` zrN|^VE>0h7{>1rICR{-!v-x8zg?TllZD$}lod{~?E523ems}JI6~Xh9gY=igH-%sb z0SD__Gy5Pu<*hD^I36ty{Yp&2>Zk=0-fqM&-hh*yw8{H-V|k> zBEd5=twECOo|L>P#Q>GZe_{$Q0AxQ<*#7!T~P8`a_JAiw*|cOlQFh zd{TF`Q60-(*hQyL&2-Q09uiT0=EINA)Jd(}aJ!uauxpf@K8b#1J}pR&3w*$05ub|h zcniU{Q#kR1^Yeb=w`PY@sLsAhbRv%kFFmH;466I&(Vy`(#cqG0W9jH*wt$MnFeWH) zEHBJ+_cYvml+tI#^cMZK|99un#R^IEB7-ZX;WP&80^z?^q5RRAm|f?=4Y;8<+ z4HR8F;R~0V*`c_(t?~c@qQ#=5n?Hfk0x6(WwK}zirR6^;iov0ef||zcj(2Es9bqrAm#80Bf)V6m zJEj3^nW$Thk{ff>q&@cUK{N+h7n~?|bkWJ{^#}2}WQ!c4S7d_(kx?b)vk~N-gb~2# zIitdXa9?vUxv7T(h6gRYo{9rfo`khkHK;O3po#A1%=CzRUigc z?vqMAj>R*;lQvomo+8xoplD$<#o(}d#6nJY=kXRi=t^)Bw;5jvm=mo7Y??HpfN+SXaeM-zsLQi;e$jShiWf_S5n&X&sOEim zeM;-7(c;m#NabTU*%7f4wBsd$3WpX^UH6+qMAr71g6OIV%RA?eu(J6hh?(Hh!-Eg) ztYZ-#LgA?R0~lWjNQ(@qq+Kc*yXR!~$gQ*B%B&)ZR?8o~z1-;W;#mX7M^y*)&h2`6 z{HH_Gt;hV};`U}M|7p)#S27D{|48@remZ@kC*r?XYn2RQcO7)jQ>>9bsEgb(@!hN} zOt!V_w4eL36D5`i^~#U*w?BK#nNQ~nwQJNr{8!J{*bdPNGX7Yt{9hyO`IW%_mh;88 zzh!j!de0;tC_eUJ%L8&lQjhyy;vq_D*HO;jUqLq)hAI)wzdWlRE1h&wom#ZE3$mX6 zkb5sYtmvM56MaBHRDyKKB zSbXU7{3rItUz*-TjVN);9+l=n&)FSHJ#m4vvFdk!q#$qqlky>(|J3G)^C>p-reysZ z_t?A0Ha%wXO>>?#)nVr7ypP++k0a^2ikv@QyxAn>Xl}xxRXyS%=4Myc-@V(zAC*nk zA5wktk$2R+_I3E+Qla|5PIK!&E8;H}Blj(>D&u!Ld2BHn6qp^% z&4s&>8@8o97fjY!8M@H_A#53H_*&J2-al$p)FZa0@SktJTR1;&PRd<&oClM;8-b89 zp5gtg+oP^pVZJ?0km(U#wCdW#UHHwvh0c070J|=)qV-<<^{$>|wmS5jeY-SmFW-Cc z0%XM)>AK|H?MB_GYw(B2-6oEEWyP2TbHmM!p z>FaCi?f)&TBL2>Ed!o>iJx$zT(;dT~ga_vg85;mZx~FT(duxL z()nYVd&7Ng0}q2s-UFQUpk=uO5EhSs@;Bk1U#^cFjWpLJ-npdu{H&42nu24Evy<~O zwlAz|{JlNG{cYI8V&Q-}c|)Q0w9Dstbfsap#l!rzwAU_8qNiGuLxhs8f5}-hg)W2g z)1UkV$Jjr~HNCdc~I$=%&4w$CH&ZSB&j>Ryys@ke1xtYq%``dna5; zpb}GEfHOJlljvMr_Y&fd{&*C!O=7Ws_}}Ujmsz`OE0u7`Cy`ejK00%pt~QZsB|mOpP|xSKkCOR>wc9dwNhHgf8Rj3(XM|d6oprZoaytcbZ_n{Bu)HU zmGh*u##AE=$gF|Pz(`Yh)ryjfZ-5g*Jwd4i+$iyC%Bw)f2s#<9HCas~u!#AEDB0Oc z(mRwmyJ9U=c{l{=T~`PDX6mY7X4h%=y$;qzXviTw1Rn(xHFwGUSFB392m7YXSvBj$ zx<7F#u(3FmrXMlLWvbCm0K{6xh!@PK$PeCst$b~dLoZ)_F#G%1pn9)%;)QU-Oam*z z%_GnLnWABWTlU;asT}_KBISAN!(?|Oh98M^^JPq8VB;F~y*;)A&D+2maMmVo!%6@r z@N>o@VHbR?lgLmpnLTI;f|RPn6t)83CfNzcOBo1*r(z+S-Q6N(Cu7($xE-!$Qj5=L zCBrEm5Kux0F^F9DJ&v*^vV=#Ic}tSL>EesK^W*_~MQ8>8%>aXolD8`8j3AxhipP00?0b zWcL@+ocX+fAwiWS-An<=gEo)m?l`H51JT`laU~yUok*>w2^vVoB6Xfbm4~q4xt#Jr zJuxMR43)cp)GN7<@VKC-GP)WTuwahu2YaW8k+N%nSpHY9W6#tC+}Y~6g2rIrRBFUj zvn*prNf6$2PX0Q7;896?J(3YKi14z!cvHA1SM369LKOW?w{JjcyQw4H*+#ZrV)gGGT z{pH&^0mlv3W-I_9nJjzJ8KW=vjk`wh4LMVCf<`W$1Vnx&Bl1N?7|WB~cJ{G(iDlnz zuo0^^LxC#D&Ob=5Sr-aS|Ik+{JZPm^M(@)ZM=;=*d!{vTweE;I=|yrM+HOqN$Om_aJl%x+RwAK38fV>do>nPNG~$fT+c=K_yl%r6Q=n-SN;aE*uWxj09}ncOP&bJ;LGFzs7iSt^#z)0P6AN4Gjc9bCEx!kGw}_x zqQ>n(3Mkkw3ZX1ShKvHA%Z@tHQ`A2|F(C+iynI zzLT2jEZQQjUe=BnH7Zfbt5sk}`4Rs-$#%^RP^dbvZ5`Xix z28Zc0aDYA7s%(ncdzBy#gD&J~^w*ip`tZwH20xGkiLJ3AiBsdwr=-SMJk=y{72A+# z0h*oRXrm7IFM6EP@ZD~&kL7;tE0p7c?F2LEiAxybz*$EUuQEZ(#E9AAaR|PFf=;3u zedsz$d9)7dcNsy}YP{w<@eB9z+LO)fBw z&sLjrJKOst0V4sFWYLO52eQqXLF;EE_Q;Ggyp$#K_br^)qths~SWgixR+uTtNP}1T zGeRf`8mvv6OaiC@CRkUZJOm6JP0b}jPAqVfzIsi=N*OI=)W=Gi=`2MVZZrZQe%=U* zrN2WGVBa@Tr}>W7QwkA!^OJ|E(f@G0#r$ysD-G^S_V#3XK2?*T0hHt+OrnP{iQV_K zqxwLGkgq_pl#pg?QOB2(hw`^8t#-_z;cM`vK+wDwTADi!^E@?2sr%7I(UDs7FWoySBR?`=v4op>Z9TLwe|9j9rwQD zS@~b?5$&U5!-Syc67xqu;O>1|%;JmoT8CEt6pnV}K8XM+W#c|OW5@2Nh%3pVDBLe} zZBDNnu10(8vkM^Go!8dDjy=8g8FXM5d||wGAy+ot1k^H`VGcE_~E6)ZL-Nz zRay%M7B{f^O9Eh^rm%~oPO&k^Sqc&!G(xd3?LJP-K}K73Bvm1(L6-+}=tN;5$fF9I zK%9e#dMTKUN~`QD1zL)(J|?_}#ahnNT!mMgvA2YKK{OW&F2b@GsrnINJ;`?Dy=Wgr zGl6tjySr~@0JmUwaYXDJUV~AsDLC^LM;8mkZE~DcBuxA6L z{DL8YgvD~DbigR43VSP9>=Z2yc%6X!RUrr_7zIL+Wa^~Up!8;7UX}2i(?OpIdM^77 znf?KvF@J>(XwwbM;TaTPI7|(s3OULl1-M{17HifCwrwu&6b2YYd`#XapJ2eK39H6Z z+fbE3rhK8`Gt8+1_7~mHapMl1c)Hk?=iAmgLTCl9wB;s*EfA)TU8z+8<{wB z>RAMTxUjudg@`9fRoS81UVDVd85fMAcf$xZoJqDvN=%?#g;XD5GJFFIO{<9MTUA%Vk*?a-VNTH7r$6yPlmc%?7Qz%ln zgCJ%lYMs*$*jRMh29kV_YO!xsac=Quu~9Of5gMAFdv)f zn|b{LtHmD;iCYXznQ=70EXKF<+F7Ul?z^;>D*mQ|Ic`d~y&9f^ruqJTHZRAuTxL+m zcYxDsw#iddI96b`017G}bN${F2nEKIQ$PV-OTz1FBSD3v0ij^~>cBkD5D#=I5b%_gf~tccgU!@LyjIfXqdDW-m;DsV4SP8t!NX_fRo>oE-Neo!b7iq<>sZz!`h&G)Cn& z%)tRsyq->TRwF?hoMau3dObuGmIKAU+OY-lf>a1G-We? z8aa^a21M+JotW#AOZo!yN4ED#=QdTyRf5<22E9rJ=pQn0pwd+XZ+U27jxn7a8$od% zr4aoW!>TNOt88CM5fO-_=Y}3eaP^h2%A8Yy!6|vsB019Nbt00 znen7800q(~Mix?%1#F<819eu(Iw>O&et}{yMkcd$`*Ro|ty3hwwpqFZ+h$NC4o;k} z3T~j6Wr=a!|H-4N;Jx96Cvlx;nRFt$0U~btU?K%s0hMpl;1U6j3B+mS9Aj4RI`Mcg zlPvRcIxZfjG<}j z){6O2dwzpB%JdK~ZP>-2J7Y14sOa+DM+F^Nx0Nc5PEreyq9-uFGudSe1%2~47N^wG z7m(LJ0|r5fb-e9te!b) zJbKBmWMb{c$&QSP>4TGLtH1ZwHs~Fnyaxweb{0bWnMkQ%)Q*xXClxsrC(RGFw4hL*lf{Gexf{9GY$v3Xo z53gTZg%^7QcXsNEOXqjE?}{9J`9mrqgLrAPxn=8UrcKH`?zAgzFNkudCw()=!0bSwf}(KZ835WI0HLi zLil79YC-LnNTh`o?isIuk2(qhiLr(KwTO*Nzp+8cyu`|<7=G*}yg!DGa0$-x6?UC_ zD?L6iHP2EJJ$?Sre{nB`5Yp^5gn>*=Rh?Bj*Z&yVcUZhZrCWQlRBm;=Ti}BB-LWsHS=XE>02h5Mg9lXUl|-RUOm3W z!7HkmS~2se$|CZt5W`{NB5$icF*WDsh1A-rmFz0{@7RF)YWM%Ya%1Ix znofcod3EK4e{5YJWf|;Lj(5F!CT5`S?8Bn8Tf!vHz0EOy)%_wP>gI1ve7!1EX*<@r zYtZ_9&LG!-4Eh#KI_abwt(*Dj05;NBQB{0LdXj0APmHB=g=X*F`bKk2 ez&_3$| z6E*6Afn#aXyEGHKw8!-f80DR^c>p8{VC3s~Nwpp*KTffDy#j*yBv-3fGQ-3ks^ki8 znrUX1wBQ;UMGjgqm0hn2))1)Hitzb)LgqxhL3w(N>JfUuqDy=8hJq6VOwTX)AHi?d z%zDoo--ARyq9Ap={GY`iU#2NhC2n#bWt{sHS;kOtN^H?SS?w&{Zq>czzoOBLzfa7H zUc1@ve0_LeYt4%CTPE>&wqwp(NcQSSOSlA}`~Xus+e>=@E@AzuJ0%bIBpT_dCE4vf z`6yw7_;Vc#{vjOA2xZUDS43g4G<_JG^8)+lFYajFHCDRYiF>ApV>=t|Sydj1UxH&c zEL!Sw1_-A`2E)d6MR(&$gZD8$k^B2l5g+0ahu)0n2C|SmwwE49U-IiJEWe`WeTkcv z;Ty(reJqY5RcV-B@n=qHG2}Xvx7pj3=`fnnZyYCv$<>ZX!QyYUC*k@ zRS-cokR7JhryR>|zgIYabp~s-Gg_zIglP~ALT}9jwe6h3xLjnW*u;Z>(&>0l918=I zV_GJyLBNT>YoT9dumQkp`pi9!#fU@cEKUWTWtB9ch@|2vQVH0+_c(K#4obn2Q4?O~ zjJDQ{N2I$;Z+I?@ z1PlFFnQW;L;~Ho|Ng_hiVoH4B{c%%h?w8jV#AI4-63HIpmyI={;NwpS#+6N^jXMR# zhPfON$PF@jhfL}Fhu_u>+F7i;0B7UxiMcp&pM+3m1IH)yz#r^{=SsJ70Qhc>0+^~e zp^JUM%;^=!uCUlba31O4JmRZBKL$|~pxXJ{;fn*r0U%~4 zHjoND_JvdkQNrUtIYK>EI|$eL3LxXUBta5lA~;PhzMlQzy$k~w@4JGZLE zuo^{j5u`aQ%eN4_1YDmCFa;Zv(M-z?sclf|q!|{7Pl#ZI5)Ceo%+Btf86e|H_*y!h z;%V*S1j2kI4X-3veUR-!;o=$xs2TzunX+bh9GEVI3>3P?wy>e`v8Au+-$qmr!-FcV zi+}}Cv;h6LP+}hb}xQ%HB@oEV))6T2+gf!{YY8@J2E2bsm2=2i2a`E>IdsY^RwXn<-n-}Pi-^YDy`EF;QTq%~CWJ5ijC!j)s-MV#`PoovPk#}MQ9 zCk7sd%psv^tsx)kQ{cvnuyImMZcRLJq6gN?Sd*i5Q`(=; zR?O$PLAi(#wZ`3ny~a679#bCf7%`AhUpsyXUMAf*Jg!B|z&5l<-{O<9P_fPZFmCB5 z1h}7L-ML%6u95>CbgFvBt;-^CVhm^yNPTsqvWcfZcA}jEr*(1y&NlU7!UT_xi{8f<{>F_H< zO4__)&Vkiy&QTB}D6tS3m_sU1Sg8aQ#xILN=mtVWm5G5@b*XqpFtf9pEX}5`h!=fD z`537=!7Pn{uZKxyDgBR)IfC=r(=gN`Lkzelzwp&slzS0>u!TuOiat)CBooM>K|c$$ zBnU|z2>jaIcv2+BwVj7*wXoI6PyvUacC)&?y8E|V@#=l2)OeAB0F9&C*mo?Pi^A=u@97oy9Y!@U}qM)C+CSE$C^ z4MQ_;I#3s>YV9LrxWMfss0Wu8cS-=156UUKwRcb1xE4E_YHBQ%yN~RQc0!w{hti9- zWV@BO(>PI4ziB;_Pcurs+#F&R8H!jIQDc1ⅈD+8&b)((iczYqzfVNSIqPg)QL}T zRTAN4Mf_=EbupNa<`2!Np4v_&EgyP9JxV>!tQ;?HUA-n*qG|4%@|mLeJQ}@h;K#Ag zt;?(|(w?nr`GCBQyE%BmdS9k(f>o#vCzN)j=Shep(f-Y+IC102hqUA2D{n7VvsXar zmkiYtRLtGi1BMvyex+@SZTA4oq zD<0yVCqUUqpD^27E5Fb;ci-{6E_7KZ*;R|3JlmOsOj5iO+YmX~krwC><`fqMB z3Gq>S8-N+u$&N9Jfi%JRmdipPlzO-ut|U7)5dReg|UsRQaO(gx<&ia>%jg$XIJm}{IKpb>lfubC0E zBXHY@)uW=B3GpM@;=vpJKjsJ)|IWI+Zy)(?pYS>5&$Nmvmngql{j#^6xq+qpXA^hw z1Nuaw(5d;j52fUug+F_E`(jK)Z$e+%ft$z;8)?K{q4nR#TVKw4A`9Sgh8XUJ!>87t zIbZnv0AP||TL~e&aybEXF4g}~ zV7jpGu-r2$kG@id>^FYziVVVcyg8|~2eqBniAgK3efm+GpMCaTUz_e$mA?o7{(KeR z)Yr_Ag%RHl9GJ>iZJtR*lRQ5kRzEN95cNIV^4$JcKweXz|l1nJ;LWV-?vAx0K~_xTge*+q)tVifyKKiHz4B z1b#2hrRHIUxf6ZISzFk4(MwG8pC_G|=OgRx{TH|H4x4bg=zi=W@iOam0!8`xf1{1O zAuGJExa=G`f!kg04Q;=X(bPCGboA8E73(`|>tV+F^y|65M_1Xdc2WDpntqhjxY@snF1r;lmLJ@_+*v#pMt+xJZua?toqtQ7p)%1~iD9jt?H#<|Y9X z%5Jb8p!DwPJUxD6+Z!P44I}3Cv`X^_vUZPshem`+t#QN;(l*AHvf{gpjc%cbkjKIh z#`xs$%&y~_;_;;Eg|kdXt^{q!sp6hc_&qr7TG*b+DT?^Fi8ZS}>YOg2E;C!zLrwQ5DNgaBnO#VhM=G^_{LES| zfTTbNraCzrez}%|%o6pt4%ct$h=y;G0;Ge|2M%y-7!uVQ+XG?+KYo(M~31h|Y#8Dd7pW`7ohb!D;D)TzkiaqBs!TL$r)tT=z~F|Ob33a?w+6<8U# zjVW|aso_xoX@~}hmPaLdU_*)z>m7nODDRdEaed5KRJ*!jMUijs}bz(sChX55% zT9T)g&nI3^LIXOGtHECCsRRw;K=2cc5^|^vrW{Gxc6Ki2Y8ccq=OO;RTWtsH?sdxc zeZR^VYH~UCK8+0yc@`nJC*m+qov-#5jrchFxRq}Ux;S9JRXKKD8`Z;@b6$HNV}7jW zJYM2gwl5b_U^ZIiIVM#k?})@@U0cSkE7qTn=*3X3$Ay0`(O&%PxGQ0s>h@>D_Rn_( zL;>OI&nyy4iQUg*8SdPbE?)m|J&gWu z@2Bnyck;Y%n}&0Mnum5{+qbO4eA)M`l8{d}f?Uo-Nbfo5XCF5elPOOteI9o^1gIl` zP$62J0+y4U3hvhONjo=vlkF;Rx8Ea-MVq{i{q$sO#lyap5wch2ETy|`@80Ihkmn?3 zdwINJTB4XN%Zigt=rZH(C?}3kWucnr&YQp6riSEN9KlktEu4rR+;xQbJ#okVR0r)6 z{c*P$UfTWKhr|?&Ox7;I?;v|?75*Y0zw+N#{lAa*%e1nNX)kE}+eJs9{*R-xaBK2y zps+!Q(jZ8KbV^G|2qNGB=^EYLjnW;`NH+`^AYGFdkd7(cHM$0av2VZcKN#08-aYSg z&bjYQ*u*!YqO7F5%*E@6Rwg9OO#H3J#aK~tT2D(I4X@zTBSh6f>^0=mm<{|au^$k7 zZ6_@1vyDK6JZfN#yyZine()h5aWOMKVbBZ#3oaKQ$Vl0K91JpDAtg+TyF7z1Zo8-( zo))SFk207lVDTNeAL?#wh+kUDwkt z&OL&cwhvWnjXr!hDMq>QtsPBms`>?m7<;p{c{F^N#qF%0rS-aq9U3^&SNK#qd>cbF z1wK6{FhcoQ+MuBN!5w`H&%3JYmU^*sbniQ(xMlceJ3_~QY!Uh{%m%Aw0FiP!dq4sX zvp=v?AkZ;EV+5KiOsfl8A~?6sxJU>=@vTn8YQWS*EzrzJ2fS&5JUH+5etaWpG4||8 z$Z@$}rjjxKhsBoZ<`}F~mMfI4&TDR1=d_yJGH}JD1CnWD%`hUT@(hd8=v7OG%B|Qxl;`jiWr6a>h4Gn6L9yrA?*Xus~oYxprLJtR~fkcJH z9N9M1+uB2y zb4rgm?E)USA=emMTHoXRtC`<1biG(Gyj6`=;oF(8U0KbOQ{4TPUZ_zN+JA6Pfm@Yf zYAc{Lzqp_3oB?nM*+$9|FLbOGCZTIT>HE#GI`%M^GkMSw^lUx)QVCoIFCJ;}((@tx@AA%yRi z`3>W+H$WH;kzYPhhAni~TAEbmWj@vqEGg$ZwqF#BjX80h$tmi#W!@VwUcNU0!d9wF z0UzS7eKOT_H~7?5;|7Tr zHIL6}?4jMb^$Zay`4AUzKXI&rB{5oj6bX1&o{8ZQko zq?IY_(lvpgm&dc(L06zf%mKtS-`L;JX0d8ti8`*`P(QyvQos3@K=~=f=U$|j4p-Wl zG`2|^XM-7FG-+U9x)4y1eZ9NeM zM@Z{tfQ^&}%sZCQQVuK6wK|ANmisC);K0i#wI8^%CtjE~T?j=f!HVDQbca(`$It&q z`?6Q4%C>K*zCStYYn3_V%~-KP6}bqHdBL<{#+x0xb$&vea=wpU`Z4{MJZ`p#)1L$h zg;N3UZ|$H(UOtE&XaEy51Vqb%?#k5)&%|&LC%z<+OBLaD8;*Qy<4wC)ZXei{%zR=X zKFars_mpl6GY9phGD|pzSngl7Y_T!X`HpQfIt=bMO7{exUW3VsgMe3hVsVM4Z4*Y# zPoH}T_q0bxs*eQ&V!?YD!j#%l3+q0e_arPF@GGl<_+%{`&vBfTfe}4kGt-;`cLHeDJS25Cjbmz~uf}?-)gQ%33cOTTUQgldutcyMc zdt1xeYdepg|Wdz?m13$O--X2IP7J%-#708S!9v837@Leh{ zR9EvBZ&cbnd-H-7wyC8M`_>521{4?9L{1drR5#xT9Pt|nQ!{yDND>Lx+X>fCL` zb9(w3LgoB^tP4P)>ekjrY;z^qE><(2lb`)&$N+Ia23-tAiwh z;|Hdo+&!=3Z35Etc$d-cRQm6~iEx6Gi~+zGOzlwGQ)Cahe=cYbXz7ez=XFsKz;-j& zKr6q?L>o4n4LrV^@Z)9hlC#GbQpcM6UDM|j2FPsB|9FKV!jtL?gx>5HkHY`96<-Qi zIGSM%SbQk-Z!;v#AOJO2C`RMQ(~h}}ktuC1sO(%cFDHip&fR;j*5*ix2YFQkZ?);v zO*K`)xmKma&t?iWz+x7CEp#6oQcn-lyBCUiD7AfZ5|^E8okaa)Vvc)p+}fvCIn5E%{%AM;&)5sW)~A?}kDaXDY@ zogBT3XXzXC>@2xcS*=Fk|FHinW9q2YJZN%sxp!&AE)5IJSMAv*`{nw^g)E3#>!dd# z@>&DAAAes{?;8r$M}QNL=Pfup^7K%iQ+9R){u5Ru$p0ZH-=Gy^ z@YhgvHx4OXNj>;y-08YXrEB0VL{|%Vq*y+9wNs+LL1(q%Ou7nX;XKPA{VQRJYZHop z@{|7bfC?lw%r-oq$tE3QG6n}$G$@P?`lQ}KJn z<9Vfia34j}{-9)yXf=xuu1rGV(aavVLj8J-@|J<}J~L-sI?0u5VqR{a4rreEbUL61 zWl}H@>tbkOO0azg_14HrdT8-j@#lgVaV*-fQ29LFcqoW8(P?nEVcIa##dtYAjk%Q# zRIN#*gjZPdx$mg4D?nf4?-(_UJR^4>Kb03hSci?s;3e=8a}%am(s9t*``;_A#^c`B=T%Dk$bd_Z5^WDPLyfTKTGRH zJ_C1SfFiUv13XBfkV{xzo87f#(Gne!le0&f*B_Iixm3N6f+yT0>$mYL2q6 z`BymySuHFsXE+wDb*W+OoGb_(=c!Bax{n-6LTm4WfwiY0M6p^R_})zEn~5H|7mS#J zIu9!O=G4>y3xeX$Kzv)vi|DL#y;AA*uGTa4U1INy^Tl}$!4?0}#t@U#`vNSlXT6LZ;; z&e)FE32u&giLWTz9&(X%Wq}C2i3+YlV=b)E)57jpeM~ea>0AnAk#Q&Wc;Dv*3-8!L z8q6YV=s~(TYySbi2hsf?uutqg+Mm{ZI3M4eAm`$R#0a|FLG>JyqN~wJeRSco;~03I zzTAQazjQG!zj28Ne}RtOG}V|v52PdEs!lhtTh`=n7?#rM*5lLT zdIx`Zf6^Prqq;w)O&{>#0j+?t!05Kpze>BWu*@|-X-b$)65dXx!E>A23< zplA_?DW$@0-gmRg;8N3yZHGL>#qgJ(V=yiyH!W@u2cB$8DsZS7fbG@ z{nMUa=~HUi5>F04)(XIxyy+GnKnsxm5U#gP;KGI>aEjlAIrW+4_VF9fTANeOFE{`9 zQSpA^c`MF|s5%oEunN4;gfxJ{G#&K7UKW^Sf`Sa(KB;2AqvyZY?S3YRZ)vYltzeL? zz3$1bbvP9A3Z2=0qY)-7)=7BQpAMSOJPI{iIJz;mJimf4ib|b&F$!kdN4R;-htV_F zQZ0fA(#x9>R&(+9U;es&s1)eNz7oJJ+UV(QALR4#Y6?&1MD)o^Iwq_Ye<#v7k9hWJ zyPRLMdtH-@$@uZaAJqg?| zbJ48TP^M6}3=-GZ`rf$A8*&LD5zI;^o@=bo;&}rIMUoLhxM@{3?X?LYCgg?1TQ?o) z>O~BG7MT)9HjA!rPdraLr&+l=Kh&WJeILpsELQ94C0P7u79RWE8o*`~Yk!$l$69Hd zJY`?I4x#X4dP$*pO6F`o_h9`$dwT?gdqz1=Q^$aNr?ixJ`ZAz9K}(cw36PcEIJK>= zm2G6{FWPZ+q6&-B0^dn`UHAnzrhil7br0m*73hEJ`YYyT9iZ+ri-v`~T;+g;GWaZe z`)t4U*1!#mEQT+iG;E)CfbUA_;ay^RknHe>eS-9-MPKh*FgLBNwPb=W?_^|LH<+mG z#XekA-mmuM(jX}bSNy&8jf2za{|Y!Zj@%!&7*M@&VbP76(cQ5O(3b?WDrii|nHtRP zJ)K_vk>ic?mUimwXJf)5p;6KTF4D`S&ExXVNi<_vdJz+x6{Cr2lP#X1?bGg=>V>_+&q`gWjmjTnqCS4d>Ej~! z2`(F?mn&$ zIWqNYbU383=X+YfdbJna1>P<1Ffm6J`~quag6a&K-8=b^K)$-iW1micieU;J9?x{j z6%i1$E1$lyL4HgZs|8rL)}6MIE1z?(v=)GWllkKteEd(T zr2C^?)y00n;$y3SKsDFd#3bc>z9aRuuwgNW;WCAfo8;`TrmxiLPZ)R=QT&0>9`YyW zTBNIW$WvMr0yG70=gnx7zmB_}w_HfUv8RzP=HX5oi96e2X}-Kc%=9{~@PK}vefYaF zj(EgriZlLW(x`0`o-XB5;dgQwJmdDL*-)h|K*j2v>3 z^wGC7Qj+CeUAH5JMVk`ii?e^Z)UZJ=trt)z+*qON)XO zO>8w|&{7~qb7{>x<*+Ajb%!|4qmNGNXx8^+!j^pbtd$&2Hkxp*-i8Lok*Nxe)`qWi%+M)$Mw=+H!Kd~rwqxO6off5FA)=Z4TsbM)%(5t>ptJ3!CkoE(oM zi7{s>TYvKZ?d6>4ao)3{|4$6Yf$+3%sHQs&B@wJ?yH% zyXid3)8E4lhSRjCdGUOSXCO-=1gXuG+2UszUyH=c5*NNVzbU8E#vLbqw`lrb&XmQ; z@)|e#zqC>aEg+H`R4>%BCC3f_%-M(nBzhTwDveJxhU%+0wLtsyY=*7chtfRQFRxts zrmx~%pd1dV2$?Gx0*{(+4!~mP&KO1Pn7azb$greGIq6H2D^A<-cH}<)isFSR_ZKlR zxFxQ%i8Vv-=+6_3?LPl?j!rsHZ9_It`8&Ul%PqMeMW^FJ*!q`7a+PW?9vsjY$^;(C zSfMuhsp&Vs!JqF!JCnPCZ!$y-TL5_1I(OVMGBV`*x7jVJ`Hu4D~iS^Jp%Xl^D(OzGpWZ`fC~Bq~|; zznycD`FlNeYJ7A8^|jEHT^MatDq@IPg|m5`?%rp0!FpI*yLq^H-+zwW8yoHiobz0Q z(+c31lrTlXapHM!dT>WX>Wtyd<-I3(?2TpleL*!rauVLx-5-%GbEQN9cPIJrV1)X{ zR3#U6%z>KWpGQGv!ncPd7|N)NS=r2WhoQdAV1J7k3Cum0?mT4Q?CuFp>f^1Am4_?Gpc$5QYfKpcMT>dwtd`GaodU5xA#ifMTxJ_o`la%X$8 z)^79DD%gtLF!3a)B^#x}@eM~6dkuu+&>+QqG}!RT`jaQPWwJRGnE$O~4Jl#TGf+iO zBpjtOQ`dRgS!H2`>egiPZ$LDdfKRF57e{Z11* zMT-H700in@1l?`=tBfkubY%=`(3r=oYd#XZ%XYHU-a+Izaiq^A}&d zyAd~B3aKeYzwrcI zi>jn-!?_@s&p`S=8QrM*qtqv4ebyx(Tpk+Bw6~7c7V{F}Y@NWEuiuQR*G@rdoDdzs zK*W|n8pmivf~~X!g+}+_9G8%~GEtVkt&?Q&Ge;zXa*?<6`amMNAmly-9RUK+IbCtU zeVa#qVh8`)%kJOmy=~Aeg)Z84^QAs)PMgy}(O_TEEtx=Bq~l`JdgKWgIgAZHO@yXj z)V|wN>77faf5iy*fbsMy|B=P-ml0<%2v)m6xRK)9^gqL(hB%3?HEjECaeEcMb0WsG z3>1j$%GbTZYc>f*q6ilOgKq&9{RX9Y%-c+PB}=WohQFgDh#W?{HTJ^<-V{nQ|3jHE-$;kwI&^%UPe2C`oX!#AOm!y}t!Svkkl~at9_zpTI9zMTf9pqB2m}KiF zZDU}PkFN>)mz!2eC_ALNN@x7^a|Y_A=D1=C^X`yihtsb``#*jmhObGNnq))N26|s% zDI41GjCAC;#440WAW9J`!GWxUd?8b{<|nw>4D`a22{J~du1;t)I1(8ziwG;>m4yeI)qTIJ|5laNCsI{fg6hS6tz$T7 zLMibi(k}0ONkX4w`8x8Qkt*V=Xbw=zW7MJ4n0@0tPsL}fDi(9ZeH#5CI=B~+~xQ_{ATp- z=Lzr0Zy$iHG6++OdhI8%jq_|iD$)@f9NJ8LqE<$_A@Q~TDHLrAX6mj@8C*R7baA_V zh5PC-azvrf@+**UVFjygOb@@dm4-qF7&-A#-^x1dSw}vja_W6efg_1CH5J4C0&r=L zC-W$wK*x(_PfZ#(K02IJTRl=uG(*FJghVFb{uG4utb-r1J+ zb-(iCI!xRx8E#=h-Q;SRjMrx$2$Oe5Sn2bM!n6Y4n&FA`A9SClWW?)vt{~iT1lKX#Y6)^cJL!bdq^+aI3it8SGpAb9y0yA-XZ4Y^}(~Z z8@Kf)G%z6#Nou6%-IZocd;p9PM+NYGKnlj7%@G$Lk8IA``Fp^avyeU;$V<$__^hUi z^&_AS6Na0Em@=K#`$W~pa(_Qa>clpx(wYhnPQO5zFinR_%N<3bAEiH{FSlngKCGNU zH+^`W&_6=bjyBrb^FgeufH^>6RpDbq*_0?YhZWrds|TKZ=K5VoZ9N!RQ4#o>)qM?k zb)_nfA@jQY{Vm)EBk-d;f6V;|3`y4j$_imy&QG@e$ZD^DN*y(hWFjwMn|Fz*p?x2A z=l=DymF{L|`vxg%mt%MHTAU)E=HYLygbT$-eEzo6=#<&)xHqim`?=IWcDrR*;zY_eh#jlvhCK?`o!_oDAg7 z)g8aAVrY1cT9=og(5T8TCiIY0fYY#i`y;Lp7G}#n#Ome793Y1B)hg2$Uc2VZdK!Tz zX*mS#F2L=Zd;|s=d#d5t7M(`DMOoxOA!|_*zF{Xa3Y~n4=G4ned3fz=02Ydyq~KrD zd+nb|&9}Af0=IIaA-(jvI(-Q!4AGM8%m)#*H9dqsYDwPkL#N0)HfJ4tH5|J<5YN4j z98S!tguKnGog*$L*0nOh#*Ez37UQXlAdLv)c8dWE2*IsyLPhd>k0EXE2;dd-CZ10s z=yE{WOM>f4*Flr_tgXiLv)nM|uXP8iSG)x~s3i=MtLwj(Mfe0VzuIG_8_4Syxe3b; z>+4V6)~_ayS;wNz!Xilu8VqK|fZ_h>l=BB(RVU@jSX?_M1c6(o z8Yf2ROHF&=d9jb>{tF^*7XUE0Bu-?1tyP7}=1<~n&0V@lxp+W{!vemSI6;77Gir)8 zdvDGxIBw#BM#A&2nakmQ<shvH+n5`=>F&FM5;4j%j z7jtk!M=)Z3E!2GP=G42E!K~P8#_M71iBL%D*8ZO{lqY+mV-GMexr44H0pgC+>m&h> zNgc}^=#*mAEm#zIIiXAZSjPQ#7=rH;E5Dja1*-M6{Z%Zr`5^XEcKvRGPKYDu**%Q- zE8Vz$Tms*tr*O6Z^)=!eUG60^YAtwt z%irCpHhqhVcOzOc>6W;TZ9O-*3Uc8&O^^5Nn$WcV)6>AHLu$zi``!Oo4f6aoi^UHk z6$z8y%xvYW5H$(q)AdGokJyTvtw7KGTfIim)4#SKcZLo-$y$6T1yK|1O68<^5;_j( zgBl(?`k)r^U-{l8a78i`?VLxCOkvk!&GEHR2wFw_?mQn1Z45-gp^FOu2x^`OBYpD< z8U02XeFp1+cAC@}d+qD7@3L6vyRX%lOmwUCDZIe3-Q^bGLfs#Ga0j8w4(E}i+9GUR6^#osD^@Mzlv3~*Im<2u8W!S zD=XGc3PI=mH#5XQ2Oj07H+X1csl4VaN`AOe`1XL-+HLrH?(aPysO4S8a+n%cQ~q3tZX5-!J=LJgUP?}QG z(Egnj1T+MVA5gw_poD2%6j@V?;c<5`{*zJtjqUgXiT%EJWgy;k-SN2wJxM6<&CPC~ z%_&c*sC~WGT0*X=$J6%fC&>bmWDWUsQNFfce^ZzLwLI&3wENjgmC|vNUuB`- zLC^z7bUrH)rK3ockdRbwOV&7@$#M>dAM$5*udL*8Xw_UQjLEir0IA+mU&{*{kc?iF z84KliRDWJTZvn#SXE=V6iP@MAC97xB`DY9G0ND7~qgzzEt*< z#8+$&xlFxpZ*66*``0u|ZCy8DS=T5qA;O&;p3w=nyX;kB&0rPr%ycI)i;>B79)n=JM?^Dr{=M0Y%%yAyviy~4q#F>bdnqB7^CcdZEa&R|nn8w$a4)LffJ~y66Q~&@=Bt|K&It;5OW6j)WxU%W^v{{GprFJx3ICp?W$1c-k~r zN{PDt_I&U0yC4Gl?C3h_pIYG>F76kP^PD#L!OKGVV}rLp$WUKO=*Hj8my#zoI?J2o z-bgF<{C$+#p6vqN!LL~7VVJUnyP&&ZWB+Uao+I?TF7OHx6)8&x-(9ubc_5K4Xu>ZP z=8TLNmd`m*IlX0Eui%~7jGfdOQk_xgLECiQe*O9)k9`|)biE$sSb!`Nb)miVn7N+A zJuD@nmrM5x8Epuz2|%6j;kx=Rq>db3k*sYv_rBb6Jb0vOz1Iqkz1*%NwbhlQy?aJC z;P-BEs(8h$+uBSK=ot0*mzm@%e|BiY%~2Ua7WJ+aHUUQawe1^F1-wzBy>ny-eqYvF zG2xFaCAM1@oklxD#jzkhkT#rQ@>b~)P?Q2+J81?G?VJF zwSh&q0!4-mKG6M9qBT1l$V!}23;UKw{TFWxD!9U zzW%O`P=VVd=~9kBmk5(ug)_DloOs+RzMiD-)Q8&i zmufgC9(?dN?$QR1TGoL3AolOy4W7A16@$~R&qQ6RI=3Dmk6bJ>%Wcu~hc1zKKbEH! zrk0@>A;IP2Yqy5}H11hDUj&v-4lau4lASHR_le5UW z1q(kec#=s{_`>7EPwkLQFB84SVavB3xxv8sqI1uRzFDGmx5Klk7%AG$lcMX^|MTJKPIHlXH+bX!D+3V-{b%^^#G%YbfTF5M}wvHq)DuYfu!7!UU7>p z)+4<+ySJ!eKLqLD-zjK9>ThS?>p(3U%nQpQzk4XV`q#qbo~&x3mn;Q2JSM%A+L`-~ znh3aUgAXg32ECUIM8Yo9`$4!<;TRun-Gt!|#Ho&I9Lg_(+W2B*cm?ot{TF1GS8`S*Fki+6g0L^SNCj9W%x1nSzJFLrvpIUds=8NpbJl=aS*O}?3qN#CcSAl-L5 z87M<+p0%*2oG8$kPYhiI8GUFK-+KDyOZPpAin5{ zGrSvr3KhaOn!9BR1G6^*5i? zM^nD$Px<-02yD7(8A->p7-oJpwy6GF%40_Qu}(Pz{D}*!i*{H^=p4I)ffSvO{c`wY zb0%y~ElVLdjO0Fc;3#5K8B|58CTz*2T&+f54g=3ddq-LBj(6kGp5p*4bXf0*leJMs znf_(*I-6~P@>(nA$$Rzn>p1fO>)4j#bqx##7Yp}B+f}9d>IId-g*t5W=N_F4Yk}Bp zm8?2vNp4?4zVT4NJCt3=aZfMj38&<;;)v3;9@`rAo%DvXeZ$Z{r4M$2O22rqKAMt$u9a z;;$OR82_ehg#YJD1jBXjCr|zRz^UlKn9d#JxB7Zk5Qw}>3uz^b={^v7SKb71(rl1#mzcQS~5J0u!GFyj}*GD zx0y+av;R23wQa+J8hWqXUcc*)b~Xtm2|eo*To%&yU7N({j1&{JWGeksAi7MRtwM9uiYlAD}5%BjjB1j zojuA(qTy^43yWW0@1Ne#w>ONiNDSsywTODEo*sTd zGpKu>fA^P(dtmkT>tep)F|H~m7OS6)47S7OD%9usln|vuG;D_nWn3B+bDN7<-#gzPxKRwMry^g%w)>Wo6E=G*#u8^S1G?^fK7Tfp@Av z8{`(W;&TFm=-geMOJhi17kH*1!?Ecn_e_=kzJB|{ygj22Qwb+<)OgtUEbC&={PK%z z>Mw~CyiZ-k>DP1wJZt;nrW?aFb7`C4n;Q5$*fcXY^vd>|)s7~=8l_|dY> zSvZ`NYyepR&NsN(%&&v2!n*I9U8f_>rR!oMrBI^*SYtIxlxv=x*rz=PtkAzKQPvf* zX}J~`nQwSjgCS8CgS>PFMX^1fy24jxN_#0|*MR2xlBfhq&4966=hsFqky^JdhLjYk^Pj9fdhy=z5=vLUamKHp<|MoiuIizJ!u7X=%?c0OG<*>uP zdx{`y5!CT|`{tUS=`gGHli@lwubXPsKeEn#^HqIMnfNkKM@Vd@ zGd_OVisdPHI*u4fvmI!=k+@?Q;JRl$c@SYEA5fnF0PesA9^TXo7#Q^K-NCe<=~H1H zBLetC-`?cE|EC@4E9XN@{E)u{S+iyV0XMcPsLIvfYaSZT1rLzZUxzy2Kj(?1q(QDG z{x$`T|JkGuzwNskM}`uzEA`F2Y#eHly4-NB9pg`bzhN-T^V>EkbK--6;&apy=^2TP z$GawsfLRzo!zO(?|q(oGO62am2No zg*gKxT=uhf(Jj(&@qAWt^B+(Lcz90Jqrp7N}eS zO3145l-&hy{$n8~hjhZ^T#HUl;C=L4v-XLtzekDM`D=y@U4w^=RKOZ(g%;)(PKiyV zw4VjD^FEw;+H%gz$Vv{5%f1%dTcyQ`ixDDmPtJcSXiYm29yiZNb}mV|uh%%1@J=MZ zd2DF=0qB(<_XW5uqH3M4=OOlW_#4tmaZ(0oHU6hYaIL5JmB~VXNS)y+1}k=lf2}NW z`#42()yN5RfITWV(cSjL9?+u-b0`Y9Bm4TUIahW}rch3`X(5}8$-+}OIh5!#Y)5fS z`8Mc#z;^nhCQgz92`Jb(>5%DwxBn+z`bI2Y&xHabhU9v_a%8{R^1IAKytcM{b6-c| z{&x5VwL*l#YxD;;&gS`^iBiIenQYlK>Fnx>yGXj0j}H8s`t~5cfEgqNplh(0Cq?>L z6VsIY(5%Pn4`nx>`2d!-Qy6NMcfOAk$EV1AmrTJ}DR>`+p84;#Nn92V5p!p$9t^5s zK_V3PG`v&!8~f=T&?NXoB7G;S-5Ioak<8WWOR2erjy}#w!G=mJ+d#{036Xfj>yCRI z?}g%o!ND0MzMrk4i!KOh6hs^kL4=-)a2|1V85>+>0FqGs_iH}27F-!c12gOX{*1QR zl*c;gBf0Jgu4-T)%_fO}F*C}gco=2~Hv1@~90%L=BGaC_F3^y~69;2>lns zpYbUi!&2lxMmB7+`GAW`W?D$KNCnn1<*L?yE+NxNBMjfNo6Xo0!)=6&><(L~Fhhbs0-Y#N%^t?eBHt~WM4#e{B4|Wj$?iY3< zuw(_58b91Q1Xm@82xjLR?}Q#>8EREM`Tb%=NQEx~Xo>aob1DV)#;RlVjht>|zr|VA zq4J-0I)jReHD@llep@F`;MmxFA3*9swImbm$kTP8tgdhw-{LYIcob6#7~rPB;UIyi zyZRL;$y?v_=h7kHxBn#wV1v##5Zn|OX2V4b6F=$9^>owPZ|;4;nK*x8BCfu=drJ~G zzI&7=TIN5c{V(Jlmx^Bqp#OZck^5=|LFop2Q%HmlF;22BX*1!}V)+0y- z-VB(tV^*Ni>IiFoi_nu3>Y?_`S96dnmYyt_CFOn5xIT|d^=knJI4fgG8{NfsGsZhN zx(Pq53jpi%8T<2Tp6Y}}Dk~}|<2K@*v8{@a?OgcSim#ADW^DVbUr_ciSGM)7rLLSj z_6qz_kdf}TqkQSVbA64M<@1pexbv74w*xwbxRy6-5V~0w%IDcOnL^%2EwW}J&I||Y z-=ADkIr`}%Zufrj)qgFJ_-sVvc5Ah*n5CQ>CTu|nyh}_?9d|xcBgg7ZI#)+)pqhCJ zC)%ax>lRjFEB_5!4|G7f*d4u1lo7FNI=~caG8&9&O z8%c!a>SP5Ul#H=iG)%Qyak3!BOq=K5;eFTr2%XG4>a+C)D$N1K(wpyhkjtBn*P^p2 z1=M^r6quvyg@#AcIz*LRE$#Q?Ced2ns$s`vS7EE8q8i z48rzLAqxwYrQN2aToxE8!FVfe7?bvWJpz^!kyz|0vYuArSRh?Cf-Bo>%jNJ8nDNSH;J%Kg;{W3OH=<9 zKM3b){D2R*q26sI*0`~KwT9|zah&r#;I{m^{PM~%4rN0E8RCP@Z(r|6p@GXl@Na>& zu21P-z_#*8LNP{!X9*>GS(cryABjb?989}}x)pxwS+rY#)#Hj1{!Z(-45|D* zsir>Q+FriPxP6BrRM$*p@YAz;8()S}B}yy7py(~Qv1%<#J^|mw&)|6RBZ6FyNsTYf ze%8AE8e-5GwxM>|*&$raiH2T$7g^LvISIiju(o?Kq4W6Hrs?oCkp)>?Kun9Y1C4Ge zNBpDzW2xd1>VjfgliZDRkqiCH(X&l_S^&WD!wAZ?c+O?d{wo<36-zJoDO6K{+aAh) zq)l)5V+p%N)n>I|p+)mN1^?iARfJ~^!@G;tF5O7-%3tyWDPjXp*M)ILBu|$;P@p^MOL!tKjB3d-R6c{$rjKany z)#R|F901z>Y_{d<|31-2nXh~GQ$SJHyn?=u<`?$`7;@BWm|t#WKampmN*2V5D~Gz5 zvxeX51xs!7wHCIuycUGS^Mhu8_8Q{)e)JVW`iDMu%P6U7N_}`ASwa#S+z|GxZbQCv zEy2lq?(h-#`GDcy_bY3j{a$47vJLXW%#C@n?!5T!`Zflv=kGwzXwlgo{8kNRAtgTy zppoK#jP-FP%1JR%st!No>n;Ks!{u7tjONf!MYqMyxVUqdWyPx$2ryFZN9@}u9C6b` zDvOR%{(zgCx`pp)W#$O){%}I3_3I~~!jbI+*vv z(5e?b8orH!9~9FC7SQW4gqm&i%U816oPas=y-pd-2(13qyWG5HnL^|&dgHcStfj*0 z`iW80=dt(UHPahv_*N|O-Hf}QI#lJ1hSS_)>JT*g8Ywtv^|g;=pdgyj?0xzJvj|?WA$=nRMaudRBKznL;H_s5!^Q zeY(q>f?q6k9SwT9=e6A0xr={7B@3kPnoACz<%)dVO0W|MmTsA~0SLG>4H8Ft{wcr) z_qZx@pWUV#d}6qi#OQP-Yu~c=dcZ!l2!0=v>m~f0eEwZrLWYayaMWbckVTP-87^mT zugY!gg7+onnpMH%4)S$ZP@BCaLg055?}q9=HLZ*oJ&b$~alxU-uREz`A3E^(bo&J-El z62~Sg#le}kMF25Vu`^D8JHCc8jGa@JJ3BRus+}>Bz^$s{&&|E`(*CVv#&5Ovr%T(7 z9v%UcYjd2Ror+?|)B-s$#hPB{k7*Ur8I}d*0IWCqY(}>TekUXp0A(3H`6IUjV*f67 zf#^TiZZq_&af+8x%^@tvw$6j7SB`w9nH4T2?Q`{{nNG}I@O=eZ)(!;z7@K}qv%r=~SR%O5B zh3fHKkGRgs>SLCY*J@;4{v$W**s{(__20Q(S#k-dt>FFIy8t4sn;4h<3aDBf&k9^+ zC!1*&L`pvEd~6>GU2Xm8Y_xq|?cPf)?gk;G(BY`7lFEcHh9=QW;4IQIpFO;fi!^X~ zR^vl=P8PEcLXHt1r1eNH!VZa(ZfBrF`1nJ9xLAsY3+4pxe~x@t{WrNdKqC|~`MZaG zki$09SD}K@*D3>6L#&Pd|1dmwV;zV1o9p9davJSQzY~0jntGV^&*OvkeBNfOtM!u# zuKGc=#AkRMGBTr3z11;W8_s6?h09;aOI-|x*z+>on)&_EcJ|xXJrbXzpU=s=wG)p$n{^IyTkGNRAQ}MhKB%q( zVU-rp4m{?+_M>%>eTVXeEN%e!mBYf4&M zG$IT3g-b{!73x7kTEUmnEbf7H9>P(|CsbuPZb?D+gnXNB&vZLGqmih71k!?n27TcA zJL)aM<#u}TSXF1XiN}|*NmZ5atYXQD25D^1Nv%3ptG6w*e^}-ylzZC%-~k{MlqMDu z1wz4~vS2JEDusf9VL(_g7Yc-gBQUV4&wp%$$(MBsN~$R}4Og&xKUqHRW468XZWF@f zo^uTKW?C@8ws-u!#n#nTyRxr75K-Iw+$%Ke1aqjvPg#_;%h0}9zW=E3G%qjgc49$a z1~MDA zP)ryL1_Hr=xQHSY2?Rv>lKbC%0%o^zp%s&InwqQ2;C{D+a<}8n4^PYYxxXgXe_Z(& z>S`&k4#MnDN$e{oPI`PSY&iH?;02m%s+Z}o4zkoW?%)?{9xbnZQRe`aW^OJs()2oJ zncgheiwJ)kwRK@}*6D|HKKDvi)BFyK3|9>%qeVGLCB|rSG56| z4tm%q`P09}8XkpOQ@^ft4x@szt(%Jj3&rQCH~}6MkSrt%4g$eIu+S_h3x$Y*VIWx0 z7Yc-iBTjPH`g>JtxpgUYT4Nb1^%Zl0{;}3Ne{anbp2YQu)?Wjjt=6R$cFn5qH}%ht zp5G)*M@Xi$HD9Bs+UpxX8RU(d7GtQq8lG=;yRdpB9$E8%fATGiBARg{qq+*hfE3mp zGwZ)pg2XfdX_j)hQd?ikJ@N>J#WVqIwWbKO!6p57RnGZZ(J2U4y8YC$%o^t~&wpbV z=Az&?-Ra7T|If_?>M>AsqbZj=WnG3>d^$dd&xbdq#}w7jUmv+DYv-_5=rCb0UbQw% z-i~%kG-Nni*w?~b>1yTbll}JtfB_&Bj4Tuhg@R!~z?hI06a|9;VxU+kCM$%3fe?_y zE^76?_xI;7d2*#)T_xhGm8*kVAII%4{r|w6e?9QOg1<&1zfnfEApVwmaHkk<~!G4U^z%Rx56-xdV&PVzSv7%7t4Q$qgyk(#{O;i6T6cj;= zhs;f0&RL=S&ridf?!5=ASIl`0{gNWyhyl;{^JQzL``4)81s76M!W{Sw{unHn?*P3z z?3^y2O%|my2I#kJ4K-^(DvY~o$FSSr*DtaGYEcS3WF#}u&*u`Xp6qtgb@^ANS)hZ~-0^kV+I21p@(NK%6X<3I&3pK(Le~5g7zRVRx+Sy7jGZj&nFk zRjtd4QyQ`-L-OA%^ges>J`1NjUy1iW*F+D?TG&QBEy~dP*0&nR6&TmGJ;4IbP=i^x@xm&Ha`$ z_ma&1fSAokDab$#tBcp!-H7twmHtyWmz4wZJr(QqJT1j-GfIV|DF(0>wt9wYfa*QT zSI?K|j?bGRb4|9Jrt&az>)-ZePX<2$nLjE8eb^C%>OXRq{9i-8v&;tpBovS=6cL4m z0b#(XOc)Cd0>m(=P%0D}g~B2ri4%U_IqUQH?Y%kccPa#x6;;G#r$dr*FWmkk^&09g z(!A=l{wPlRr!s;4y(~@hq9ku|=FszDYuvudeee>L_FWazx1%Ui^d4*+YtsBzqs-(1 zOUvrHxD=NUF8UUONfU3(%nn=9zt`RAef;owbLF}n987vu_Igq0T(O&g^PT%lWNpZN zSyvxX?y+aaw|u{9uX@ePy6UePD>GgGm$&zI}=7&W&XoKcpv7rVe%O1-PQ z|KI zz8SHwyh=zcR%XC<$3Rm%#WTD{V!zWy-{4k3mYaa@ckb_eJkD>Q|NI=FVj!4WX|jY@ zFe{n1RUOQa11tO7xty>)55Q zR|@_nr(ZYD3=R|>0$}&!5T?Sm#J7gQjVh&{mqr;?qHolp=edUR&_He#;(>t=G|T@D zffV{p;II9V7z7EhXw216_o2O4mG-b`_^TNbG|vBwLXgRMRR6lsxGkdmzkekTLveU# z`uDwB^=h*HTJBq_*H%xT$?&ws&qv}V7l!9sr{W--WX7>`C|%pcsYHl!jg){-;v)gF zoD7b#m4V7~iYF9LRayx8y<^1s^xnPtw6Q8%(iSU~j$E(R+w~ZE5J!BABdOj(3#rrI zU-iNhW(x7(h*NH86z=qYQHDNl?HR@KJTaVcd(=}HNwzQ3b}(Z`x)G^1HX1p+L`I`& ze^SX4>#6ym3s$!zUL;OLC%V_A?OI<~$99Oje&Wr?ea1e5UtRUwcU@%qcku>oa)0pn z(Ht=~)|u(M_1iJ1|L3W~rbVasJBE#((AXFi1-a5~KlLZlCUwj2?rR60@7yD#LKw42 zwwfiwzo()|Yi0Q^?yVmwaBMuqyIMfpAfb)mn8^Zx+lt;O3^ET0q*d{S;`yjdRKHjF zUV)T}wfG{I!gdORR^p)9NAdp!R2Pne-9mvYcU@j({m5U8KcuU8X#Yo?9;0f^tM=MR zctl}}QuS7u-Waw*l?$fN^G7TE;tVqs*IJ5()-wFQlw?3_d_UnUlb(b{f&UZfrsR|& zXyvh3;lKKt^Z&(=YE4oKJiY#=7vPAse{b+b$$ULdMJc3G!^x^IP08u^LYKqj6k67| z;jo_Z$Se^crC$N%f?BSt_Oav(tzv-~Oh73m)tkHp&AXm_ekZWtrWJ|+#Q-EhZ(<7>(IKtQK`-}tQOB{m;KnY|;o*6GV5_2lh8aR)96 z?D!yIZ_n=U{1fPMu_}%0!B$~{a!QATAoDlIXir?S|BqpqW4a?bUv>O9vHuIhQm%pb z-CV;gOdtP(y<>5uqw}Wvb@1faz*?SxXdzo+5By(}^oK$PHy88YqP=?5u3AQZ@52*D zmP1z5;%tLSc3_wiGpMaAkTv1-UC6hNkKbMj4{E4tQ6102B|NQJ{uSK#a6wp=C46vC z@1*Nx>f8iP%9slGK#&Q4Pic=X_)}NQ;zUy1`c0XRSe*Bnd#irh{ z(jw5m_?~}xj^Bmx_yw#+lDghk|KZcKJ%$lD?N5b2sQv%{!#1@HfNs7rY=z0-tVUeN z<35q`q#UVaD~F9`JgY#KEgw_>OFpF$oqB9qWUw8PEQM+f0Zj{A3T6M7%RL^(ZVMO5 zW7=l`0=Bv{8Fgk839nBSQcs`kKjQ!WvFpDj{}4YJWCOqG4&<_LlUk0e{oY!`3-~MH zB|MUnKB}-iekH>D{tC;F4Ej({=BUdK%}|?{b@AKF@YuWyE2oucivAO8%aV(ei^V2NwE8oe_JoZpi+iQ{jgQ@W zkB~=X1g}Y5FV@yLf%~7X4Xr>atO>ntrH)LBx88%+ayZOI<+9%6KDtd%x>Zokm7zF8 zcWt1vjyBORe>gy>Vw;}JxP^z@ZDstM$76gz{{CO#tON3Wcdi`dw3j}Ye*RCONG7Y4 zwu=8t-LFmL6m+tr{QmjWTYri!oAS%xj+Z`RUW-!s#A$xi=7-3?1R~I5Mx9mqBi5!e zuylVn8udx}P$huNf1My>%wMjm(b>SfwU4-iHLb~$UxfIc8xmf!)D%^wYpQN#^%P+5ZMr%D&yW6!k$*YF$;IFn))(>eBkO-V-xyZKV6J zCdT*YD~QRDIK;DPhvB;!`g;AI5N`r@b2<2Z3@jC|ET66Y_xP*E5pMYy@uq*R@SgKi zpC$LQb67C?dV@n!#Mjw&|Ji%G+=K?&p5~Wv_X|2<5Ai4a;UGb*zCyUd4UD{2_MISm z>#5s!fxVCTEAMTyFet`%%4~_5%(9_v6LWbp5j84a6Yl4gB))PiV^shB*>Ch&Sw6pB zCf4&KovC?jap|7czt`_IKBN&UM!T27M+O4|u#kadgm%68<@&)PpwILbsV!f%%eC(K zP9fhfqRJ<)f9nL|Z~y=aPC=R&hAIVrNKbyfUcLJDh}pZE*DJL;ez{k#uhylad44H- ziSMuV={+hp{d=(HA@Kvw#gB=97vRXlMQ$t0P&~`UgAzP-^qw1E z$`wm%;4s)E9~wUfsa;lSI56uG?$!jP6bB*xu37q73HBYpf77#?CASb1K*3eP>q$-y zy=Q<+2awa3a@w)__e3dfitT&VeO|5AHTAD|hK8F~i|FTBXBgv8|gEFe&Na9&ZdRfd8#;j?X&*3Be%5s$Hpf$o}_U_@GFsQJ6B z)vP)W0%QaiyN0WmTgUIz(4Gj4DMlphFDV;7-HAq1stFKm{*DC32rl(iw2^cEmRnH$U;W7?&ycU=RD%U_Q7%-}?EcL;e zSZh9<)!`HvAly&6d1fh!Vw_{#dc(Pjpr`cCX!mCN;=iuCNqzI=3^;)J@Y8^CwaI|c z!zrJb|E&$n>+9Yec?OH4V3$ls!Qf2ib)1|s<@F`(g^DxirSkH1G8Oa7i`4Wfi!Kfo z)#UO2?w=G0Ae>ceTIz^W=t4`(m`x1!f1^&zd%s_xgQRx4LGt4l<$TcUqNt6tk6#tH-@zldeo zd~X*R#EK}S4q(@6L^V*VNt;HLeIMjOKCRcgzh3uV?S0ynUP|}c^?LVxE;)UEz1@2C z`t*hU*Yt#t@W%qp;~AywFkKiiy@km2I~bt>W%y7LhD8WHvi6e*h$Xi%vnz*qG#ld1 zv6CS;l3Xkc8&?^qC;-+ag06Io>)z5zv?f@s&vnYZbgR)muWtVP{1FT{RHskD2-m+} z4=E^M1H!t=Uy2zH$vquM*}y&tCkll5sXy?VHmUfu^FRs{fn;apbtNyQ()uz@At zO0NZ?K@eON2zajDvoMuQ;h@eN3Q#Q*lfX1x07MYBAp@Ww51(rC<`0~M?{9{=Sp69Z z6mE?#+AJORD)_FIs(cb}Y=!!>+!PXKJd>&irU z@0W#7jhcJ2evN_+klXtE{adi%D%E`vn5*zh1a^@6PX5DA_8)~J%1kiJ$qnvyDdCe5 zSwZ3R<;0(TzYNtEZMtt5SJFVql~(wP;g%asd@IIU5wgzf{ja1LU4O5e!+(gyFQ$tZ z>ebaouU9o+!X9)iLe+I%30IFf2;#SU@M1J66^b{wudDYJk$;9DU2L3UsjT-M%MXv- z{`&-FcgWRs;;$59uzTf z6Mh=kUbjMsM}F`w4ai|wulP=ToRI%zG|)u|1FJoJU`Rbj`LqHdiiO!>&L95EsGs`1 z`L>wF9TYMzlY`zpUO$_v{5Msg*V{iZ&+tc#d%xzhrt8(K(O8yVLcJs z1OSBZYTuz%`X(Qu&)xbG_2)9T52;;;a>19u2*1LjH)cBcy;b&)PT%}cyNxx~1PI)| zU-!WQGWs|g+Q1#VATd7XpdllX%8d+|N;i}Izx+V44EO@9;)lm+FFs%2$R=7p@fdBE z+tTCLytg?%f8@IGL&<49_#)o}+_kaO40))WxSWTASVBS~Vm1ZI%U>0;uDc8kcUZXCR zr24CyS>aJcdI52T^;OzX_e{BuDG%nd>;7z{q^isGvdS>2TAD^#1wNSic2#JH8T)#P z)o$hb=@e#I8es-Lbxnipmy^v&dMm5=D4v=GDs$HjsqsB?KAE__utq-uf^|45>dPo; zKK&8z*ScAK5%0rX{<2N%S7PPJT z%>%g`v_sKqK1=k%NFz8vt(>qohb1cXx4^e?YcG(dmdY~h)`1;nwZrAK6|2*ypFU`R zx?80ciuD)l=v z#CS-SJJ=Xm4F-O(ei<$1)%zjK)V^+07WT1zB%)mA)SLYq48H$}-uE&uxFzAn1>M@k z__8Up$)AEDXc%#*-+p3I#vfAp>xZuQ<4-7&^zrrf&8r@P=isp%J(L7F~MiEvlzmwef*_Z52c z<8-<>!|@ImDJ6bfQ7$-NPG5+hQJZ{w%e>zH?>^n{Sg{s6JK%q=@n4-7f_aYSTSMxh z`Mid74gXr3)rZNgwd6D{%H!H5d&d3bpI*AWhc7-KDXT;6KWKb;J!&h#4EEN+c?fuJ zLV5p?voV{M7gk?${fyim;oVBVeQ10idl`&s(Pt_1d+1xK@f=+lhEX z)^FwwL_dH401N;@ni&R41%07!-CuKByw;~luI{QB&Y-Uq-y8#++Cyd|Ut{s%_g;KKX*6BTr|@hjg-)pCwkuLyfsy5+TQ>g3&f^<(wy zpS1qHllU0G%Nqq?+`<++C>H-qfgCmwG`?OgjPp&oN31vnP#XY28-5=1a>sB1l1pGQ zSWI5>sJwa3roh{Y+~p`P!{^e32j|ygSbH?zB+5)Lx={drDE=rvfHD(L!zlKkJJ99u zB8I}~2xkPO8`8MEmRRiv?~$5lPtvOKMq~`=A0#d~b^Lnkb&PX8Qu~b8P3>?PphOQHcORuYKXDe^Rx5X> z|CG?*aRLUIRwc)`<=eaB8V@=Q{{f%~_KEv&{;(s+AP`G+irWR+s0y0yKEqCTI0%Z1 zklRen2A4~ORCd5j7MV0Hm+@CMbszl#&TwH!9@e^9QKjTG4lur~>CluMz-tQtm zShZto@b!$IlwU&_bL zJ$XGjIs`%kbrDt{gCX6a=ePRzsA$O|jB@$}8fkxumY>=4+@DXMs7k=paNWw;<3 zN%ypDHr|HVaCTGTyq@3TBCT?2`wkO<)ajRvCN!NocinoDlVVo!u>9A;C9-P);(U>Z+=$ zs;acB1)z))gn~j3kIAuXtPzL6&?H3oCByiC1h^z{{#7r6))X29Ft8Cu4I|BqlR#d+ z=ZSD@vlYl=@O?Z^s5Hfg_!x!)r31_fLbd<`02Evwyb7!VKpDj1g_*W@`9|}9|0mCH zf>C~7#)If-Tj?;NzbD$NxPx0t-5b=ngX6Ind8w0{XZ=pf2?Sz{xZ>rnaYb-;a%5Ra zk!DO)nOnG$(Bj(Jp=i$^JI_Oy_rH_-ciEK{@73VWWS>uDk1yb$2ynni5%_Ps!~+Tmgd)33it7)cL@Y&Xck6KQ zA_XzZH-@#I@|c1f%fxsx>9%~OfPbG#9)qVx1Md?JKwS0EC*I4v>h7nADSed&HKd=P z(soEsa7w3eZGk9Q_;rLg^aEnao zFt$(<{4?1qXZ=J~RG44?Ay;35eecSnUgYf0dBWtz=~A>9qSG}!pgG_2eE6gZV$Sxd zS+kSF_eOK@LB`j2)u8&fNQS?uAp?L3rY~=^aQ&p3__x|CPuJ@8pKz)_aL?ux@1=BM zxpVMDDaJwIHKPTDzh8t2M^X+4s=GGFn#=UJLGr>3ODZXVM2L71RyDrrrwkTspX9y4 z9H}6Eh>l;Ftud93UwI^#@VPY2#}heTgHQK02kw6a+}Ro$9VGX3$eZX*2FN00XJ+82 z?UTP}?KD9&J}}D4ke5Ei9X&JxJUVv_5`zF7oA{TH{!~*5(fPr|NuJ{bck3+!*&+O& zt#?6z6Rz0+t@Rrh>PCxEMe9)HoPXF{Nie2(17@|Kv3J+uHV)19I*aELzViP5B3dr} z9jlwXpP%%tXXGM>BV{qmOb(m{ii;rgWg_YgdJ%@W|5 zD1!V|4=CnL!2Pe(DQC|C54IGh7u`?yL=oZZ@o|qj>nN*sL9bwpeh2rSVq+xTdTt|; z?|BpC6vJa+%4_0v))1Qq-f#F`YzceX*>UH@(1~Hr>fw*x-WDrwrWosh&?*Yn5vO+R z|B2l5?$_ZPRdf4wS$DZ|dS5+jHhu3vrgmG~IbiI2XjH=ITKp4`dg9TBcj7+2$?N~w zk8s02#ZtKiA_56{#$lL9DGVy3qEvkhANtlzX0#s!Es8Xck7aI zk=udi2Ld~dPoy--+luPNa?S7OiS&|pe=ObK`qssZq=@#teXVK!rSH}6(P~fi^(cgr z@9;r-e6wnBfIub2S*OOJfGZ7OgZ#f=hkUs&&=k6i$gLAB#}L2Uj~xHtpruGVneP0Z zgrD2*>P(UTAf>94Z)9Iyb1SyxPwHI$+n@gb1V_WEMfL8;q_O{TR+`|19Wa~LT7*p8 zV?z_60%G$|(jN1R#zd0C)>hFYt#x76nP0oRFzZ)-#t6}#1yiQ{vgHTY6@pm{Udo~g z_@=LAim4xXVm!yeTP;*kS#Y$=RQcBks3?$AN4Mv_-XO-Hd5GiQ zU|va`X(fo}nv^~YT~*QesR;uVF*^tu+CMZ9{9mgZ;Zb#?2dw4EKe-1YN+&S*(`~IN zfe&oqen>A4+Lr5tO&N3D(|%cPG!O87o`)Ml3sv7fJWbEgC--yZg}y&XzeC!+UcGXY z*RR$8Mb&Nyj9MD|jW8z&CMp762_u9 zD%68s79UufP^G-!=Nb+{OL;g~m?*QUxXdA`xzX z5Yo^g2r$r@v8^$mH{{3w01drCni+;_1%IJ!e80)+^>^!EtwpD*zSh2#kJhC1bz0Sb z&GfJFD_J%ZKx(zZ^>m0VV?+1nBuxEa1sDrhZVYd1CIO1k+NWPzv7bQE4mph`dc6_* zmQ-6DYSjdv-`C<*7_Y5+E>D-Cz?V5=!V zf8ha3C;Xp#ut7EF`@?^I|Dk^OUaR&t@imH1UdMB)y?f=Wn&jPDuuZahoM31|(DB8P z9BWyE{MQO=66fZKVnA!s`P$w!A_XueKU)m_AyLrcw7hB09bXzg*d<2#x62!*189aY z^(KFU+?%2AG_~trtNyL=b#-f3>s9LXys=`ruVy^f@X&~ojn>N65bp@cfk@@9x&BsG z`>*siz9z2yYxS$$YOZfuzg(o{_?6cQK%jOU9)AOvYDfS&768fBGJ1tLJ>W7Qu1Yx1 z030V3E%l~v87+P=TQjB8v-oLK7-1YNf!_XNFGm#z)D`Hn+ZBW^^Z?zoPm7`_QEO-L zV^G-JI6DoWIKdes7A*eQ`%PrHP*gme5@j*#PHZ!|;nti1&1~OP`_D)dX3C`7@;j=o zpY$eTBi66hr1k3bSG)Zaxp$&5L9=j_zcGt$1WjjWU-(`ecr0Le9ys_pD-q=4v0767 zf&s7O@>IMKk=Utk#j3E;1o6p4aYAKObt1*S_S|sr#QGL{f$$hVCFUetwQ^JoWt;zk z6B2Tt-;d*0qUuV~NI4E={FhOhk4-4xgrN|5>>hhTRm_7B>vA0Q(8pO@ga>nnF58d& zCfFe5CU`!NHdb9CzvTWgiSUORdO&d`jRRoQApf*2!LPJO?!9#_t#1QBYz;;5GYbU* zA8B^GSP6@lwATXgvTCb%As>t?s;a8hadis;RKYe~oPfVD@sU`_`bZ!%PAzGUAq!6B zV*Bs6Di2ONG8hdxWQSwd3DevUp)(TDd!QDm^8!@(yCpky2dcYylR zi4n#1*ZQZ76yO?l`G3O~B0Bk3usW^~l(Uqe82BVF86cI9KZZ_JE3`27lGh_P|MfEP{y(M^5r6N(< ze46AW{3$HI+wU5NAj`%N!$i6|l-04@zr;|tlhGgDU%U0Jo?r7V1^^%+NG0koSY`nZ z1BfXwqZPE%p9GvdII1o$+QB%S5|H-`XYh8%N~WUL4?`otP#`AYoA*3O4hO+u5Ayz> zn2B=id7(Hj;FL5KC|CduDXalNh_Iobi5i)TK1fc)H9NoP#qmY8=R^Mu3x!bydNbd+ zc_oqEIDZ5LfdUVKC7yxDpOgp|-fwY~Fc>!rrt%zce?5N$7e+ijE*~8VVcH{k2UY|E zq_T~o2CmxCqIw{fzJr75saQ`Ula;`oyJ^=&*G4t@=5j52h^YP>_>+0Z~Z)!bT<6c%%n#(FH|!tZ0h`+ll7x;=P%Fe-G4FQHBl36t-&; z319)F)}=KKqTC*E;jp5h@dMlVSl}q$2mM*U2IT1L)ciU{#ZoAE$|ela7Kys(FNHI) zu?Yq+JTz z=ixD_Jc6~ac8}`a_ZlnU&`5*k-nO6o;5_~|lh@~}qbtK&ha8f}3}Mt;gX|9WI(6EJpt=%dz3`WX=j+=J zak4^^!nu+Mg!+E1G2MZWkAj2a`h`;;>9|dwIgk`y?ou`iMc z@Y22P7l;HD)Y<&Gm)VEkJP)a){!ic1B-qLini)zGY!X6#GdWQH;5Qd)Qt^pYDsr`S z+)Vh7mc8rx_Fw%_mo*&aK!`;E-SFMun8*$|E_Ghng#FGRE085mATih#*x6WSeFzq0 z;sP>DVvE%x5x+WGz?Eh9Fpvqo>R$UWY}qQykrje%i|o+TDlx zCsdelVHcrRch3K?UdEo>v{Lw(Aa6QDL+e4fa!-DV=GR#9XsikG*vzH0D=QojAEXNj zhis(9=W`+rIY{Dt>)>9~XDTcjx8(^1%`E;tkDDL8#}C)34Gt z_@A)RfiB0x2#U6(v354F>`-|3wc80;PfzsI6j?oMJA%mJfuwgDM1PKSo zAS?-(aCMB$rSl7%UBiF*rOOB2^ra)kolpaqQ||+hOq%M z5IjYGqYn^9KN^#{g3sfGFlZ{u7P>56z!hzoJKyv-te9B?tpKE38=4k4|KRL;j6TAQ8hQ$i>(EWUstp+J~&+$ako??I}C3h>v03dpB-u&&1U}WfX=R7O!8?& zAP2n>?yv94l>5o_or#7511x1y7t7i&{ZP)BPGxDY)bR@4YhRMCPjz(cF$`)+a$@RI zG1F%g1mWE`ZV`Gfl`z=X`$RSOk#sv8<9Eyd<`m8Ej_Q1#2#+m-OEC2Hd1$1Ie$CdZ zu#ONVJ}~cxn(Jv-*Qi*#+-#TlzC6a?f5N$QcD3-}iS_37w(!3dqoXM>uC8VH7~%^8 z0PGR*YMnUOezMc3Pfq9lPcQxYV1!9O9lHdE$V@AzXeFWw4QYDLIO=@CtWF2CGIi9G zgY-}9q#f2|LEY*MQr3j}Z#cKW9ANOtbK$0vx~Kn#H2z-_9_`1I8d=L4v8n;vgqF(h z@x_FoAJ#nee7)R~Bb>UdfmS4E5Iy^g>}PLj3`)tNhGnZI8JsVS@01rSp}4MikLnE{*gAV(qm|lF0E8a;5tNn7B5MdDcJ5pid)aV2iBl)8Zx+;-VJVN z?i^H!m{C6Z5;IEHHPN{5pxWR(j^y_8{F!7hu~2#UtP1cn&5U4_{YYF8Z=xl*R~PeqvY`$WYQ0G zzAtol)2%D@HSd@8tWkGve?R)U-@3M6q+Y@#<3&L}_7HDwNeCQGK^mc~p8mm*gb{do ziRGol#CDT9ah^%iHRgrY8Qit@sfZ@`wx6rz#(XO_vSs#R1>u<4>n*_<@OHp4xo-Cm zYkp6wD_MN8{cviQ;<-(pC&J)*@)l7f-8hdp|ES(x?|fG_3dA^3vK_Tv>HE67^gp=# zzyIQ2ckGUQ^Zs0!{bKEFe&~;r-e1UhrA1fWqUGMQ$=3KH#>=ggGx7=@W$9j7A)H$` zlyRrq`mxYi65*K5h0l^NlkkQRWyH--m$xs95Eu#R2oV;E5xjp++2#DY!3dII*1gZf z82RkTx9EHPPCIw5m#ycU+_&1gwY$5!tUvLc-o3L5m%+f{;b6%3_YgU0caI(w43~Al z0TvXHOcWCe0>gl?XiR7e3Ic&Jpx7uS2@Jv_Ft@c%{B<&&de-`+RB4HoT9GRF8%GLS z`X}kO4~E_R>wEb`-gU-1uz3{uy(n~sJ9X=e(*tLkwwv`QRbKm&=-+P|Z3_MvjDTRe zBg3*#j^UC;pB^E8E=%Y8HTBYN&9X*olySc>NuPC zUzMwz^%K1Vt7!w7;!BC(`Dijik zf?*(u8H=ua`tdQ>zgyKy!b`;5Np%haZqeVi)4Z6t{d;#!)ALsJJ>q`P=3ZVk8jyhD z`)ll^W6zVj&5DerF01hCzWB_j%U^M%Uu4yti^~EBa}^pwmbEMcZvUcyU%|KiEtu?L zjR68tB%Y4MU(XEiUNbOB%dtmbDd~X+!T%*p;J(Z#25lu**tbrL;F~vNP1fs$1_HrCD3~S`2@FV1_}*@1=N!EH>Y}DD3Z==HE1}7M*qn9V zvHu+#YWAm=zT3O_vxC{y%SRfbdK0qu@n#IVBz#=f!6vXBRch4IT3w@k9{~skPj)Rh z!x&TUy#6Yc!uE7(?=)h};!xv70xKzaXipQWem&pw^2k z8b@*rbo{Fm@VzOYrhcMUlJ(t9A1Q-?0UQ*NW)vF*!oq;CU@{gA1(1PIpjavt5rsl0 zcdX2t-?n$hi`HCH@>rRdXq7k`*YTgR{wMqXt@11Qyk729YM$dui}=KO2w#)sWB6#p z1rHCT&ia|WII?_M`I=^Y)>#k^&&o^#d&xJySV{W7Xy8C(``4p?;w&C)A z8|EbonP>N+R}jfPSje<)@oPyGcaE5}2j>b#Rx@4A*;Hkx7&rkI6p$(uBOZdmfUy)T z6blIop+KmJA~Fbx&gQ$$Wma|Ttm7`Ov2YyTpp${8eQi6;IL6GJU)9p>?ThixcZaj! zSN^j{dc?2tmo;=w{Lkhred*gGSVqmTr$_*OH&dX#ZIJ{bNz`q~_c_ zX03wR0z!QaA1UTO-e(g1zl4zY9)7;1PXdvruk=kFipO-G6Uoar0*+m)>d!8W#~x8W zfcupYKI6>nTr`S|`ws0@50K-ku!9()BwV%`(oei&)_qZYFC{6y)T*jfb%wkVK-uR5 zfB_y9kR}ux1p>iAFrYLT6Bz`;Q6Q8o7Yc-eCT%g!Yj?gqT-3y?$;D)qy;)LD2MPLZ zH_*7}H2kjYKb`)ie7O8B(Z66TaQqlO;e^h8!se3Bi9V{YwF6xor>-rx#Ck1xp_z8t zQaRIPyJkH$m+?IpMSWHeqx35ADMjqR^+1ZSn+~`FnxsO0?{25AZv^n(E0>TTFSq(9 zJG*kTLe`|J9X&x26VHWl_tkL}lxIMJ-0Lkzvue35g=O4Drz(_Z>xkUhVUpD0t_Cx3 zwD9%KWAQ3-qx%swBc`l4qswT9VYD(tro{0ernkhq}xmw|4n6(>40F}_A{OA z+{aRLeTjd$<^(9al@_A!o$~dvt+3r&0VG39oiK83Cc^Z>-xy=Bu*=tFh6{}NAk(iJ zcOi8ttJmiD0l)wN4{$-68U~65bMZg+g!Uuvz)S6x0O=>Tf#sCBWa9fsG*X}5>-^|NU8T1bwEK&6?+Z_B^Fi+D1wnJNf z+-kdLm*k)bKtuC=97u^4>6Na)Pr*8rDL2M2}l zVJ{RV>OAwRYcn(2V8&@rx8PxB*10o<8utZxh^!s=u z!XrrHyPiMGZQdcUEVb*!fs=HwWuR448d7?;sYg_$tiLZLf-@?!DzJjL7uZep@(8ZA zjdzM+Y)7H5C#_ems8Zjqs$y(+_olULlh!})z>EpV5Em1{y1T)+!622zQSGJiU$j28 zphwA@(K6mCYUK5c^<<6v^>uuhG8ix+0$tE6Dv>gk2HWqv@U+J7awb}Ne1WDxGRAN> za>iZ$@FHp3zJ?ulk>!Tro3s&*&oc>eW)pYpYp(EB?J*@DX)=o4^j%dcCUJ z1p+Y%@B%1qss~98m)|ULvI7$@K+`1?6CZ4{%AA z9hEI(U$jyW^48A=|Bi_+z4F$C{Ob4W*K1PxwOX+eYT|GFo!!BQLK8#_lxja`@Drh8 z*=6?fS>O)su>Nl3?yoDN1D63*ELsV8E?g4JOILO=ge*!bmjx1Z^{P`w0@nRu`?!m1 zE)-os!7{iqB?Vq#*23zlrf4W6g`clEk07**%@&so2Lbne#{GE*FAoR^SP%rKA^{Dh z8%y1cCA69l{Qd)Os9`dkL=Xvg@z#sDXHEO2HUF3YEMUyO#HJ-v3ZtII95GjfI$ZNa z*0ea5nV`)D8PheX^InANt~1rhoAP+13>u1DXrd1>WlA{IMAmk7`914t#`aDI>|snA zk3RSVmgOaOdyeAZQwwn}SxKRSs0Io(A=2w_C)rB~cvgd$2F@N$01ux5!^aL=#9Roe z2JTsRsAfC;t#4qIQ7|g(75C@l9j@Fu5g7U;|C5uYn@I6arO|#y^V=G2Hf{TauXR80 zsii+hJe06Y6{r8gosJnqj^;AKgF(@=zqhM}yVIbMJb&K54lk3-`7T&;9#5AMWWPeD zIVI`W!Y&NRzyx5mLWsuo!S6oz9lq*S$wy7YLyPuHcwI`!)Him)*R{0u=~ z0x+p<`)NpYQx60MKvJKzbNL{I%RpSNBaDE?nx-ap$go#ufNR=&ya`k0(5 zrX~ISY#GRu8nAFEaZT9=+)n=FmTm#8w7m|M;I8^l2r>0)E*M;TdTZv7h>i>JP(~pR zLgItT-S{Nxz4^+uHvg??D+o_f+(t9SXCSC^16phUXyjP>YfO*sS>(F(CsJnX!MI;u z3D_(hn+<|oK5xpDQ*%gNht3kK#5_xnIeZKtgcOF@ASifkdU`=I?y#z)xd}$C`MreW z-QO*mqsGKsYBT?p0$8Dij|DPbH9<-XKr`QlhQkPV9=Okc@cB4q9~Yod+8e$Z?eiLO zX)XeX6Q;;Mm112!HZmx<4)TRqAd`*#IAhi5WrtH|t}~7~jE;g9PcQJvM+?jcNzz0;wIx?CD|C2Aj|!?*<}96PKo|0O_DIl5^!^nzvE8va!K9}y!%rXn#M_sM=AjXr%k({R@0xRy5cq2m5nC8Y;qAnZm~SJvg`^n5>F ztE*b&TEE~5SRK3#pooTO`PL=TgioDpfP4@Tv6LWElOPd7DrW$GQ)I;h!T5aOPCm-N z&Ru5b%v>$MrJw45$ax4WUI+^UNPn%d zcbfmin-`a-$?e|ExM#3l3d7#p;8>Xy86VHTsi{pGs(vgMN2Ak21x`9tuzhT({`n12ET<-;;p{j9hoDbmJHAAX8=nLc`_4+wkt^Fu1p#MC3D9Pb)T zd@xYbnWI=o>|N?UZfb_Q%Co~kU%sac=tlbV6(EMOhE&eZ!2$V`-gKD8deCk-A^&0v z8O%HL$@M0K}K^E->}?HdY#-IkvuncqM~Q5505euk`UD86b{Li1_q({bfY)ugTSO?fjnF z^`)l;R>kz+$4Gl|JMF{9q(y=33b8q za^Zc@_tyup8(THASElFJ9p1F34kM$+ZE*Z6Rh zjU^)BRO6l=Unlh!12i`V55e7>OoJz@&&(*8+yRvrIT>HmIN8^h-~69wCJMoEgK3Q< zrm?js%$f&Y1_)NDmr#^+pOqd1HV=x;` z;e7CmG9kEnpD#4t?|05^{2J?R=M$Vo+b`+k0wWLLb$Cf{ucsGa`fG8+VZ9S1O5Tl= z^qlI$(Z-s@g*N(T7=*+<=JyaxASbgs z`wK?0??Hta7d>J8zqC4M(LO%0rMuuvB$bbNXl0@YL( zsY!C@DdRtfJQ4f8{~jyHhEUFS3i9?f=Z5dMZrHoJ!sK`n)LI_vd?Wfv3d!kR%air_ z6ve}+Oy9yn0v9+eKpvB5BLmNL`%*)Ds3{?!|E}3aZC1(ml~Pn_3L{J(sP!ksh3}W) z7-F%Uw+z|(y1FCdHj^Hv7wI6)zNGqx*h`HVR}8uwYjv6F^JK3#&^lzjjJ?b!7!bf+ zh`tKmaCU;}sN|=xlYi0=;0~%N9iRhlw+3vVsFNa|=Tsg9E1g60V_KMK`pf#lB5@td zO`7rIK}GI--PqTudFYkw;)Lt&OQ_$_y6D@B)viyH?@-`~>6u}^FeEJ({Wg}pu*pbt zfSvEyr-Rd{8EXW(M+DP4hMgiZ8deA(&F3eeT>IiB}pXLR4qGP3og`OYJ zUxuHxAgBBnlXoo(opNc({q4}fZ@e&>hSB|1H|~5UO)%7dD8U;t^b0yN(kt$yVs2jH z6LEx%2E=fuHh|toW(`L2_*&eN*kV1?KcSvMPDH)lAtQ3dkC0gN<(2UFDtzyMaU0aw z%oyo91Cik6;i$QBVm#wY6fv!spt)n3G;BG+{$$RY|9HHSnz)x%k4*#lj?5$<5A!|o z2x(o~x(emc=ZcRgmGS(kAU_BCzMD&JCztBtLBK>|>X(Q-`0+(?1fwO^crk*_O`Rtd zr3#G0oWAml2vW7eu5MTTpAzyhVw?=YjvP}{?JP@U6Dmqurk1o3?N;E3!56v8=D%C~ z6;m&EZsRp53?8BV9sgq`V1PVV^YCtiGijffJK%HprX^W*Zk@?q$6L=(3Tb3gR_ zNy+E>f+EJwDbcyvtGu5tdW5OU#Ww$~jr)SX8B%?7dvRBa%8G9qq=>jW>#%_g9R`?Oyu*6t|YL{6M3ONJ})*`d@@+iKzLEg@u=Y{)ba8U1x~KSR0)pml0T$9w38T zj8+x{;QR?raDTj6SsSJA&hUYUu@YfY*T!<7^H1Rv5veT|s#HR>{)*w;i!NnvC0bk~ z@_A7;SGNw9o(zZ!1rRBc9wdGM01!k$ni__x1$Agkl6tp&-x05k_}~9ufB*gT{Wt%s zR~7gAr4RrAYvbWQ0zfAHUGcxHSL)Sj)qSsbRWE+MBGd_i5Ws~@n1S)=7LcE=AnePu z|A9y%H&L%@x`Gy7x|$*|iDSfm6K*T+3q%Jv0$1XReA?KhIE5p5^oie5$mMRE@W+=q za11;L&jeT44v6yc?}wOD{utv;e7qYxfX<9_Cg6L0n*Ik;?g;{c!eyim$SQ9Y8kKnG z<)@4N31gyF&g+d{$8^CIzptpD)&2U#R6@7v|Etxnez8^du~qy~C)1A7R_Skiz`G!h zp@O)swz2E&G)&7y45}Enbqj~#L{kNDP+^UZ(J+*VOAud%sUjv}!Jt+KIQfPzhU2LBRWFVtz(*DYabfapyJ|5JXE}+`9`U%o zZEJ2%ps+wZ2!Mw1yj@*rV%{Jofs0uN_KsD5uT-S;!Ul|v1vr9(?bdyYt#HLcj0UlQ zq_L0NkNZ9!J&k4!f!cULE4v%B!SFYq{qLZ(Ix-s9E*^t?ili$V^AO(#5b81j3?i3g_zQ-=;52VIt{!s_>U z4w2qe1(3LCqOxEW-0!xP`5{^3`+V036PUpSg(#~ViXRVfg|iwEKbPi+{2-uX4FE9A z57CT^SlpoPuh-`&RG^>33?%2l+}Qq2<)rFIawwnQ^}o;Gcfwv!mhrF<0|Mb806Y%u zYJazQ7{c#(Q{LcWJR1Q_ME8#=s@F`FmEqy177-ILLS`_22?y{xAMc2%3Cj6?zgLsi zE47NMtNmcB?Oy(t0w5#@z`#%?0Q@TI#$W)C>bD|_4NXU9H3pRGASW1IUyrOB3dR%0 z<_g&aAARZS#U!bz@6{Gx;SOJ$|Ik;fb?=tPa^tx@clmx_m3#GX*So6mpQp>-qXh;A zW15BV?q-?<%Bke58ts>U@Jdi+DNAsCom2)n59F)-@Q0|3bunuZ@6^&iBRi`?VxL)#Vu`1EZ+JGr4%6a-&iCr z9*8>x+AJ}$TF?~l8&$W5=-zgVxsnnuCei~MKy zl#K<=mkvRv92plSj-&l0SRlaeB~!UXyeajupq|;g25UhCb{pwA2ny1T!;*Ra*mh0C z^7ksgdej9=Mm}inf70tPI!HWYxX@G;hztb6@zt4!*bqs{B32zuF*8Ef{RKDFn4$1z z>i6yz8hMi*KP=)nk?qe;JOAP#x%F`#g*>^VxOe!2GXIUod`9{#Z5=cI;XOVALcE-y zfFSRT(y!%TV4_)@IfyBW$N4DyBQ@EHD!fkaEhSsHLX>l0owSO!N64&heJcq6HSP1( z@_IbKTK@1X2mA^_{a`AlGBj!e=VQ~WyUAH1aFzLR$h zvdlvr1zos$2)!|!xu+FE9>Lw=#XMIbdl`*oc|Wyk>5 z1$ABDHaoj2$yH#SJ_-R~+Siu>G5eStmIQ=J&-{2j>w#{yhWO|ef6@^bL2_zPp&N?~ zrm(ouvItuiJHEr?LwI26 zZ|v&xB2p!8+(_P|@_i=Ph$zlfgzZ1|GwM--{{F)Rg?LP(Q2rYa0O8@sA5Ak)zD3rS z7wDA7@n1>~uTT26g2f+HnNT@YnW#a1Z4ux9%|3hld86s~-m+xZYPQ^VWd5{buZ_IC z!GP=A^slDFHLV3d+iJ;f3PB!~|Jm#KP4!RHJxpmzNB?u3JNSOv$I!ejuU4z7Tfdio z{F?AFf+AW~7pw$0bOp$GK^lvT)kWm<8Um=i9|9l7hz-(Nm<5vd8;(Ljj9@^Wpc#|^ z1ObVl3bJ!3kAu#jGr{!&Q?Rl&d|JL1C|14MP`f9>X&vY<+~g{J(eB&AmGBVhQa3V2I&m zUmUWBDS!Q(v}?U4gN9qMX@~4MCDp%g@AKEhUnBZ&7x;-GTB#SSRe2ZnfRG=%24JXy z5=*wQtxt?eGy#cgzIaNSk($N$ffBWz)L{7N`YN^yPNMb3l!v0_Qt-A$hZe}ydNul6 z``Mi>pjSKC%oT3D0`Kv4w`X;L+0RHfU^oNc?M6@PKyxL=a3fKMZd;fR2cc3aI7?0!{gUB|H#9Oa8Hs z$-|bA;1qvx7Vhg~#e~O%Kg|nUC+ZmEqY-SNkHDdyaMG6=O>0pX;`mkyzmxTQ%lrg0 zm)5=_?(ei#yX3i~d3vKg;NUKcTAi>&Ny7tnZ@f^8&q`4nllATFNqnBc(S&X=^d+*N zTr(`6{{;oj<3e2lky{);THiTW_~t9{P#{+gq_+n27}kjEXO_PWlp+!)FT>QtqlVT` z(s*QpjH1x=J%!K5D94gKZ3-TiU*y3LEIT(VVc|2eV55{kXSDbcvX8bh3|ehJPz(2UD`2;0YHUffCS%lKP{ z+1IYY)i>9`K8oIO3k<8CC0=YHtE)w-CzOd-rO7={S*+Xp)(!(MFE96c?+n^qQO8XG zw2S;INPW`Off8aysH7ePwCfEo$D;j)s2f+-5b0ewFSk&&0OLaI=JjZPpxOU$NgoAV zQ@9b!->-5Pm5ncgayV%zE?#eMXSh`Lf`it5{~iaA2XcYk<6epVZlH$b5A82EIr&L@ z$@>gbb`gR~S-j$hNOZ@rL#T|;uvejAtP?yOxwN;mo^n-SC~)Ls zw3-^5uh2rmPOZL)g6ucxKWp&0aa+2w2{z2mMQ*ge`}`N~`8vZ?(r!hCHq$V>GN}G~ zo3j3z!EKJT)p2!&$WYA7xUtH^tfIz9*VjH@)pRa1s1up8q>q6q+-c|6Tj5BdLMsd8 zM1i=m4_jA7TbJ02+896{u1wPC_Ox;!u=;ST=rqnb3Yk*~iZuEDuD#xj<0rT`#pl=~ zwTP4&Rg)fW2(R3N7q4W#ASywuK~Tb%2XZZz^)5F7+l(>j*INwv)?=cKtDvT{zgv}_ z2}h6C%Xi*YK(8677xMu2*9oH^aN;rSaV<8x37Wm(5~~~)2)?V?{hU~y4y&niycUb^ z)&3&;z4^phzVs3E<|9}9e)j{m4|~D@j0wj>AV+=OOCVzaXP^*j1KgLsz6G8L8$D;o zkRyd%;aE!I2mTv!yFbXFk?J&~J#c)IX-vX*d&%=~qXE&d(h%@JV2+jDA?gdSyYAxs z*;0?)|B5igqkKOJ`@g{sTJX#3>Jy*w#@-_3eqvlk5Pe8508%z`=lMThZwZmcjBAeh z*RuE|&gb{pxJ2KWV2uP4!4$@~3>?SOC4F3ljj)sv6owQZ+%gkgJN|+;X3i2~U-X1@ zXN2y`mVCUhu>=uV#BR1i?fH0}8cH8D6vXh^6EUgW7fHl-Jx1{-1oJjg#W54OFa6Rs z{rZfm{M=kmDKy+BRn%eaS3VY0lC;n*3Y(ZH~Rd zK3LuLufZOCW7vFA8nb#8?uqeA_#=f>8v08f(JT=WoX5AJ6-Aj4bw~8DR9v-ZmG1Ca zAtD|P|xuOUsg(Zr&6#Z2}5`%7huJ05;hi0u04nR>+MiOMqCJQQC z;UNO)F4i&bFuz*XwcMEwx9Z7t08mC+7&ADnXFs$A(nyf$s2!X zbjyf!OeUhuWd*z&+{Y1e9u=f8W>7nlq!m#)o6Y?H?-*PlKurzPF`8fi-yT4RDTiU! zdjn%mvyQqJLc^;v8BX}v^q6i4EkFO}Q z{sus|kS(-tGSz)`RpH%tOO-qy_VawfiW2w$01*N~ni~en1$A}kOV!Ygo3(4=eg9I~ ze_usozy6oM>;K}F+$O!>TCv(BZu{^51yonlrnwu$gfe~f z359}Tp@9mBPgd(LGXQ_PUFTf1T+}XL2=L&&YO7Jq*BoGdBA!k*(Y!t+ABg2I>Q zTC?QX?8Oa546rl9f`OI>Hiin}QjNtJ;;ZqbZM}1r8DWYTp^6xxiWs4eBtX0`7g_HQRX9CQf zVj5TPZ|lc*^87$}KoD3tV|tZ-JLVv-PMW((E<#0Fw*1menfAeCeWTzuq0k?nDVW|I zw>iSwe4|Pog6SGmG4C-A9rUu>+q=NT6t8>@TlHVyr@NXy?(WCS@i?!mC!JSvL6Kek zA#r}aCrZ&9SL*qFiUJ8?h+yIXSOme6m*CaQ`~;OW=zeEd(H6gVW^WjTfem#KLIX0ZXU7jEI)ycQrym{`usyye7*t@Oul#)01<=$ z5n(-Sm2qHrKo7FA!T3>rgv;8OiLX|Z*S}W})z83+w?Oyqn>({k{U?CPfW4-&m z?=kC}_;fpW)B{asAD{581coAvLNefY3-hpn@c%u8dWSj$4nhOa@1S>=$Jh_^{O1Ug zAeLqi$V2#a&%V7K%D{>?e_qEf)$7%F>y=Xey;Ik$T>SUC_Ft4N6T_h(py^3Lk>CXh z3A=ZmD!)@It7ynCz>wx#0?2BWPzTeiFR+MQ5(3hsFplRoG3uMl;w)e^3p-2n3)e0#JND zY#83Hl9aF-RD#)v>hL4w%g}?Dl-1{+7`oq*G)XdPE9~FdF-Sj0{~+Ag4~N3!1wp#u z`^;ZWv)|k)OzUV5k$2$l{qW;c_=}j>&AIx;liagc1%wK>Hu!hRujLDu0U4k7+e0|r zZyO1)>`sQJ7nWavj|?B!+f=#Y`b%FfpXWk)LVkbCy7gT4t>1q&YHu58_B&XwBpLiat` zdfa(C(tVUXD2__t3i{8gKs}`;9fNiM}J1FcDYOH-LHI2dbevX>j5Mm z7sT?r-eJHXfr+|2GWS_3^@K1@>Kl4uZ`%3O@J1^i_8=M>aG7F{>pAgq~C8(t$!l; z3ocH+Z)h(KwZAX65v zjbyw$r`6lww5S+8lJT<3i)PqnskOfeUVSKLE7S{X{X^7j7-^OV|0;>}f|-jPrPi}Q z>(w6jefEh5d?Qrdtx1BR{1pV|5a|1GA&&%PcdHqHLOF$3d(D@Dv?B;Jj&02U0nt zM|gBpNzrL)-g+}A!GZtbLOCl9#^@ojmtjocHjle+t;b zeEX!rL2}~s^NBBy@OP^z|IvoujVPbO)!^#w4)H89a>G02D$4A?u3x9@Z9Vr~X$F&$ z()W{`yPL+11W;%*S+Bt~Hn{A4DKj6bGX&C(ea;ss!S@vT*U3^0rS%XXH18<=?$*ji z9a~}P!_7y*+rN~svLX`S5qtdm;Bwra>XCL9xSpbun*Wf)0RQI0(&9w7l6p3D(T!2@ zS}yPjUa#+;lhf$XuLHK!cOyFN7NyoA^2;^WyZfWKH>@5I*RB30Pw|EDQn!tSyTKd{ zVgHb5s#G9tDzP1Sgy{G+oCzDCGEfSUR8GUZtcB;edNHGCNr`^eu>1kV^#S+W=ofUT zC|@XtKd8|$0Mhq}264t^CpW$xD`Dlr3eIUCFno>}Wi;AURT^#9|5<)=V*j<}+ojFsXJ1ABOZ)Uf)bJzO{{;++~BmOhgNApD|Or`(@d^GG@%8-%&lZw`2S! zNpHc~a(Wb0EGI46w<>~;&AiqgU_=V^oN=>cA`24Az7E;=Am+TRZ{DrP8NFf}L5HVP ze+^E2U}HTsmS`n~_x>Nvq!DJ}cCqlKK}I`a#+Aod7S|DXr6&CLe%Vts;d9vHwp3Y$4)cZRSC>LoRL*nF_MfNl`= z!S!A)8ggBRK#?y~tbl^6RRZM!om>Wz`7$tQg$rTn94(BD{Qk7s7E#f8V2#-{UJe6y z`m5|wWhH1N8_|fLhWNL4!-YqUiNwY7*Zvz3sTY4BE)iEMfrTH%9KQcyvf;=iX(;g_ z_NffqdKq>8(V4yQ;Eapc>m)Fi6*#R#x#h#Lhd9w{;gr3@kDi{@E)nzcnCr9qR zEnZ*#7ZSmP8K=XrdEbL!(U;_1pYmif9k2by(4m1c)1GYL{1<`Nf>!kuA~J-=TJuci zV2r3}j)CG9I;}-jOWd7SzpjW}z4kig?_#%oH`uGMu&JJbiE!r#6CRy1d_EEQ==-*I z$*aEvJYYg;!!{g)uwGz*NEF!)Ab%O_h9FW@3p zQ2GE55h9pcoZYJwnuLqQ+LnV&=LilO$L-Z$R?twnK&lj!F)<7|7h z#(MWGWz3WlF(&WTab?f})JkcNV4?QzQa)j(5;AS4u$$R?yIuR|T0lMP4}}YqX6Z(L zjO!mmS((0NV_K-Pr{iVDgA>W5q$}^Qd?P=M%G-gO?w8cR4mw}5f&!m83G;nA7h&e8 z2|rKfmHjA=O6uE(wg(L%YyJHM zurB^DrL2JK(+fy1PdCGcuj+xI!|l)cJpa#M8I-D4*EZQ8IU z=q9kovU$j8wRG*Zu^X*w4sYxK{SFhxXXW|G5t=}zDDQ{BW2SS51UZuqWrGo&>2Sv% zac{_Qhj!10j2*^ym@7+aPqH74VSs_tqXKWi>=d-+_Dl(b#stk{Nkz$ra!>S@qu5?!R ztF`Gh5M^D0q*7M8i_e)!9#nF9hs2|97sA{zCL|q?^NYF+Fn*nGFjdk+ZS4niZEy_O zF5rYi_&;?Xl&TJxHHa^2p}VP%<6>97t^UepUi%fX+RutkeWH4ZO`URcI0_GzD|GC# z)Ed>}NJoW@N|5nsGcfQoit{Twe!lHj^SYOEFIpaoLyMba97m`EqQ_ zmdPsLUyqE&Z^y00=>9AebyD~B=vc8?aLgm)Idwrd;#I3Zrs=(;_4sR=RrxC{JA^NL-DH8XmG?-^ zljm=AS&W`i>EVeXwF$Ha>*rS^@_IF{Lmoz-8}|511|Cc#By`Asf* zKq4R|2ovdty^>``+T&k;E&u=!T|t@~hUx`!U&R0S@_vQa>lgihUw3zMTJ>Ljt0kco zXI3*Wd%pWut|Gs_WLU1%>h<9OxL{T@S6Vg8t^H^rl>t)NAS@B<0#i7C8(Yam z?*xK42?0RB%oB&GRj8~(kHU%gBFusmk3k9#i7?9fjrN zq0*e*cZ4u#BO^EUJ_whBvUg%GD zz1sEPa#2$9)vr~53~GNb=n;5iR9>L~kfaC+NL0aO3g_DfK;`&B5(nsNss=p1KG1V- z2`o&3gwnZZ37&k&=^5qtJ}8_}E(_DKI!#-I01%FFKmd;Sloc+%RGho>I_xH^RnDcZ zDuZjs|KFr+1Fi%kG^MZ2{tL(nh?-&_5YLNOb(roz5A;befKBTO2pJcgflxv=b9{JT<+vNr*rp@D zQ;lZSK|u$~AHimp0s(DrzZZgotD|MKB>F|v70DW~d~D{ar*`-X#z7bBtGWB_es;Nj zto>hsK2KaFwPU$0T8ZWUv2cC+Ldm#ibYOOCR{~G~bsB0}S8h{#wXJm2{jSvPT6q_^CwBxjXUw2$6HI7LR zp_^r*AF%60%N&gTPE2*?ziL*3n7%``O&CE4@0)sV5CqgH#CHAHuD$oAhjV@!cNf;Q z9Mft0giO<`&l<%7qcs}z6EEbRNGsF4 z3Es78R0s*inF2kRsD(XT32>%~RAeRv3t_!5@G)FxjBKn@W6)zluiArmjt=K~-_e?9 zMp_&f!?tS^VB?cCrx)=0Q1y4s2aE=IMH+Npi2wkA=6lFs1xCy^65v1s12WIzzz9XC z3rTGACMNDm0|05@U@(JWlMw_4mA!6Y2jX3XAx8f}K|8Sg?>WX2{0Ml7p-=RYnw%qk zpp>Q$0z1wKiuS+oCpvgGv@F~#nK+{?7(j-a_Kty1ca&g)Ud266Jb%O6;hM0dr?NM`gxbw!Um^yrpf5wpoX3Rn;eUWN0|umE{5|>v zYSy=GDXDH>NjVAn6wZuw(&xA{Ohv!1jN$W%V>uWmin7Ht?HdveRGIWHY1;2p&Rl;d zT>{Ps4Wou-_#l3IHJ(c#Tlm;7A#COQb;ihc?r{v+y3Yu(tv*a12fT;V9Nsz!)ZxhB z*FU*%pB*k1(F#^S1Y|(g6s9%5B-|LrOd+$wM;QwUbL_q`lTE+sZwirpiOw=H=yOq{ zI=|%oU&Azak98o->NU^rpT7G=VypdiShw2OewDugN-hCC_}F&+BE zLO~&-RxYtzr-RJx$N=qEM zS>5@Q-?Ejed3`>dG1GS%rA?iS5uYr-zi_sRm};W2h^0xLv6DBdk+Gh_8=L zqu)>$wQ>GJ5!v77Lb&5K&0k9T+dM1WNOhxeB&GHcbviy}IoHm<520SKey`nH|GM?> zPV|`;yVfTVg#l*iUt>Z(qDm+xnbIn}Ih*Z#X+moKZ|SlEp7`&)_{b=+F2Ky?RWF|C zdz(}|P8bf6DaVHtA<#2LjeGTPp^h7{q(m^i594_x<{AjS5a1J%{yGQ`VvKzY|4UeI zq)y~l$M`D;(u(GvMpOUp(Y-=tyUK_f+5pGwYf( zEe3Hp)gF*=&0DFTenbU^WUu7%`zb?ZcXt-yv|$D8{|=DW?9&yhup<>BnpvM#GE%j? zpPn{~2qUWWK6I9o-!H?AAsjpHFj-RV>l?rr_>a}a@U`e~<2S|zDXR_bN{F6E$d?IQ zg$xxbhmnF)kn#&;75zlfEA)f@0n(v-RAu^-!Yj^^g~LzA%i6>8{A_Q`#=ba*|L3M( z#$VNC4c9eS@YGhVOic9s{IuLz{C|E*CVi``@_9XW_542!Nw;WVCJ%|?#U=;Em7Kc- zCnQb@W<;d25BB0F;YfLUHR?2__`t<-0tBrO+z3=lTvn?cjSL2$bif+0Kt_eY^fixF z$(6!gwgu9@vVF_jC~i13cm^TG;pLh5E1bkWnX?7Mi3s*S&zd=Y{)U=w@a{mPb2M8>Io3?<83<2s#--NUZ1~Mdn>=t|_ z+rKry7{#2Db-qyt9m_K5Mr{_q`Nanhe-~hJnx^cx zw?pu{4g>a+0rtSyni6VIxb~^53{;!ZKESw?ZsG z=c`WIP%#(pdTJiK(Fo|1^6TXZlYo6vOO8(8LBdt`$%1-JO7n;9y^;nJ9A`u7MEaK& zY&N7aj2h*Vd1}7*#_(;8bTN>43^4mlP@K$!x5@dT2EZW&1m`ujA$NS)BNAw|UpX@O z-aSqMrrPWJ-46(g@Fz6&hp{iHtDB5NlD@IS@WU~V! zmECD!^7F|IAY?N$EUB~UNdB8)#ubQYr4JZ3`zc=3*Do)Z&Q0xX*=fb zl4%5La(j^1cwTspyvlu}=-41YnY?x%`Gz9`L1~_(SUSugHT-Q0b3o)!O4txPokLA7 zoK!@wRTsvMu}mDYaQ(5d1fZ>-!3D4&?pxdF+DAQ>5n%$%dYm!eP|Wt=cxGC(jQcOu zI$_?VV;t{Dw6>q`>Ngo3J3$@`)p@TSMz~7T+_?X6Pqr(0Z^P6#Y7DPyhj-uUej@U* zxAD4O!ZNK7I~Q{0q*FWf1cGfejV@20Zo=ln6L(nu{_w*L!NL7w22%J&$5shOFLw*I zt@`|e=x22+>d$+2c}z3LhF5Z}AU@uyHFh#01JGIIp&w&s{t%2%y=~CXE*BoUp6Kd5 z;NL@c7RG&-`9cNZr9Kehsehaw!%`{k3j9bWEj34Jh|Sip4zK55W%O2C#t@c}+1i6? za{5CRGx_hQ=pATUU)%gKRy;L5bLn^Ma6%;F(>!u%+x7Ues>6+GRwX8XXp-oKdb^jG z@R^ze?DP?T=*T%Ubul>|*;9OAs3Q+NvIg#7B+n*}(Si=ZqKVP#OaZVvC$zVb4d64sOF;tAy@#Jg(w zb97%rr^JNuWU!Id8SeXq~U;n$X-GF)8Pku$Hw%Qm)}C9u@Ll7uD-Zv3=*o#m%J zA?J9pjG5|hWXUzwkBEb|AI0;3I8TbDNZ5S7G$v6Fl19GhdwQ$(uU@rYxk==tFc?4B zRNdYgWt&dJ;oo_Gw{Tg*U$W3jV$Zak`JZ2h&T?I`rn*sMK<-?%Xy{SCzw`>ZeniU( zH`;T1cv{Bkx@>n}cB}K{@!==6N8vrA82q_i;mqBilaI5Upl)g}KYVm;nQ4rRfjYm? zM4Cwx(C+W;ejtO;kVfOWUKQ<6~C{oHwF)nttDi(wq+!jxGM- zO|e)v<(F3;`7zWd6)bCUb-xKAWEF$nIbhx>+w8&IM+JQOiaXcT^#3KHz1sD9E?ulu z+NTLVf9RiI=!`m^=g+PG1Vm?P>$+Y4jnNl7-(!2VQj9UQDgT_RnNo_s{s>_L@vp_= zzHfD(p92g9@J50IAiBM$ zJ@1puw*|q#O2UGnWqL3KW2c@>%c42HsQ|?sN8}wA1EFA^3E<)u6hV4o_JaK&ueEOb zm#$eZyb#CPeT%|*_@4AAAc7p3oig|t1Ay4F&ceyzVaqWg1L~dXNi z6qqU#3IxKzfUuA(I14QT#Xzu-Boqk@!o;Na*13({?~U-vh@{H8;RgWvd*814pXbYn zbic1pn}5t7-7lieT<9z-{)_OsM0HWP{yw=!SGPxca-&q<7*Ecxt^dVUP=+NcZ?&vH zr8Dx~X5ps2V-?1kpM0{cIMpKcQ)O+=x2{3g3h6A6ks{C7<);y|sUq^HUFs$3d`M^8B9F=9;sU-414Z4pazkNF zbssy(4+b-=L%h6}gO^Byt=;zV>v0NrVCs2b8i?!aTF-?nIO#ww{~FY|H~|_IkZec` z4FbV{u;47{3kAYqK#NYcv%KJ$MW;dpzlFW5q7)sKVr?3Hb*9HfL zuXg&&fcy5o7ErwCwG)1EPprcUt)9s$<#^VIbPT4OiiAM`dKBFt?D@atbBLgKNIb`i zU+^_#s)}pe&U-Nmc0ISYBjePL3=yqQ){%)RoEm3MDZ;@XM&uTKMe75A0U{KT%oqz2 zg33WKkW3T{2||G&h)6;c3nsU|J@u~q_?0YORY=RKFIi>qKhgj1>))l(pZj6Stsag& zXO@oNXRm~waNW%Id%W0Bx5FQ1dvw{ca;t>=WWM0@{ivGxwz)m1oV(5D7_E;*hommd z{p)}iyYg*0sYrb*bI_qi%ML0KY3gd3>B;>w&d2HOG=Ba4Q(tTxQr%DZPO{B0Ay{Gp ztF+MynP<}ii2T!Da&DOKDXhM$bT#t>OzsBtQd!P%sB%Nc(><4GWUIfiuL}E4tKzG| z5i2QU*Iy=#wKn2O=ql6l76>Of=eo*D6t`jRLBIhV6p$okRddBER$gjrD3wt+d3<73=zQZ;evkUc+P{~}q3ye4eMr7K zrPjd&6rFXOquRPR$hXp1=Z&2O$Nxog*OrIm>IjPlYXV#DyPd3C2j4VjCj8G`>LVs{ zTM)QvSN8Y+&isp$@1Myh`$hk{>R-PO>-2w>h9$qn`7hSWOo04qhQ4!0uWr9F5vMxx zRS>L#G+`KtMB!!h=@_2A9H)C;T15dh|9ahH_HVRwe%{OGumD6ZoR~aE(e^W1okopj zWfawudFCns`*nAMESb@Uo|AUAQ!VoX#{B!hw3;4go{r~Q~^K^gPIer5YT^ha~ zK0Xw3{AVnr^N`y9TjiVEo&5T$|JlJ;eBCOR#^Q}O?Jyj4QXG%*fjOmp_aOzfH-py` z9xbMeW~|im)j?cF26ZN=T)Qpf8^(tiq3dgAE>rvATDR>SxBBW8d7o%|IGy(>UpC+e z_4|JAQ*Hjp?m_36bZ0;S-{+75-y9_@vY$nI)~YDqKmb1_U6we#^cT;a0tm?#kTI?w z#AI4F7pA+DwNXuDs(aL!V~OCb5gLP0s)-IgSN`lE-~l8Qj3^Zg1p>x^uwX1m3n>D@ zfUwA>7Z{Hex~t|jO=U@1+M;6QN0IzLn|w#hpC6-spGF^Y=@stsw_MmTe4pj<-07N2 z&Fre~pXD^%`=qV*S4Ox?{{i@5ADvUFI8HOF43y1? z(%*uRJA{*)9;jmyo^GH~ws8w8la1Z~=IR5UqENTL%F`cu+yAEtDf&Pe7#TTlm>Tt- z(>CDA+~JJNwqOi$WdSK>S(Mp&T%`DQ#0~)>6p$=43km|^VL;e078(VLfndN`NGJ;h z!a*>QL`D@M%NnZ5Ng-B>tKD5{T_*$Q@2LMA8~E+ry39Hcxm5L2RsW4uB#%^seomW9 z8brDL^b4gzH&OUm-KxxTpImdhE*dxG970~I!dkAw4vzO0-uy8#Y%Da`qdj>Jw*a~B z9PRIrep89%_*s}y0N((kKwQ5{el{LzDQQ4r0H+feRk%1cb5wDB{gQ%Sb(R(x`%M6e z>%DE-68Q2S^Xfp~ee3zR@UhizAWNXW=O&HeKq7c374J;LmzP~sPc;0$qFq*8B-Sx` z#7f>;kS_XbzTxfCP$v7*O1cNj9|cfs+u7IgeSXk5000bML7E%~3I%u47RBFv^eDuSKyW~DBUtfZ@n=qylB6Sn_=`uak1DD6)aU=pRPjc&;)^9;Ev9d3swkg0nD~g&BAj-+KTL zTH66vzA^#J!Q?l~LB9l<5LDh&26vPV>tdGgtqbgSatw;9jjLS0RwTae`&^}dUy+bf zifS(iuN>?z!U&DU?f*LuW>rT*)RAO?{Fzky_7 z;OL@H_jvuG?OG7M+|{qUSie@QRvs;Styq)Q`>X9`P%Y&1|NVRQu6+ash82_42gE@z zI8Gs9him>{kS~V+0$|Y1R|*mkBsC~D0?Z#0AA*PtCK~VO{R@lc@7m{@)i0!o(R;3| z*Dr{apQjmkka#q7b}V3#t%Gl+Hc0sx0;&P=fE@x+=3EPlz$TN&S%6Y!6;Cj=N1D@{ zK5S^R`$>71xfulKU)p%b%udfA7# z@Qn|b>y=(PabvzTmvu{O)$14Q)y%I~SS*;u#EwbizEa_|AA>=tf<_F31yVLNOdbJ& zHB5j4C(|0h*7c!&Vqm$tdyo8{Uw>K%_5F6e+WWbEQq|Wt>i?>7@hZjowCf5Aaih53 zvG$KpW91bj3EYn$w(9^HPkCktb*Z2qdAehXKO8P&5lT#;<#6y%PiFc*jNU+X0noq< zWoF4WTNU!tdwsE8{N@MkW4!GAV+;6Wf?e5$$a2`>E&-kLF<*()8T$M}2$-ZxO%cs2 zG2y1{8at`dNnoxEPG}zK;qLU(#f1*)V~Pea$6r<7p)$W-u1^VjtTk4aC0?Xz9KQWp z{a^KJ@JYR!ABD-ZG|R$W4T|Z@FPHaq3}NH|QpU+oF}IN`J$*p#xBj4;Rq8*D--4kG z-Rfk8w9YsWFBr!!KuR>}UR6i^^@tGqQ=rFLKF566a{u^yqlQ04LEA1q z)qFW7kJk7?JCJ$}Z>fWSCMw}%tMc6j*qtA~&G8j;erPY}mED72)OKID{6T9}a;193 zUcLIo`o$okdM2Ob2koDwhs%RN=wn z$7#dEuo8!1DZmdb0Ase2vc4TDamRt+UxV0sHjECEV-Dk3@5-GI)es|UJtw+^=c<1+ z7IAlP3ua~itez0iRf>iG#`Sj{hTL~S-aWknWPu6SdYpiO)ylyH=o2y1ec=H7EO_0P?^9tjIyYkgy3)P`gct=g^sBQ!3{Q--Ts>0eCh+(DVaV{*GXXK35gq@_Zao zZ3D$!P`)@_8{^^viWEEUHoba+s{;W^O&E!+4j+F(&=}5Hek_hc{em{we+ri^F_=$L zq9g>-hx+S8?7#fTyJh|TS@`L@o~`TEXMCUcoM4xG-w#=$`!Rwx2; zC%9dbutFK2((b6_U52B{34|#R=*52iguxzX$piKh!9%eozZzEd2cTiZGpzy7e0EO- zri(|4e7@Isn}!KDYS|DsZ^C%Kk9_}{=4QwD7%{loPjK0JdS&>PD}6WT!pu+WDXFG{ zfQwW#`k`v^!42<*g+ponCJ1%Z%`Sum8azPljr+Kzs1VRlIdDzUyc6)ieM8Vsd=ZOR8N$P#yoj zhIrrBFT->g`aY>9GdKUj_q_v@w{oQh#-w)3RdkL1&IbauyMP-!6gSCG>`azUbZd3mY3gf~9f*ykb zUwW}+TCD&59mm(eM;BFBqxb98;_trhyd_APaa*SA!6BzhcMH#7KyxT6%h7xCcCQ-MKX?oJdG0BZz%nM;H-ajvN4uGBfZM2tJ(CDqhre7n$E^ZKRHgQ=Zl4rr%s; zllJUDT?rmuQF@CHa?0kgl`79r*X8h0mE@S>f9qEd!K318(1Y+=%Cjpf; z>G-+4^=#Mr^iIDngLhuOFV0p^L&6%9DKU+KuYzh$E0D{O+lXTP7++_=OTJ!t6+gq0 z<@j4FD;jI{qh%Z+f9E3pIdclH1S0ow+e_i&Y|h4CmzZVjZ_Dkia*YvG07aij!-3bt zEua@TM_mD+Y_GLlo-Zx>Fv|MJoTnxEYi7RV2{I^@qMfuz&zwX*&og5Ov4J8ecraOb!n zX!Oy{>x9n1cLcyOD0UFjJ-kF`5aDq6D{gMW)fj4ff*La&OUrPj-svRnA;#q~-#AtE zchXTL9w_qLWeL?SyVjKtlj1cvo(CRge$c-Mz9;9sDZkZ3lmxwgn1>6Ekpx+8*ez-R z|IkIBGAxIhN<4eGQPb#4{<7-4j-%E6xjZ;&b5_{Nv@iHImZ##`3wQtv%~C6`@g z_@v#T{ikjQ{AIASJWKNW+QJ;T+06-uD1ooU{rg3ml^toYxEk zs45W+qENo<8uG79{*%yMy-{kVk$K0;U;nRHSCE^zV(QD)Ul)_p@Jakf7;D)Qka>QA zAi+Ua86FUAuzB#YfNHjES;?XYCGa!`Gd#l8ehHQU01PcbnjD8J1$TAmPgk#9sgn`S zc!hGxz4gU>v)V7;2(NxizDe<4bKPBFVHaKr2^GXV1G9gSwli^E_Z@00E@4GswwS5| z0&rkBND4Q?pwX{aYL0PG&QPa(*!k54D(E{=Xa$1qhU;Z$K++xQhK1lj4pgIR97l4& zgY)c>?gF?y;Ajg~%{`8dv5w!XmPY!qSNipO)mrsl>>2(G!9c`{%WlCRWo8101>lSo z^6Ehg`JK9hz5vqU;9nv;5}iSCm|_bkta=q=$U&-}#rs0kzE(3b8l8J$2j>v=GD=?YEP}0T6)}3GW3NWV3L6rH(ec0I&fdF)T#z_wFmr0Uy-W z`NV{@L00gTMccw6KH0}h%Kdw_mw4`4Z&#|7<-tvR#FR+kMV;cT@20EpRjpb+EUM-L zhXeV7x~pldSj2axEo16hrSLN2Bmj;M3;L`Fih0Uj)nXH=5N{#{fYOcE4y0@E<+KK-F|N)W{!l=5QEcg5U^g zQX9v9Uy9TycLsu066nG4j1keKBc;&Nsw*t8MN)Fpd?ZK&?PzA|!a$g4IX4ux6-3yJ zW(3r{O+$A{|IvO=#Qaa_UtO#B+Oglw`uBH4Pk$5S_*gN}rC=?C0)iDoTGpW<2NPPV zs;&T^1MblLeF+{VBcNqVB+K#nYvuVTpVi#5`t+W$e!X{Iz3#nUy_d(&G$$B32?*h5 zMRnf;z2LVr?eg*v6`E6NVAKU-Dyc~RiL5p;RgObi+GsjpU^Hy8-9T_@;VYW9;p0wC z1{bvBl8$4J&}bvSVO%hqO*eXVclsaQ)gt$O^g@+!9<3*<)!nPtUh9{K1Q^@Bd(ol% z5b<>t(81o;buOCRj@o9LoB1O}B_n3VWL5^bzmZ zUn=(#^7^admi=1&YE2nm=F8!s8vl)$Fc68uif7Y6HbIwJ2S%8upX?|!r$e0 z>LxnSe3slds|4nq++NU~Nq)rlTX)5+de^H-YW>~(Uu$2U=SXRv{SnU1=VRe{^2aCZ zJPxn3syvVX!$R0F_FJ#hNOoU(;IyLy-`HEdYg{TI+|{;;JV1rDuvgPwtGRF95!_&^gIdT4R>h%5 znwn*$zBpbX%>joC4iW-v)pR!Y7oZz4u_4eK3OWc?K+&%~p6E8m1KN=AP9@U*uR3}GzF z=)bgJmpcAxCtQvQ{40oyPlzbnC+BqojJ>6LRLIf^^Ek}EUoa()x34Z34g%rHHtO*BH^YG)3{uL(J70pI>|mj9u3lkflY5%9V&SAFF3{(*6NZ%Ey*PPRHYacIF%nW%py?HJ9SRm;ba^sSNq0;#R(vzg({Le}N2w#44)lw~&BWKCovM5JlbH-neEUDY&dwD;0|G z6}pS`>)@^&R`Wm-{K!dx{%3&U`}V7{l#8IC)A;h(%46}Z@W%Y}5BH`?~XZ&W`Wbq@5SvsnW0IUXm*C zQV{)EeTZ4bD)N5+U!g8lvRb9|T&t{}I78xuKBO^$m@pr2Rs1+4H~r?I49}K$zF09X zUtRD)<)s1|>rf4Mxe`{MO)t{ob;yG_DnX!uN1o-iz zyR*OGo6nu^2kKB|`|AYpr=o9kp5N}mWX6Ob;R}TkgZ>fO$3kK556bBkzEH3clfYjE zk@Lo=6r427xPAC6>?{(Z14m3-=29}am-o{Mlf!bE+iwlZ3g9FoK(&gG)V|syb}+zp zv^2+9;9~^l@+^|B$p0O?^i(eWbfHbI0@oIg@i$(mv29qe18SyZ&yUV<+y&bCxQ|_zi7( zVP;!VgY{cPV-DfBS%k0?;=e+{qDt=Q-(?+$80g?yIkpGZ3{}~2^W*kF?3M5~v)Sx4 z1}K4A(;^F!lDDqgq5}dHb+@wyHxFR76Pth3XG#=l|Agkd-npM&`zLqkOr+bB*&Y9y zI}sQ7BJRhp&s=C43(^12XXJ|0Z`{RJZ2wZ{=#X#S=FVR)-Ftigkmye!z4ZmeNdcCZ za+`@DbsydC`wU2<^XKgW?h%H!~#0kO=yReT`?7ko>C2ADnIKgOSn`$gOL z3T1}*dQ;pKcz|%bef@PN({q*RkJO zGcn8c|2S68I9PG1OG}?tiGSVVB`zV^pE=_vCDX6KxVf@b3tN!+jzyb1)KWo1xDsFJ9z7xn*d-45U|MjvpwaQc=++< z=MN{Kn@HdNdcAwK>heoZ@I*vokH48-CZ?uK>2-%R?KAMpj#1Hg8(tzz`Tb(Qr&89U z4ZH5|C%!%+NSmc~E^>L5mPz1`%N(+LsV=LS$?QHg5rOm+j3lG))GNY|oO2w>-tvAM zBXkOc7WSNIeCaZzwq3Fbzd>4(>({G^jK5lhiIWxZ$HsgqMPtZ=L?x%HiFf+PvElIn z0OhM@un~j?@cAD0I!dCK3i5 z2|t~0{icNQv&-!D8+a=Z0>2f5Kf0QMzV0QnJ_*CY^5O=MyhGl5kzh69>Q+;Xq(efv zM@6Zc@AcQ~mvdcRM5|p|+>t{oSf|VX%CF%Q2cX*aPj?bd?)iYL6>Iz!K~V)_w|BR4 z+P`oZlqUS{`9i;qdH!r{a?LHs8K@tJ^8=I^8DU}?gBui$QETW$9Q25;2z&@AWwlX8 z@liQ&g18uR1DWj6B+poZGcfpnEdt7=ft?4Bk4q}j@tI{jz6ry@d)?jL*1_r?LDvet z=u1iKSmpIya#h|deAVjYmb$C>L*kEEQ!o6#clms{5VCdF6cDT33Ds3lq+j0$Xis~o zLf{es&i-GPPhPGg-=(iwl8K+y`>XG-moLN#6hj2ys38V7ppPJuPM_~%*(%LKH77l* zN_`J=1hR(J_FrQp3-O(_2}Zu4F`VVTcDuXdu`jG&lh8)4<@K%zd%h-H#4UQ)#7Iv+ z$?!P^iX(74ZwCD^h=A@2hq2I1J%?(HjKOECE~NR+Z*>GV_4~Pf1Z@3ZyY=p=bS8%_ zs#Vm!wfev6+LiKu7P@=daEwlXjAb5+nS2hs6n10m2wh5Nu?ONvQM5yyFKEc$rg3YF za+eO^stRAiix&tQ694CdXSS33iQrDEZ$bGigt*gCu)i{fxtou{YEv4yix+v z)HPuE=x7wr;^cr{Lib?n^31PrmeUZ|_7TJdwfHdVTB?uQDQG??y?Q-&B@(sT<=W+b zy*2^?7?`-8UM>e_Qa-Knf!J>FZXE@{+*MUqYy)qh*H6JQaVHEQAS7NujoWelD)5%V zB1-g6Z-VYzt(3RuzWgv$wI{{*(nl`K`?`dTNS>bzjI_U(c-Rr%<~1_2eK!EC!qKtJ z25JqU{~;+!s1UNGe=J{XsO-2=*gQer&(p+AmakzXbm3-LJZ3>3wy;Kfs`F??@70A%NyCE-tlMa*#?E z12`-R3VN-o`HaqIush_@{dsXNA;HpC?%(SNVK90a4#a@qqdsTinfNdY9n1)ja1f4r zBlUnb+t7QH_REx59)<)#)8JgNmU!rnWU!rCDEGGKHhQtmE z)YF-7rKOPcCk-i<|Jmv^ON;$&;Zj2&B^iM~lWD}hJeN;TtDodu$XC#R5mMevk?}Us z&^_;hnMf`(5qa<-T^9QZKTG^8+(@*kZ*k(%FLgRAckwIT);Cw$^tfnHC-D!TKGqr} z6YB$@WYP|I>xILRS&HuN_q@PE@V5vBrI1SieY3y-o&tHAa7pI%mYdy>NnqFXEY10h zeO|WkrYpHZ9SZlkGSd0BefdkzwpJt_sS(QENpf2wtOR)-ovdLqZsFp8^m@DRv`E8r zpWCiaa{A33H*hvBn76#2pU@-_&EyCqZ_A%I424O1s(Qy=c>n8{;E+k|`ZgLM+P37s z3|e8yoln)_!l9s9t6JsCl+^!%F8%e}{=findV3+uzE8PPy)K9JT2@oMnl<8ZPGE@n!KKbfU>*mU^+9Z!c z__82}<$CeIOYeRvBlfo4ZWP9)FyA@yN^zt=65B$`wQJg9;u)IC%BSYc*5}VoF5Qzb*nBU=qM#5EKB5hZa$n1--O?~ zJ*$vn0q@t3m-p;309)Np9bBcTIQqE%|M(*pjK%I(t$59Pyhp6{=#~1#W&QjW+l?;T z-cW!nKCZV_n6U0zix=D!aeNXV?X`|3^tIRFN**&qCNcNu%X$B;&w?Uc%yRt;Vev*p z?;1CB5bZqzQUWI@+%#oJx?*NeyRE?)kh$cfs&GGifQz5~+V()8fY;04?DLBF;@^IS z0Ra0JbFJ$@XXKsD4Y6Z*f2+&uT&fX-#QPrMVb6ht$onK^h_TbYUpp8RWSBuqg~o|g z+UEYg#d7$doA}HaA~5RLN-3BQ?R)T7%k4To5X6ZL6ALX}{0a5zIn9}Tv*c3U{^I+- z;=WZcp|5_ve!s6?zd|eVSI5K#^&i1DMm4F#e*72|eB1d+q?pZs&T|e!e;n0Y$%XFM<;3p{Fmx^xH4&bERj=0zcFcm5$~O zQtvz^{_e8>)(JEF_u}eC-gGqZzX;`l2soU)~Y1=e%zzN0K7VD$Fj0O8x=n!>Vrfj7b5L0YQHURe?d0w zV!u&9{cV2C%+>pdz0aGvFW2jqy~oLv@0v6J?2iB8Q=iY?Z>c6{v;XCjJCE;;)c*Wz zhIj8ZUkOU5Ec(>EIMTk}y+s%=vG1r~>3k+Q5C{SYL_7#a!sQK#)on%J=;`7=f|@UcN(oM3;sT-q$IkF_cnbfk1!6?lojp@B zx9|V}3<*J+9fxWKf1xjT^u1oScSZmE^=|3}9*+3_5Bk4a{!P|g{jYc5|MrWjl@h;N z?k?{GGY%NJaNm-tb-(8C@on7{nQ+9gZ))2Lg<1$-HP35cCqW#>($BSp#Mt>qwtMlm@POH=XJcwe?n@}}IJg@zZ1o}I zr;SBiix_7b(}2$n1wH_w>^RT(q}2DEI0<{0&*cR9YO&UDUaZriE-4Kmb$6Dus(3TL z1Qds%Xz}L(o5b#;%K_7aN*7GqknBY%v7F1}%u_xJJY98MicV31OTr%O|8Wj=TS_jK zUc?Cv3EujwpK|Yp%S}7a9Ly3su1PMiwo9)<@}BDJ>hnqwuT10(3cewu)CmRwN0oJ! zfCAf`j$ov`K`84R-IV zYAT*#jZgSt1bD?{YFoAYT2%0gmmf->^#rw5RjxVoTfclip?xjgtg&7C)SkC4)QK#; zuWyR{N9El>l0nSPcmHU6{3@_~D_M%MOLcgnYl)NAtJW!fW!>?Wmsl2pK|q9BGb2#h zFd_Zi@QPeOq$aNWSR>hj$d*5|FwhuqC2Cv3dKrL^dXEh@WXkGDb?%;_b8^udszjXVB&J*R+O9-E!p$vd%qhn!65~}IKC;n7EH}Sc+g9z z*h9@KOqSABXO6F;{t&6)uz^LPOF?gm%3TY8ZQk~KH?@M8)}@Z#Rs$*W`Ub8z4x8}{ zRQuEv_g7R+Z6Pm;|5i(XtX1pXqStEvtA4pW!Yx1|QO~_~%0>u?GN=GX{5gjE$nZ-i z0aC%;`K|r32qb^O2=zdgn=p=RyU85l!sUSi8(C~VBT@KG@Z7aYfEF5QGsEV<~BbUlZR|=v>!YBww!o6I5Eg&ad390DuAzJr7&&5`fS@z{o#X3SmNK5xd+5 zkoXdSiWCy6sxB@rE-o)oad9EQRYpfkJ@~Q@Xp#Uc<_#2XKCZ$L;(eZAL7<3jN8QEHV^Vb~qMDii^m@7KReQDW@0O{*H&v);R0sGzAt%_qV#Wb{ z9FH)ge-dy=bC)X(vBH5YS3icrVIeaXuxb+vg2A;*z*Vk#Kx#mTv^)s_2LOuO0vrmi zG+v+8z-Sl{tmAp&A^E<{Nm(-y>=4Wt6XxHd zrU`w23Yi2Xu}V($t2b(Y^$~IWT5GOv@a@@D2<9WCYDkC~qtAY&%`f~tx16>YOCa>x z)g7v|8gHNX65yAiWsi)cL#!oJ7wEBZd{1iq5UqLttzFc@8}JYzgA-Mg@+5Qy`LRMS zx$~^>KY}N5TSv~}Xgz$Kyavk|&VbGU1Go}`L>X-0o`o%o4xNbpU#h$yPy>x?p#MIP z^#Qt|U-Ny-j4b;-8yXqjV%>+?Z-Q*p%h%X2xW|B%dUL~v+m4d^`}#EyF`0irf)-Tq z#>Lp`2eQS@8RE^}ag+$tJ#YRb$Ns6VPapJrwS5=(LobpArMvFUj;f;)l-KIGn)TFR zsaB9U0UI#e-lTwtbUBQlmg^t7zLGf9-aWnmdKC* zDoI?Vg`B!Q?yc(*Kl>1I)`dHXM0z~8o*}uqe}p%?=P^;@3p4n4ZB0OSz;?!Dn`cM! zH`o$nzu<=IX4{`8_xL6)(O5{-*5O+;q>f5;YX75M|6=6AVl7(!X@&^blOwA)sEW-Pk-?Qd*}`?@L(fX<1eK+V4XuR^#qE5rpO<2Ql`SWNwtA!yI6 zf;L_N?!WA@-{SLKIitkEQ+zau2N}O%F;sWQci*@tIM04G4zIb?32HdYk(w%97NzxW z>(%Rtk!i20E1$1^TI-c??1UHvN>%Ukb7gs_^7I&f=KsN)Z!eL$;U_jf_3V?OdjqZj!5ISIf1OdOJXmsgFUs12C~ zg7?U`bs7UBJw~I?qWL;V6h(Z@+vW^&zsvQyh9r%H8>WQ&bYlj5B^1AJWBLUR&o+*O zVtsHMeqYq~uB~dlYnoQ^+V!iou2YdsyM9X*ppY@5Axvo1>~#~KIcRZhyzG1>hMCIp z%PoI)({<>sejD=DM@f4d|DL`ygZ~b9b@W7fDmv@Q>A#e%QN6oiGG1{3=DfbG>Iz9m zAqDsaTVm5dM^r*wWLYNmh6rm`N47nhNW*Pv+wglb6w-Js(@-Y-=}O6bP%^E%@A2_i zhdrdfNhYxd@-vUPK7Py*HHyqV#&>r+n>Q0@zYm{6#vMs!AnyrQ3UlzV(VM8Rp*pR^ zpN9|a0-R5>$TZ&50?e)O`ndo?vO|`($I0*}5!NfJs?x*YqK-^mTJ0HX`msbp>Tg!< zdzO>x_2LYC{IphHb4dOQGNKp_0?HiLE~NBWD}H})LT8N`Y%Y8lUiW=;3?EnO@I)pN zcXW3%&SMfV5xXJBc3I+FR6lmYp zD1ZXSqAd- zfk4hDhRR0Gn0G80+!Xy|2q^^$Ok7=YCj{_8p=NAkSYnoZ$?ByfVTX*9Z0F0z>D6%> z1r<9gMUscYk0BaAxaymo=JO}qkyhjR%>{X{65*lpkhA00=u1U;Ev~%8=6}HvYTs4m z-GrabL*J+^?vi`fU$4WPy?l_7Cw@rl-yn>PVqcTqlk*W(e<304x4g3V=dW+vFMDim z7ububtdRa+a^1pL+@xCRZTz1y7v-ii?!oRnmS@gS74u0I{Cl6c_?HAfB~~HdD$_Tv zKN&6;OBs}D+~)*1x%@UB>hk_4m=}Tr1Yj%BdNq6pAU@SZvNjgkn79Ibutk2o4{2)c z6rlZbtDn)L>=9pgG*y1J`rN!-RlEb(PRo33W29oF9#SOS0M4#M=wCf3(ofg_b5xuOW!+qUD)0T zk5S!Y0i@`8fi2zSwdP<`d{@8$A{3ZT6bXfe0b)RykQO2Zf}vobSS}O`4MKq-h=g-H z_~fm~ijyX)Zflb~swRN$o0pZKzm3*O_HVuA?(Cn#hQ$9`n2jk}oIONge*Ic3qj%b? z_55{NC-2{Jwv`8q&+y8XKHl;QK*>=CG|9{%GUIJtvv0P`JP0O8Y1}?+4~NwNv7{hWQND2 zg$+bmavgYRi|^6dHT#-Ya=w#p^-`n zmRaPQU*SSvKR=YgzyTDQ{y1X>%abkQkV@AflbK? z|0n@nx_)R4yqz6{_zZ&I7;ObAZo?2KF{jg)X8#@)jgsAW8vpTW03HXr&v|HYbNC!z zm)cifi3?0;w~nk^>B&k@1VmEo4p=S1y60HAlC7*shTi=?MVIB3J zGf*z$zQP7A`=zcW!#YauWW=R#jc3ks#xsqg5|a}OQv5#{2Ut^;*jc$?qr zHb$YHt@B|;XVvZ~@QonIMQoV^HzZee4W^2IohnS%63P}-$#~8f?-Hb3z(iYmL(r3y z67atsCK2EaL>hCBS)3IN`#v8Vy0SW2dI?owRfV1xHCS7K(kns4Cjy9622K=Q(D5R% zIsZ#{Prk)fzh#MWA1Xg4jXNu#L2VxCF#*3z~(;aD@atS-|sNC^WIAaJl^@DG=w0E-721AqVk4=zEP z9tVmAa(WWSaaYlQ_xi;rtJST1zxUL+a;tWvPyglpW%|@dt8~3BdeoR3ps+%$H|pP? zImZLBL;W|l#P=5-d}Ol*>`~cwQ*I^ld*Dcm2vBfg{~&BnE(Ll6=fLR)FM|Z7%l{-I8{@vSkxInP)6del-f+P&4tEeZAPJCw zO0XXXMl^$i!Ei8Qf(oDEv*8o2{1$Gp=^S3yE9dDuRx8&p)!0eT(?8pDdh5T{|62WW zuU_hr;B*olg~lJ7w(mDm@R)1_h4`iMMa-kZ7_VNxSC`sd;k6U24uw?2_&0+AikYXI z06|Y5j-1%7R#kYIUq_2UEDz)OKK1!NqCwD51S!Dm3_%4WSR3hJc4}A;iDE=QKH}yfI0MYW$gMItZ+buNG-?ot9(};8RnwRk*sO%F9cPc}4>SkYZ8OQ&_Xyj}uMB z2bp|e!GRznoUys|Mh-}<70f&dZcEk~ZDoFKFrWN49JJZ% zU9(Y~n}}J2B4UISxhB;(54T*D1qJNzS-E!{;;j$UAe&jF(Kor3cr?nuQZ3cK$D{|bJI9u7UnZfLX@5g`mz6An%tG_`P z`D)gxp8b06s=r*S=DNU11%iPnFFa=rJ{>?+ZktswDPlNk_}r`m$%QD^IhiRUYK5}; z88B|6x|r6N0Et}RucjlqPhEN`(}*XZy7Uw8RqOR-&aK~0y;XP1)i0|T>RMkh_#}Bh z+rX44EI3$5)S1S|oBU7)EP%#pk2N$$7i_p6RHlOCK^geO2y;*=&ju9o_+mE$ozfgP z(6aO<&~l1!co1Jp{ssf?`Sl zMkL-pC#@nfzgOrY=PLTTSfr<3@AWE7IexoR)7j3ah1cf)*~!Af0Zx_y+*wpNZJY(b zC@vyL+sYsg@n2cDa(B-qFn$4x3l@b+1@l$^8*II~FD#y}i4pF`X6maX3VbK{^ zq7Gl`U-piQTsm7?52#Sus5xGkjYC-OAQ~~PA$XLsXNk?wytEQjlDW^QILQb|$-nI+ z0V<4#zxmQ#X5ek_TlMd>ez~i}Rk7XG>(%PPQ7b<$b$$2oKI-)S_bOq6C5KjNhDOFF z!2DYW1W%9be^5Y3QCVZn4evl zcM7QJTSmIZjTmx#Ad=gKMh3TG;Hv}lsK5Z854^PU%n*r2pZDTe(fBhKo=KPA$%D-r zt?+7WFflrRQ>av0jwWJ7lcQD0fZ#VPMq;=^~(J<`{o_>&Od@*?i;iC?$ zY74H@AtB*6;AT+1!JuO!6Q4#}rCQTXXyecr_6qpV%1~V>WXd+%c*{l0WV#nI+9z`N z+U4B0E&?DjzI%GWl^gIB!VGM1KyB&(D}SnaCR+2&`$& zN1(6xP^=I>F8W}R`5p4SEg9jvJKVS7`Z2paHoT&}tF^p@(7t$JU;Fz6pak0&+eyYJN z^=Hmc-TYygt2xCUZ$0sS-h8De!FO0Hmc~D<8SQZ+QvHD< z3?k_q-Mc65{uSDC<#On8_4fo-Nk8~Xg2p#@-{GywLoDi_-)s_mUY{0#Ho@JpHQ4!o^v0vHiOV3msMy9H$g_>m+Q$W#ECPZR<-P#Gl* zg?qFT`}h2xiGUJ)SMKwC2DRXQ{g;exHrDKU(GH8GdQ>(c_*&^8SZq8<8gOM zo?aqfTJ2t36=`@8f;l|^qzeGx2!OZ>aZzZv)!z2IV5En*cg8n%TC{@%NMz3B7V5*L zIl2&K($S0^vxM-=v8JpsYyX06EyJr>^ES(^UTnh@)Q^qThi+qyEXzwh9Z#&}%LD(r zgl{gZ_m^h7c3r_aZM%83w5F~Q1f(#4hbOI+mstR%Kw7`89Qp@YF4IyEmcmA#W4?D1 zVP!FoHX!!HbWrxVDA{-?fKC32zW(`Tu%WCkd(6jH=*LSx*jCD$p^lav15(9n{!ho> z1>NJg4>d(Y=`&X2sraFqkUl2isV=Fm6!XEJjy_;h480vHP^80^5aXE5Y22g>< zL2xR$6=w4a-w2r3$^9h07}G%RHA5kv_!KPNl>5DHzyD8!MP2X>)@)|0XY*5y8u`p9;} z##Ng}0C+!5esN$$0^Hy+EJz10I~LJ2L~DyV>;#1Y`ZJ6i|M@<1vMEN%=QDju0%+Xo z#M=SPivgfi&=~78A>VWKUwc#T8CZw;$$AonDd&;$q?dnt_^pq}vtH5}v7cwVZwBul zqT2sVuTi=(wQ>wCj05vB%3#ASHdDyA#8CnZ9WWMcmibkr7>8dd6nmie6=`huj;D)2@%pF%AP&n4COey0k(WBQ{#YE8|bQ(gM}A=Rti@4Lg28XPwu=v{1f z0#yI2!F2Bk_)N`tS_g3p37y@H{191(MzrT76PjSGqShduMW$m7uL(WR^{@Hr7ta6w zD$eL0$hq*e|M=j{zV}=Iv3eRxy8IDX(4J9##HRiFK)BZ6d#zq&hhou8TGc^O2TZDV z^OXqINg*@M*!cz+Ldy@gURb4PqqaiCD=|x?ePS{z0ppF3TVyT;*wm12>*V)B3_Z69 z$PUB2f=|s72{%)DooH7F<~Y$dAlB1$>jFJAxu7}WY{&0Ltg5x1wb}7x`kb=`+)oG} z@m9(??$HC=l6%j+iN>3Y7B1WIKfjg;%1HRU{GWay3J@$^=iJy@SNCezr|wCKTKCEH z{s?^L5iWGzY^0G-!&M>O4e~?61pQH@9XcBZiIL0+DT&UA^6}$~`btMvgFYn77fGg0O|v;S*Fe4{hS; zfsEF@l4I-G+v+|v&hGojrUbAWveD?$_FDU0 zSQxazEQeNhC{gvye88xUN>rfgy>reEtae}RcoG6YubU+_qP6coLuc82av2z1sHQIE zfSn_(xRK=wV>^=7MM=*Pv1no9r!0MMo@sj2T0Ag+mjhl>4zik2<;{ID+o`ux?{^G% z*Tb*M@kslcDlJm<%bat!C!_U5{HpcqQuwWnR!(RCF$~4O*Ik!e@3Rrv^8a0eBE&3m z-FPkVO4*jPiR32dq8I`1S0l5x{GLMF_>LjWxR=W%a^C#NIY7Ys_g{|V){$6=sgL_D zmX(BCgfH5j-vg$8G6Z)w*JFDCiW4LdXUw_vX1KJM)Ly;xKGWhx0sBzj_t|95k)aG{ zn;I^ZXSQVA{u>rTJCp7Z@$`Wy5n@npgBH#Hu%N(86%`b;JvZvPCYHg)m=A@TZ zn81QF=(!RNG<%-cx%9h}TBHlXfrva}U|>D)bwbp0H=@1y zGH3NprTWkRMIFCH>brv#*OH0f_PJ_Nop>V*k2Ke_XIjwY_XGG`4g>Pq`nmJ2U#onp+uFkBQtyfJ z=f%g5sO`977(-8{g=SI<5{?g;J=-n5{x7mecA#hy27uO1RuWMOF&GNRlYe5wbuucR z-!QY{KOTcbFE+%sHb8W&jc~8q;85~}i=fvq3|=L&(<3SxzQZ#G;Nf6)w*jI-u;lKM_ftWI_xzsHMS!OQ*d-b?nXHVS=6nx10d>m`FBW9$ZE9}$ z71|q=In_%D{uG~}_;Atyh8hRb1UxWmys(oHI0rt|D7tnmaaQ30!AY}*ll`L?`uAXK zBWc~=F}#T!Dc=usVjr%SiBw#s%pGa z*P%UA61_Jq3|<#S{=WE+wX5|#Ska-OQeGxPEdwf9NlWqhW2e7>l?;V)UI*zz;$ILf zgay$^jL!+44u_#}H2I37ar!{xjf%(GRIzT;pPhg37v&N;aFTl1J z1vj$ZG43mIBl%)c#OrZm=CkR0pC5q z(4bPBqGTe`N|q^CKPtIo?7w_XR)qI=c;_x^@3|K?y%9}#lWJdf0vaeG228#0a2o=E zBml-TG#aBQE?xC4UiQ_sgb_w?6w!pHhaw6CJIDA~G=KCislW5x^(ddlT{9(WGQi!`qI4l8X;+V@%b@$`6@DDJmAm28PN=hSs6E;mN?uk3l`E zh#T z5LCl}4-%6Ec;PvB3;-z{d)44g7#|t5n9dunbr6a~kHyAs3#zEB$h4XM>;DQ6aMG3I zH_;M)n!o5IiAVn8DR7bz_Ws*{JE$Nt-^c%)tNBbvON_o*YFI2Zm1WD%V{KS61ypq9 zw{x`xT30&_VPc4ayNgu~dMf~Abu|9p;9UpY!v`p;zejb{z0E84Af6@Kh~pz<>x*nXVI|T~@TX3W>YF1INMl^KlLaLFs<$ z#`))t27%J9jbkt%G!1^)XAkCw5gAuIn(c+=CSWQnJDI{S#I4Q4;$1e@L->+vgMXPa+g6N$o1$ z5Eul|p73sPFow)+O_hSvf*{Z)5~?o;ivi`8!0^{t`$KYuH*cH=wLuaaFZ$#z5_zrT z2E8!ZbNcy;kwYu^P>6cs>l5`nICqu-mIvE4DfHjyon`my9|-)o#i~^I{6ZETDiTlL zUnllX?3aJh-?)qITCSgrdcc|_1ZY@5fi6D!)(4Q76X@Oebm16DDiI9=8`np7gn*HR z16kX$M*sl;#RC#-3726PrRg$ZElx+}f-Q`Nsv%q4<5b=%|{1V>B6fr|4 zGa&t$b6#`H=B~dkmDjI+i-o3dxh_jrbiQ5DJPtk|_$oT~u<# zcYn-rmWX)p`1}-T76n@ymx!a?_^})T+2os!+%@0P*uR$U@5oxZUlDiR-mmrV*RIcB ze3gD|(*6niz3qCva+Am)p`@s}SP!f~_YV*TgOn$?gZP8RJ4Qbw00MHs5}W}4$go!y zAj(uU#2G&Xguz9m5}E|4cZ!Cw_QhW>qP-+GO*5~`;wJYU%pck@7wLQC+GdU#ZeB0mVKfE z;Z@@FnALOx&Lw?Xr|?8*$c1|H^&x}4G)b3j?e;j62uYh4 zo|HQCYf9?Vg>VA``$CDgons5R-<@A4zdEQOgTFn%j0PO@uaXTaNT!OC=Y8_`7(|G8nb=uWQ9Hqnm5kF%KEg(i zj_A?SFXhftUB5WK@4M_-?v>x?a(z>Ngw##nhY3>CUnqqHrc-}bU+-G=ug%PC$ff;u zjfDlf_Xvo?S=Sv{zDx$o)v%I?ve+=b6?YXD|8Wx8z|zrjE$>!@QYr=in_q=mt1a+L zhZ0L4Qu#6Kk06GEw^FRw(n)prM(?D~dlg5@6EC>Q@%Kw{Td3?V1r?~}zZg(Z=4$<6 zAvG<(NxXeo@2d&K`sc(&;z!>76c-m&2ihZnP<{8Zi>b0qz89@6SNh4p3i ztQQXjWUY+Z{21RheulkY(!F13v2dE~yH*QI{DL0RGI?kIzOEhVdG+B9uPlUndRGZj zd^9o~*URIkiHVMu9hCXpPMnBOjxR0iEb_s6mi=xB#El|E+rcx*P0K(R-RTH;@bMKt zi`)I&mv)EcC$D#YuvN?TefQt*IVZZr$BSa3Im_d!4#MDD9twzFSo~FD9B;Dz2n7R> zh$sV?P?>0u4A(~#__(JCuN{!E000dOL7E>2$_0JZp)V(|cpE?e|NaJ_{rzSC@4vtQ z%m4qca4i16?}2~5$#>P)qNN3D_D^5>^_7?Z>godCy%Ff2UiYjFa6AS>2E;6IMKx;$ z{WF~Xzq}8Dk_+F*o0lH}D0hNm7`cCfK>>nYAmq~(mo4}aW`a_AOo|UNkxslB2o`1y z=Z7Dr5@S*V@F93Am%KO+zYvSxdTII*?yX$toKo|v{<$x5Uucr(nQdx^E-%)$_*}-u zKy_5H(qy&{Z*TcBys)QQ!)@N(0Ie+JEBWJbv z>qiYk)N315zKqKUC1wI^!Qeqe2_gvUkskMJEA^_Pel=ck3s)uE{8d`kt9+2L z#RQ31DWRqh1-oG44|qXfet^R<>19yo3x7R_<3y;| zYR1_~T*iAnhv<*!wQHBs)U_@huT1_Xi~k$1R}t|N4(4jjyi8ET>O{CkafHqx^-ruw zAUVfxebhfMyS&56zn+6dJPG%!uD1D?ze8~yAdWsWZxxo8(sH_^{k{)gE0m(`Efujcjne>%aeu(>!SdjQl*odW3b94$TGPp(gHTSuzom)5^lul;>R|A_)fp9$5? zWw;Ome*Xq6v)BOpwHU{QH z8)!r9pa2jCv(xfQXdE}eI*c%C5%?u{;pVT4w{VoY4erhI2$!a8xS7bLG9qaO0 zDTM0Q_^bMjD^uvHNxK%R_SO$^HA+qILSUci(H>)_;J!1SJx+OMsvZp&jtAuDIff7AI9*PQ^=D~J8t?uATNc4Su7NT4F6B0tIoj7?qgM4)ob?4{vnYVs6JozTc(l$(!+ObU zR};r2X;E-L`j;lgQxz_**J?tbVyxoPV&wN${6P_A_rC@^CJ<%Ecyc4XC{B=`6GIQ;u}9a8LjwC*{=gK$p5mK*yvOh{)Q8S zT8o=%sms+>Zf;omf|7yO_QRAuhg$trwGUG=w1U&pyfQ=W>+KhNT(GVaVuZn}Yw%f# zh47c`zuZI{^c?wWRp|9WCcy1^v!^eurc@r&87_Yf4D^MR>3PNW!P#$49q5zj9f?5g zQ6JsZx)e~_|57U}noJ>B|Eu=BRP}UUjQ_*K5u3yv6SEKf_*6*qCgoP|uWOwx|BOR| z%EhmtqQ_5?HbZVz7IH8I6@%V_a~`S^>a5R`vv~%j5Eu$HamEI#S@?c3ZS_z2k3CgZ zWuj9tilFuW=(vQfLuJz2L}7S6!y^R)#$1hp0{>hf*rTKgea}P;q_2x#{e76XR{et6 z(!{dRwE0(x+mX=oTG9L=XXEboZ&Q{t@A7%hRs42cckT)d`+4A8X72P$DOE_tnxHJV-Xa!`zh+dldp+g;{5=iHk0ndr-R%1VILsnv)c8X8 zzVC1HOR+yLU+e!2iO9w;u3cU{!>wJLMHwbeW+3dw%PR#3ckcHV88}3P#}DEh-TwO| z=`hMgeL;72W8ncljDfvVFctC&oVb3sUSmBMdv`7F|3$d@&bpRcN2k!ECG+V@LK0sP z!kf=ggn$1=IxxiZ(E%9h*msinDAnF$TPTfqoNhsr_whyr0wQD>;o8aUud@D5U+n5k z?^QluP7?6ioR@x!>b_ssuiW|mw|=cf_Uf#L#5vi#_?LK37t$AwOsf=mqc4u2-p_IQ z@w@rnIDv(w&0xMbXZJu-jV)t>NAK|j9q}t6SNGlI^Xjp3V8^=!O%!)c#P}W6+Jcg zAzgpr2;Nm*UmG#`f4>j#>Si)=Hekp4fxRclJic8^m)~0jci*X^ZBdsL|L%mf`qy>h zDK0%L|3vTBFUi_z_7kw}5Q6XQC5P0k=$=n^{=5^F0hGjXSL2kBOg^V-_3d}|&V7DQ zPW*CJxkyr4q>prjjQ)(>^wbo%0|9L+@{{)4bE0mrY z**|geEZkE6)*9-DzIhCrKj@J6tE-xP!dkcP6Cs4RdQ?x<%W#RS$u^7@Kq9%ob)Vva zLl33+#yGr28ofO#7t?e2fgBYfe2nIDx;oh`MRROaiCjN|u>+7D2YwoeA#o?!NA`0; z4p#``?E}7Iv0q*hC?Gv3-eLy}hq2!hl2P$64q0ime{8$U`Edpfje*}2O?H*f!0WRELRY_*#3JIW7OR48ORWmWwP>h2r!uw{m%T&NUujK%=pRYC4Q_o`n`B0)dNLUV2d4@`uro~QOW60jlo#&@I+}~_uNQUHz5pSxc@#X zMBnLLM+3F$7Y6@8Uj&h-0_lF7Z_0xfnrnTN<<$R^`KsT)&CNvR{n;chJsOwjq&>t| zu?rEopL{3=(Adr{ZH@EcGI4*cY$8#v`ld6uHPqF7L$RsuGkJYIA{-Wo3wa$q@pac| zY*Tvo)q3?>y?Xb%xoMZto%s(qLA<}0>euMC=GTb5-jnlNC$E!C^bYgOxA&ufL+_v_MAFLd<-zP=j_beB>?1NiK-Q*79T(1g^U5`am; z2n~_&iOQzb{$0{~a0yUJ5-tJW4)_5(0kBcIav*$Y>w%CU3JB;JP=~f-*)u%LFOO`hY;^W0lXE%@{Hs4ArB0!$K~ z16oPhDt1R}fdBo4y7V9&@@zPFOcp-Td9HNVc*V z+FblVRx^~o@o`N_f&~zOE`gxNWs2ZvY{0U-AcQlyK@`ryah?!a7u(WH;)VyRB=OHI z@aO{LgiZ>AiZ&t%5UAEWcz{TR0V)H{%SWkrG}6VrOX~z}g@ff)=1Uf{935yY5eXzB z*IROL`ITbrHLeN^E;lt=GCgrWIk;I}a<@X6hz>{_H-;$q!9?B~&xdqYD+)kyf!qtE z1gGxBbuw_xb*7UiEK>obJ~Vs?uyk0PO;%sSbGR zsE{*<1z+}@_4>U_R<1=_;{nk^NvNJVXPF{%m$BBi#;_ zqPW_{O5piH zlDDrk#<>CVBHtYV7Q&gw+-03TT;((JbmSSRT|t z7;5H{(C5EvLgeqe(yvALB)!`AYZYimM07;AUa8Q9u5vHrvgE!O5E~pA5)>LYv5x61 zP4~Q&+lf>b3T+4(2OiLd4)EsH0S4u?u|^VjAvHtZpr|sbF22Pt>)?k>d3tz<$J8BY zhXE+^;?^&<=I{J4T%-`-GTF`n{;5~w;wokJ6QjX_p*QrcK=Wk)mn1*D)dbWmvkuF` zW~rhDTdqoKNcU*vzVDX{=4(ZE3-qyF9B{D(LoI$vTjTCUuFJX##{F-um{ zM=6S3cc>TSAP~Ss;;~o z7!(&(aalQUnN61&6OKYiu3UFGd`@$P!QxE!r<$&bjLmt6ID#$?w4( zAnx=aL0Oi&!Um&m@4+hj{3(jb&UwH*umEJhsOUTt)=Nr(nY_DuH`hv0$X=meH7*sF z00dy#9Ug(MG5IGj-{Y>e$C|iB5giQzuNIciRtR=erx};s(I?T+;rkXu24hWC$seM# z>`5zIaHI1i8!QLp7JG@PT*9AFqrFkR5(7b@)9Q40a4A9N!rP z2T_88f}ywj@3M{E_o}<`20SumAD>MVPd?0I=-MimUVq&)ypUd}k z#MZ^jEpt>I_qRekA|Mi0zSZcNciJs|_t_@nH8@(&tBMBye_ zH~+ws_U@rk{sl-LEy|LozFD?)JUFVxW)5&Qcn1W2c;-m9$UGX3(t$QZRM-xp$Npb( z5UwO-sQ(#eR@ant>sAR{aMtcHiZSkNB;Fbd z-r@%gtxrOKrogPpA;u#WaK~%|SB3w~;_q+M?w$U$E{1rej6;CN8YLGc*euo0aVk|+ zhd&x}-RjU!7pRHLIfp zNBD-CiV%=R#l|s5ml3G=siWjVB}Tz*Tw_s%2BGgChmKUNpp=OudxWFvmdlZQjOirr zPpHupsPCcp4as>!ro?1qnl+m%}!jnvz!!99ya|{%l-D@*{Q_A@oit+ z)}O_T@R#A7Gz^IOVyR!3HN+M^POI~l_JaDX&i;qy{&qMzxjic9#ust5B?ha%Ts2lq zLqbsG?5^-wZTS10io3;R3F?Ksp1oGNev2xfMI*i6^6g)lch;Zu!t?6=SO_o{vP z^N!`9G>4|xwat4Qaz^`y+3UqZoQ-=_``@2>s;fd;?PYeXM*1yH1(n+2xpp!h{p&lI zdxp*tCEYvPcG`FWDAbT96bl6cVL>urEJPCp!p4C}Oe7%*1VYVJ%4^n)B;U4UF7qiz zORG;|tG`?Eo=yH=;r?^@CG78r+o%hw_4iijKaL!B{3fE9>$=UFRnq$4JMHw}g>>_N z^a3q9!HkZ$(sb3J11d24dGoInzqwtG09yM*{( zAct)!NpYtQz&?#rH9gsX9~S|4fBpak(v7HR;bI4V=4y0DZtYdsM#?_(Q#OGjKwe#S z;Nb$BW{!|_$wlHAA;KumIN$V~EpJTK!$TX!?`BN%zxZFt-lZ)g6hog9t)&@+bhR!F z9ks7S4j|(|&02$i0U}h4C>0U~f?+{0&@dJp1&o1Uz*s663km|lK#)X?jdsiCI_`;@ z=c=i7klbq0S3~%kiSc~+Bjfr%i2o_8j#hVDzX_%O$H&s=5~J(syI;IG>-WzxI)sr8 zXn6a5+%xQbP@&R&nddAd#jCQXy4qA}r(NC!OuH=!s^q`?G1>rx6z}Ib10U!`0Y-7A z^~i9*u9N_8&<%@q`Rm{F?7_cxKymCJSO5e&LaR=7Erh}S#sK0u^?sFZ!e0pA;s{*7 zt9tB;Qt`tC@$&BoN!XWc|{J1Awp`YzwVn3?x7=V~kp?oonVZ zQa$5lsk+SCSNmxLfB_bn{v9T8T%j`W66R#{p*VC=N|M6o zPrVE_43j5n6tLUz{jSTfncS0B5owvp9{{4&%yS&3f~wG0#LkcuFwO4?tY)*N<_x|x zRDIbDvCLB}m9~7U)tB=4doM;8DVwY5xbeD| zjBTB+>l`%JLtnygPLH=`s}c;ZsT?h2HWf0-E~cb6%|3$N!<7XPL5XZzN*Uy#@`g$+ z#%rz9<>s!t4ybT@J}BqnedHaab!&P)S0Olf9G?FZkEQ0w*Dr87^_EgX6e|$}0c0RpC>9Ee0^v}woJtW11VmwN$BN^< z$W>;qddbEmZ|eJYo8w4eBJu; z*$d^O{vHz!-h6+*HeN?2&njr#w&#i6W&PR4d~05L8{DO=Wtdy~=sf_gRXsvQMAY;K zj#G`r^!{}r&ypJYXB@TeA*9J#;1;QYger3N^h&RF#?{uy$euj@o(N3ueLpH^u->r6 zt}Hb#gi_mYBn+ZVKI1F>yKhb2aVQQ3U6%u!SA(U-{H$$kxG9^~MRcTQqTKN6+IzZO zz$i}2F&e1PZ%T2SRq8LrBv)@e><+wtlxU8)u5wBR;Y|Ofqs6yf*sRvnf%p+o?P_VFJnn}ZjWYTN&U-}e3Q9q@9I*V z0)6=3GW>dcd;Q%YYh;6P;$2>5SniS;Scr>>dMc(#YCupyPV+)SIIiY70P9Np>Y@*+ zB>7@09hdZ0hxM7`k|IILSC)xrwIVuQCrS_i+}@pY9(1FslqY#=qKUDHOy};)Urq{4 z^NG1$QTedEv)9LvuE~7s9H)SFsnGoyB>G}7Mp`Jx(of&^fH(mlRFo)I5(S3>V8B=~ z7CMCjqGF&_CK4HiSyxx;@f535RTbB8+ViLDtm2__HOt5R5bYV{G!jfRmV5 z8>zVG-0L6La$N95=Z$oLx*Ox9VlOx827R8Fjd<@}oiw_UIUp$c!5}T|jP;qF*{)~> z>`aEtp){dzuJXVPQ#pET@A-OBY^d0jK>U+=Eb_U_+3H^cgzgoT*jx!=7ddboW|Z2G z$?nv&{A8gE3`GHmNh8G=qHwnvqv3Y}zyJUW3PGA62nq#%p)6hB7yrrsegBvL|NHOt zVp=D)_y1r2{}QkF`n$is*HUcV)`@%}-$Y-pev8}!#3R662=D|n6!Jb!l3(!q#D3Fb_GCvwcs$vP(2;9(4@aMqbk4fDGCI2@4AzZe*FzfV!1E$OutsK z%hggT8GxR(eyxuGU#ot-&b?fjJ!mQ~M&3r)Ttpw-AeHWh`B0#B(k}KP>XoTK2tfoW zL@Gf4eqZB9n3Ik_ET7`>Q#^d*7T@3mC=P;~OQbY0+)62mdqS9}MxiI*F&~srIYW6c zH1k{FWIAq=vZ3UwEW~J(8A<2WM;bk%Qd|nA(0ApnNfB(jtOx*91?3yzf?t3;HCEqk zw0fpFY$zZ?Kn)KK2xEa=M$Ajz`GOi!fOr6--2AJnx?LP`>kup|hTWpH0=NW558Q4~ z8RL}gm;THIq$l6~PcPFgGvP6yt!1bi4)r`#!BEb54CgK>H7pVUM*w97%Uzt&1OIx?TU2w7az)^B_R_+ zixqg1Wn@pi!$JnnEEXAIiWy;+VumPZ#uCsPk$(*0fq{=(ybRR??wl80PG?+ttBBUS z;Ug>Wje2wD7x6P7QS$_gJYv`*HS7tXde0H&O|U@#*>PA+sC2H>?+P6%oS5DyX_je% zpx1v#+uXb>_ZyeWgWfvHATVm(o^uL$XYG=5y-CVR7kHT=!|!DTIG{lGVa2aAG+0sgI@;MbS*ftf60+yEy) z^i>En{vB>w_>cPG?bWSUC0enHCabSkvUQr}>{np#E)f0%1tF0|@Aui{A!@im`UdzT+G!S~@f`9y*YW$^gm(Iw^1=i{LoZ zGWiF}n_T)~f%ak31gOC4=&zIXCaWe-RH3zVyS!4q@7F7$Wwq_3sIqWL^F8@8$ulip zm1h16D-dfCcpI?14EvKGI#uBQ848<(K~~VYu>Oq*3a@D=cjV!K#KMSIb`Qf^0MlT9>MWMfW4l zWh`su-}UJ4bXUYsrKo=tO;W6-<-1z=oAE^Btg`@OXJ7jHce-j({B_U@#o&Gy z?Ub6Vz6D4bu#O5c^>1-qIjo<+PzVHv0ug`^urUI{Wy{{SDG7maWK zUxhZb83O??b+qBeq8em6U#se+1BNFvJrTjF?eK8F%F9P|HuDR3XI z$30^?c%M(~q`&uV*YHG38MBL)UVbO_dzBTEVX@-1uMqpi4TksNQ639St4jCp0*S;` zb<(^rfPyo@iGq<2I05Iw!NR}*j8Fh0JO=}~)p3lUMtW^XgwmaY#AooVPyis{5al0S&{K}OSkSCOo9z)1-NM04jH%kq?8{yHkO$}wR* zjq&sp%`~r*(DwZsTKpB}%+N`l4)!a_QEq4bbzZP~{&KJI>jVBU*Sp=_rmolU&F^0z z!Hk3F_318JBIQSSkN@zuLmWD_Pha*Tl`Utg1BNBU|KP%3pQ4a2QL(qOgGrD1vxpUm zdz!9% z*NG-^g4rjI%Js>2$UzwOEXh65xpEX!O({G-++@Y16>1DYgQn3`gwxN>KX^c%IT`r`T@BuEpRI$NWIEn30Z30 z*P?_t*PDxmr1y0qM25Ac@ShD`NIv>hU?gv&-|$dSBh*>6ApSezqF?RTep(tkR-a1~ zXjWgByRQ|TAPTgTTSN@}(#tYJdM|#ylF{N*C+Gjs1wR0LnkCeM4`gZgp`>XkZFyw> zj;|Y>(Wm$P+;sSEe^xNuq#Gv7|5|MCEa%_W-ZOh}(}C|i9go0=;+NgdA<9%95(_Gc z>mb`0ciZKvC;Mh(g&D0SxkR;3ePk11N`g-^$IDZVCAkx0E$LTvHOpGiDJ3WZ^Jfc4 zXC~?DpvsGX^(XRu`ch#1w88w_b%8r)A&S1BNxYEj=nGbylt1DQ?`Yx&2leN*vhi~U$dvkB6=`adia*zWNbR#!7d@e zI5FZJNE~_@D*9o`9!jhAn;LFK65rHkNpoXQ%cR_kAN0Nm+uDs2cCUIyq3NWr(wpHD z{%a?_We5=|cKqt)%hpvmKuMU7o4$NLR95}MJiVo*!PWBr`HfA(W6ROn#XOK@)&4^h zJG6MK)zXvB|NMd_AHT^qf4+PkXqW$UNuIlLaD|?7q>1axg`^)|wDqO!ZmQeWiXV5h zUG1nJ%j;;cjXmda>Q$33X0eB8?MRz&_q|+~-w z^=cK0-=dD+tWuNT{P}%bPkyppzgkaAuImYZCB{AZY*seQ_X^8$V9#nun)&rF=7$s2 zclbg)(f&8>wO^t!uTfP>%;m>nE#yv2`I6AqkGTu~@gA(yxe66!DsKOw-AgR;5|!Wp z01Ib9njnZO1%1~q=w4qx>)o$SYUNtxH?CJ#>))$=tXF@pcD;7FSFOLQBjPI6zgt%& zdeq*%zZ^I?NEJ$#fbT4MukW?sfM>qE6Ef5IQZ$$r$KbT^;xTE{HdDh2&5pqDDbN|t zL#@e%#!@#@sm2$4`i5gh90n6<4!#IU)b{UH!7&46;8)E;pfpg^yTc{M&EeV0$m4ot z-SmE;UsA>T#nC(v?tdq}e?c$upKtHAW&d(r^2>!pn3GDM36B~~b*{n2*@NV9VD<9X z_v979ozaZ#Xq4h6idr2Z)Ley6k{PUDQJS z(zQLK0k5zxjG>~4&Z2EU0>FW$+kZk~Rwc+cKB4hMt300zYPM*S#DOc7_O~PLv6QC{ zD)_dGhe|d)50w*Aa8`s~pc-paJ8Vim>UuDbfBtvCz`}!tk-z-c3mjS#mb9V#z7sB1 zHW>a}WLVy>GbIX>o{85Nh9<{`^FDiyxy=UXyn~|u)Aj24K7aeKSN(hS>+N5=_34Lc zcKWZw1QE*hSdNy`6=XDDrU!al!~FlC>5}*3o|Au@|NRF_kI+0Eng#fmLDStZR#f%2 zVg+idwNwx1+BWE~5KP)TwK_t;_SlwTwaj)?%1|% z%4EC5lx(*GFBfW07Z(>7nLd?#cg5R{b?uKXToAU;ej%c9>$kn>VQN$R{r;qUMf1LQ z*Gt{vlvnld*RI#PzgWLnSF1~F)#~Ss$^7@pm&C+$!oo4kZ?9KcFI^!$>8bB9lvtxZ z5~uabPglPF)xTG+#t5+BAb%674h*P{16{)DtIeqTM)FQ!9QI5 z>Hu)VMx-E}W}ckBWxjkHb6cdFL6#2+XuWIty ziNIrXS10T5h5WmfgyA2dnKvg}q6*F2`Tq|_B^Tq@2aLE#b19DrE~sT@XvWVCQ!Z04 z{-d$>udgi!qF(eF#%^@OCs6u*K2XZ?A^(%Z^$;Q(5#nJtgj<*P-vw8YZ$3ky%#3MPZ>15#c_Ap=^CFgE_5( z7?@rZAfB+6q$p!n`!OmHsuusEKZG?FuR@o#dcW0)Jy@+*D_Ba00*^H{N({d?Ybdfk z+uh~+{3V#!+2z6l!3UK*pI_6BN?cfY71W}xEY6q#kzYtgycGV+zq+;itx(W|!M0L* zrCgzHvMAiNdQU8P1aDU2?loHx4;X&EL<0V{=sHrVm*0I%X*2emZr-}qFH*&CXHhu9 zVY{tu7jFlj=e|#sdvN4sF}KvZV^qFRd)!hCSiruE{h|JY=3^>xmz4|oCE+;nIhVVS zg-U^pdz9?}X}aI`{557xNB&=5aRe8=S6W*Ih>VW1m+#yaM`Bh!-$iX5xPzD8w04BN z^WFSU%TJC9vQ=xsqQn_hYOCTzvMT;16SdD-d_Z1vh&lxY6vwAV7o|8!%Hes_g=fZ2 zW-P=U!UCL0pn1jtEtssw%g}ku%TgYk#wI(o;kwiSLSU z@TAzkrb z_}jcf`ncKD%VidZV{E=0ZwL22!i#Ci<@sVQ1Pr09@mCjY|F;wDBTX{@Gn%=VUk|488gkpH}Q@LvR_ z=b?wjORM73@5`S-VQ+iBvE6h(`Gf}^BuHEL;IBm5oY0l@=O!r#edSh5m)Kts+Xla~ zouV3bxNd4)8~+++@q$lJ2@4(iMuO*>c~$vPEwD*Zm20rNj~97A3S~9G!PG zTmS#ZJ5XxWsM^$~N>Hn6)ZV4kCNZj3QB=)HtM=Y|*Q%9TH6tIpXstGaB4&+{SP?79 z&-ZuE{r{eO-{;)>dcR)J_v0aO?@{(y+&9)`(fr{?S=oMK?m%z$??aT|NbKv$@7%H{ zA1|@p=v4x9g9yZ>lT`_-xMxjwgUj`H11Dp16H2)yyyyT>;Ga>_QG z(AX>f7KbRugn{7BU=k{}o`|X(iBLjAym8HCYu+c00Rq7%~{VGr}(Fc_5JgYB)A`AZBT^RrB z+&oUOq_Nz`iv#`rllU6X(rLdZn|+hg6+8ak(!sx{GL9uFza*1>XSSxaobkN{DpfLd zMG4}@J3fIT{mvqu!SMUIj1k=eN_C|*eCl)Ue5T-J8&v?YG~xE9*wYV~%0c#4OCFo6 zWlk5^t@u0vdyj#T9U1@Xsh~NEfB($YKVsTasF`i@v`LT@;rE4z7rollJNrHAcN-6O z1PMWxeGBPQ(-e*NUH=-$?!`c}Ych~)t0;V8t6fs(er3q`spRJ1H^u2m?+~D)D%P6w zi&TBF$lB(9`x1UbL`W#Vz&0_Isln0BB)>VR+``6RMz%N-RjwKkkLM4I3~ODk9ra^CeD#%? zP-?~Bs_|O)2{yal`RC72>)el-PU~$ay?5J@=|A{+`0jw~_JmCK^&;jyR4NQ3ZQ|bc ziq?9O*58zULoONl>*hwhu|c8ND&1k*V$LripCYAMzb{6X>*n@(wiv+&>F+bY3RJ_g z10>1~stbdQ0h^i21T}|jwE6kh2OaHHXM=Xy#f}c;HkQQ>s<>;^Dmcu7zy;_1@`Y(X zqxKTpYIzsYEm(VcS3W-@;L`OquiwSQcAhDaV4zx*;j%ochtF?x<_BZUo%GOPzx9-Oh0%n4Wpt62 zX$hBmPcJsrn(UeTS^mW+T@N#M)CgoIta>8b;4qt{DDPK$|pz_8I%6Dq{yp-2MGSCdmo@>uyk@!XX zE~?J{>x@Sh+^P%NE7psgAQ5aDF);fJq$h|82y^cAMvyGwWRX#kKWe_B0S(RHSs!Bm z;8!SeCI#T%XGS0=Ju1v^UzhBBd2IOiq$Bk`qiDd%@t3`G3mU(*uhbw~Bzq&lY9FlL z1Ps2=)KA*ggxa7!alSZkc=%|5?92NS_lV5jpo4C@gThJCd(n9=#BFojWb@ezroia( z2~)}^EP5>Y6(~R?%86A}*et);R!5C{zP@>QpP%wCsv1Rqe1Be(SL;zH?ksr|e>d~{ zK(F4X+M~$u=bYz*$J|?e*`GEdn$@@uJP*d#ZrgCd`|Bl5o;VgMb<gWs`ZMq;D@!1YK(J$AUEB}7yK&l5aUjd(G@{b;cVk$Mq zY|pxJ{y5AT8y5m}SY|Xk|LGM+z zJByI{x5U~A(wprgdy?z8;EiT4OH)Gx(zRwvX6-)ne{=EcbM#y2=&{x_3m!h?yoK9E zOmHbzt-yB|W7udm(Ppqyil^WtJO@!yrx^nCj!MT#)<=s1JM{(@5vzrH+P%9Mm%Or^ z&tcTcIizdi%VhKy!K8FL&kVe2^Fu7VN7#$;539tW5JbgO;pJMn8LcYcTpIhNaJsX; zzRpa;sM9Bnkzt;%U0BrsJtY-)C0YNvcEpVa0EH7uz>oe}~_XHVQvls{N=?d>QCJ}nH?a#84u#BI) z#fA`XufUT_ zS-5aBE${2#PJem_h;mp;R$OprRMWhC_djtzg2(x61yBKD`F5DKXJk2f;Mo-NhcxiI zLxbJKNLR~*hcO;528*xY$y##b&)vO%=II|OBXZH78&6+T`Z| z%JFE#Ak?Hh6uTA*)$(@A={}qnlf;B}5ig~dmJp|u=c>>jVq#pe%A>S)MXhIVz(Xd8 zP12P~;e6!MbB^%JtsdqC(dgP})e8fnRy3eAfCl-|L3aYJRCRK@LP|%;f>Yh~C@9=r zOQ)#HC-lLEYB*Kp=hZ>I5;w~8q9hMgGOH3%} z=ssx)9v+WScIfPx`OD!C5bDHbQXI!z9w^CiPzc z3Af9($y25M)XLbYUG=h`a)?7Syja#K^S@MvNojIh%)lt8lpKjQz7QLwMVGmoR);y_L=IZ_rhMgiZcUxb5IiYlL9s@2qY-0`e6^?;!CnRDfK7r&k} zegV;a_Zsdrgxf}r)>h<%c8ENJ%7h^2#FAPA)(rC6lXCuLJYn^-^3BG#eD!_u@Ti6o4g-1{3 zxv27IvlPz!q&B&?WnbjAxKHri*<$@1*tKlJu7j1yGXD6CO|`($S$<)7tyU8rmfGIB40 zf0yB-XXp1K_;~Y3_GJy~?Le4Zkxhr-={onhOOE^q<(3wIaIn%}Ra}ZU)h#=bM%HVE zlk|1X5&J)dlP?JRp<%H|jB#NI^{TkxCusB(whBO!PGK2n3<--R1|*3i^(U`;o>x6a zzAOf-u?~eAe5>cZuE3j|@WF4ZujRjf$&rlxtT$Jg7D-X1ABWLFbRdC?8){w`W|h+F zqK$&A<5u&WCC&dX;qZdC@m9Nz?%qR?rD-b&st2i~^N%=o-O;w8Ub9+k8P6RRq??*c z&s6Q_tJyA9vO$I*#s`J{x{}nyl9R5Ea4T(Yo&IRAkO{7+l{gVRdR{cEZ|{hhPlH z5d`0{!IUd$@2xV@e*SzWEy(O5G*-38OQu>(?fzrgfQS3CAyByAR#GMvV7@jFqnAG4Dz@)*Eoxhi!~d(ddYy-XpISZ^fcC!+6KMMyl+}prF5Z~EGO60{_Fh^? zL70RFEpN&&$55n=g-X>L1CGmc*urd64Ey_n9b#XC}-qYq%rH=Oc~k zOFs!bsPr)gbolvD#MiO)Yz*qWh1fv7B_5NgiN8-rB<`Y6YfOfFG=vI&y zR(O5dCa!~{u%)m`%sfYJ!P`dNpy$2wrU;R0^}Y*?D`5fp#bcT+k=cAU{R%^{66 z-)~j1+O#20DpDpM)OKer&oz?WB8x2b%g;{1*#Lm#?aCJ`BbDDRB zwRzG;PYWVIe?9yz`DSH4d6~+(cSNdIrz8rH$5imgP0Q5w@mDY2hG1+CWl^2)UJ~f? zs)8LS80_}^6B6NkSF5Id<^+6mLA{l;(Q0(bl``2IjOx8Ar%BBsll|7Wu$uDx!u($( z{5_u$mePau=Ui2Uydhs|HnqJeoqFls)ud~za92-pJ@Q%!XN7{)LrrvnAe2aixw!?5 znX!jo(`$W8qMS_UTZ&%Gy45Q8YEj>{!@w!=W%1MeATjmc$Hjoa=dp&o?=Zy!>pnCz zZtNjx1wb~CO}*Qu!ntnr>l&-R(>zt^_{G_p2q%1mQj&}-n)SnvA{D&JsKdRG_Nb5G z4)5KVk{YpvUl3T&V?6-)sns|`cL~vXnRMUiZ*rBVnX;N}xx(eF*;&ejxe>Yi<&}`r zvG3?Pwx@&|$h;1;ndNy)-B-QP5CuY6*+^^3AL~cN;Y~tjS)>KnWNYdcnU;8~G;>f) ze*u^J%$SF{5x?r6e}MN))?7ZdoOmdw`p+_0dUcT_ z6R{^KLr$`pQoNP~fUb6nfQ4kszBTLls$Q_0ggdfM4MA5qd>5UYO1z(fFWwmIk3g)Qut`NcX%wG!x%CO1&{%^RT_$TC20}!lk-NoSX=V zv1TDw{ZY|#t(1k8POc^!4jHPxi&rRq7$h}JMFqK5u)1g9V%(BZ}34spuzjV2`%JRv*dKh)HUSapd z!Jy%{*Jtcu3ml(9GXRy3_@)^|t$*32exK)<7rCQ;PvnDk zOsNZ%tFav9;P6|tHOi!lM>@1)J>I1~$bW9oHma`fTrt|2Y?dp<*9L;B{*NNKFQFE_ z5;wKypB`a;42mG4j*E;&BQwm2BMh$I@P=o782E}FxMP*`N*cgicN-I zzVckz=Rl2aca^qmpYi_Bhu{CwW7Iwk+!#9f4Zr+xXq5TDKJ`@o&R)&u_k~ZxG>i;b zU${|S(?xkK=!#FpXk41&O)dIenj750yGA~ZzPSDx-b}LJIbHN|RB+d`)Qb??*UH#e zE$ih3rb=C;a;ddUg@2t3P`wn-aNBYwJd2=S8n{YrZQE_tNP`X~b9%!lO5+SY!W2!k zg#~RO$f^b~$O0A~XW6^pdwSBI`No2&a#2#d@UY|bwV zQ7MSI-$8b@~MiZ zkFDwq`P8?Nw2OItc&&+b!7i``F8!SNJ!b#2YkJvrrz=@e%PC0o>HaXmucX&5AZ?{v zZ)@Z-RP88M@ZX<1w&kbEG=nh`7Z<_!NFob*oGfNhqX>$um~F(9X_+5GP;NS}uj-CW z4ht*rFyF8P7@)tBN_Gge6HG>%dIi<*33~nFSLXfDd*>_sI*yd}tk>=MB-iFpVrgtQ z{DV3f_-c~GJi|UcVHg|+2MA*stQba&2xV(64z0koTP}oUshxN}@@{e7=n@a? zx45oES{rK}@MNNujOtol7GNG5+q~~l&Fk2XI%#P5$8d*aqs@PF9No*DpWxkPu=WO? zE|9Npd$~N|D)dODoqp-V__w+PM`e|*U47I&q}6fvVrRQ|cB>d!4`duEt-1iBr{$xWo3o?c#ek{`~F&QLR*U2T=YqRAo)!pMmOr-|ReOl8<~z!j^~kxqTvBR6jKN5DRp$&m;>YxI9?H zoDG=fM&Z{7FQ0a(mMf0?BfkGOMyiSRCSTxL14F!z*O!W|WjDy3IR2Ukn7P700c{dq zJ-i`)co)VUh`>DXr(xdNdV`V=pfzjEc1CEU>-y+!?X&wfl>Qa|mebkk;K4{TMRcGq z$SJ$B>}3Pk1I94grWFAKjnf>@L3>J&{m$K*3{zifMmI#FNX6;`2G^kgsx`HIKFWA< za2WsyU4YN@@)JC9wKzXpn_ka0=xnX}pV0-RVLYLZAmK{kK~kNmyiScGgOwS(?JWW5 zY3{a#_FY1QJ9(@h9la}^rXR0(1M9M0cS*hA029+q*1gyjlC@*;mpTM#=G(9FqvSK) zSwPMeZyy`(=^nwOqYf83ZbJw;H@}wIA+U%a1)~^B{pD4D_rgrN-+-}!EB`}!oPTeW zFO0DiLC!J8L^=9Re;xe?AjK~EeALV4J&9{m)dP|<`HXQpk3eqC3eh_$j!@*$w3a_Ps+l}XxOF%(~cuUNB1&fRI75w7S>C^)?H zuMT3du(x*W`bM?3P}}s@wO7(kAwlpe@I@~Ff_5eK__X)3b!lClr>v=6k+x>Q;3Ry1 zvhv9vck9BLu_d$WY!^#Yzt^bn)>gFb~0l+^lt-I zA`bFXyQx8t5EdB<7%m*{V}2t3!BfjS#<{6_m2&*YKn*@SFOU@ZD9(s(B8)LLJV@|h z>*bKoeiFbp7bCv!K)b}Z#EC02u^48{?f87qM18`B``bf7nOLv?2LX|&!3lbT>bek_ z&$7g_>^dPfP)m#shDzyer}IJFQ(wN^8H<1wA(bRLB(RLgbf|su;1AZ>;b%NO)9;7R zb?-amU!0Ek__m>!SZc~S%FO%%Ux&oJ@N-^tDOL93wq1Iu%|c48a(48wGl>8WzmE}Q zIZ*qlCrBn{+2|4%=79X0u~71oC4Dh10p`OX--JrLrHfwQm+bxV>2=2)uQbYH^S23M zIWcVHjh&Zw7Q$e+O);o0{*#b>-6Dpg21|eqe$w({mta-HXaoz|7!5?t3FPoKS2_!C zR_Q$d{BD;ELB?NF=xt`e{zf+NGM}G=i;uC4jPQMAg3quoWe%ruV}Smx;YHcx)#ZPe&CulYaAhH(A?;*D0{%Vvbyh|+; z1Jgeek-v-e*RgRviZOnh_p9;+z$7$EdC5_E0pASO3lCfa6``+IvWNei zjnr9Nd(pI?-`tr-ZxA`c62+LKK=+*iLwJ|LSBj>PFPB#l&h1L@@TtJzt3!tLlu}L? zoH27p_cMzn#EjI&+sC7K;aWBIKAWc>oNbKIet^)%HC+K#qSpO z{afC2BcdGN<#NKWdjGb?uGR7KGd{mqj;c_4gZ*#nslE8(1~*@}iF4rd73m!*I-Mk>`vBjD$VKbh{m^dgi+SMYOHd7)uX zS2R4)?alr^|G=!XWJ!j)a6YzralF(fyHb|aC-D<_JNP%Ft2lzdT1G9h`x8E;(;YYU zr&k^pZl+9(H7|Wd+;Y_}L8SDtS(zr5JPzmBET@1c8JJF$RPn$tn2$vxij4pA!ux2= zrXZ1zaWyJ-fpGcZ%GVD@hOg@EEbWR;mQG>8ZHfrUc2lrQZ^`=bv+nZ?OL*y_I>WHb zptkEy(9*c1BwGQ@I+;#uVB6@e!5M!_MD=qhv^4LjiiNyo23D&_`^x}XzPkS7^Fwmw zOLO-izQ@;?1tux_Q`?o=^jGZNm)%63XCqxca`)tV^G2cVqTkY1|A7b^uSe|IiH&pj z?@c+`g{^+|S8@Wlfe5I@er_Frh!Na6q!NkG;7Ji+fP8DY(=WfTh zlVrxX?qv)zIPZLSb65E(;1=5>It4H8{I;dKQff)pKi#Dyo6{s`NMuf>*KlS;N6xkd zvkdH)7+kscagqYr1wEs}ED_*o|6iw6N^@Hw%W0v;5qu)OC>Y9q)zsc7d72r7{3E%K z|5x~srtbzaLZf>p27{18rGDmDv|U?%7|yg8S8N?Fp}OkY8T#pX#j7YxG$dR`!dnuP zR@0>Y8RA@{pKqb{MSNqWGz%!{$ZNb?mfSN3nlhDp*!V@~sl&%c{xe?&4h<`VgTZq! zn3scw2^^qYRfZng7VDDx;!Df@8KkSU8G@4Vqs8hA$N`d7kUzJ{uohU{uKJZ=I-(v< zTC%I_d09<%S3kzgcybNX^`*W9H81&FCd6!YBr=p%$o=uIYa=ICtS*YFgP}WgBFw`o)wfO0`IHPdJ*3DA(zRT;OI_AOq7YR)8#5Zap^Q68ro`Ks)c=;xDCU?a zLBAS&$;o17bUz-XuHpSd#5IF8UoGVwH0c$q>3sl+IEc*HdiQaOJqgqKx8&JJ+m1fA z$A+(Dr=Ne#>5R2Ah7T0lTQbPJBsE<7PBo}cuHaM|;r?%W9u!1h=Mi0#w1eObpYG+H zh#NlniY{L?Omlq%=oq8EG8iZJ5?WkNuzQA(UhFJJ07Jy~-_GfIsKCO++--@GOU57D z2Yps6K*_2W$azjXrCn(Mn#b?@0Y>5nMi7AfIZq?B;2_SDt-byg5*42ytm4#Oum0E< zi220oMCACzVEMdWw|i1wPxasC<`@>WHu~Z#(4b^$?h&$Xnw4qv*QKavZ}IN*N{<$E z#o=uQa~uL6LB_0%7r&%qH1p^D!Z_0A=v(LZHz zV6pHhy9{Tc`r>YuY76+;x=~TTAX|!}ywDHwR=I=OCY8OL$c{b)b0{(a68IYIh9_f_qU{fxV3KltG4?? zsqj;q-F~7OKAx~GN9q6Q-jv|P<0mYmul=+Z=~vt6UA_`<-4RKq{I>^&4i=opBGTl9 z6+a#}rPB58pr-+11FAP??mUu1pbth=U3F>a+CqpL8ux0$Hub+Hpt0EN9XH0nA_FN} zT`-*+wgH-K2)L>Y**p+LB8J`v2|g+x51AXs;w(`Rnd@}v36S9Q^-ZUa>sffGeH|+P zzK_lQx|0{x!J+CN+m(%o_})91PL#ABJ8f+x@YL@Vy%7M{t~9I6(Ktz&}`efg1(zFiCU-oGB-v7 zl|LZ9f8k9KrE10vk!Z&wY(f@UQsMZ3_;@Y&nz6FV+i`3TNtZr@TQg_5Q+QmuAExn+ zu)*GX5<++iU6n|LsK{a?c+7O*>LL41b?NCaTO7s)=S>10hvgp%{fjrdn$oZ$i5D|a z<(?Ovu6zHt8fnNpPWg~fSecdZ?cmetu;tS7JMwwWyM!CXaU8aXg#%2wIYRP2|K-e~ z-;Ru3c&L59b129Wd5YN^&yz+4L+po^h)=>xC>cKvOc?n&TfM_dlgJsGT8^PdR}AY< zD$&0cUP8e488cUq!8$)R@GIG)k*Okea^N%2H?@UOGXpEcms&?v)xo+~q%AvGs^D>xUVIfvh(E=0= zF)aT`SHa?1Tsmi~4EF-hBC5kq3E(ekn8>EHa?{Ll>#XbrQs<#8`K74ayb*~^2mlQH zdteZ~@gB9{7P5XX!uqT2D0@Zw!IhSnTgy6#)*CTW@r2|0WCP6Ym-Lkm6lMtnH&eoh zmvHfAlH;~_ZtFn0&X->n2EG1V=Mpi6MdmL4oEx2z?subj{ zXS{F3;@tZ2Oa<2!Pp16w314{Umv~Kj4>6- ze2+&>mn(J(V-L-O_SOSttHRlOUdPn<8;}5m)iI4B)qF}<3Q6}(kUmL|2hClE#Yj~Ynn(?tRUdIN1uKtCHJ$}YB#2f zK3JvX%+uT^kBa{pu_p$GtW&+Oeb++J$wF1#v?O)VdfqbP%%{>ILvgf$bPzKNRH|p; zp(LAyExEy==2ysVSZS};@?#xtsll8tEK0feT>1J{u6k5kbmiXPPSS<23^3~Nh91v) zqy>}WHb*V>ShgqOrJ9=ZkCI6Dfilt(y^X3VR}ucUfP`d~tEwYDk(fUE&Ql~n2;LJkd`+PyDIpc&0 zR!ZZgJ2FsUN({zA75NoRpU6CYC7g7tOmsYx{6KG<1}-W(Ai8^2zc$QzYASU-xFr0L z;hz{e4n;FWXF2`O*Rz~%$!)u`gK)>CnehF3wMn}8Zodrk01c$hd>P5PMP7URX>JT* zDRP5G{ej5y0JWQ&Zh$?S z2&vD1M$9H` z{@-nF2Ri1Lhqt^`xDljgUSrD*!Vc(|HK=)gwj(YmJD-vc|Gl`8j}Dr#x@eIPo2N9` zN7>-F&pgxA0N4L=U~Cd%+hFiq%8dBSs|HTi{YGj;y^=iqN?S%s^}_;E75)MY8|4XA z!Irx8wry189I~7LLtwCAenE`z)EV3g#_+Dr!Vm=A>xH*?&u*-}1f5!f#Y2%tkz72> zAPt;z1uUdVysoNuX9JI(mb`I;>_jb}pK|Q~tse~*4T)E~^oa1B9c|HzCM4jiIm!c7 zS43>G>yax&jnW?X>$v198!?QwaqA*D0^@LXDy`aN6T?$iBX?(jUa`d8Q z1K8CFpS_E7QX6-N*(v%==Mrps7%XKt!*E7k*Iro_0+nJ|EuoI-I*YYb$Kdlf1p;XB zC=3GC8yXFGRcz)T3`P=;h!+uD6r}f?$<_C@=2#tc->H)cVS3S;tt- zN^;?n@VR1)-I`$Z+YGoont|y#V5Aj#>A%1^^gp#aYs%idgzG%fwE5F6oT~-w;j_r+ zW(nmz%!tiL;LpjzsdmaZC7JAm(@DA9C#Cd9tC% zS_rR7A$r0O^r|xK&%)w=-B|6&2s&Ia74X%6N+Z&0GPpk-X34ot_s02Xz5Ol>BCky% z+swB+-#ka}=Rk7PoBS5r{mi#J4YoB(lDoYe_6FS^IB^eP?PP>TJ_wc>3zPZ)w7jJq zLo&_8>BI1cndCWgKh$za3G^05&rX)2gro2+uP0Zf0jWPeEPfy2zcKd883 zxW6qI98PKYo}P9~2~M7)n7bmtyxrCJ`|?0-_=hCjXVG|-Jb)RWe(p~B?U*yZM$^5J z*!8#h+6tcu4~&zyzJ`5(H&E?|xQFKSJ5fYxzJL9OTO&@y!9g`Hrd${2QB;2G`F~e) zqbWz{q&-jUF$bIdS$#;4pN5wmescy(u!2g+_@WWN7Z7(ZZR&t&j)3q;g9B63^6%U& zoSSJ#_!dslZ*2a7b=IC#Xu6b zJmVi`>{L7Nz%ZZvnGOeH_Hw;jpunraY)~KDfLMzuWeVVz=okarh4M(>yTs+?`m1J= zK}{rYNrd#VbKOtDe8VTOAW`NKw=~9>P4bEQ&tG6cV$X~mo}Vf#lKy@#fU;yy`_)-B zT-1Z=9>BDgH>)r`GEPB72}4UvHnS4B<9Zx#@W#*tzPRRhimt;OL27 z_4|?2MCzKEcZcT#eTrp&4^oOB{dh&x!RK5Yym-N7PnX84>}fa4HgtCo5b6Fq=NJ6A zU<^JK+^gtIJabnSro6(bwXp8N^})Q zz~NUwhZZx2X&nl1vh=6%vzjv$7@I%hpQ^c-G3pjdq-;tp3y0Ic?cAC~pyGw))E|hZ z9GynrxQ2tXZAP_^6Wh_@VP@HM4m`wB-wbaURYGP(x3%&P1c2U<3b*3Fz;D7fj&^L$ z(f@F8D}a8Eyl|N-%(5OH0$tN%e(SZ->>4nRL!9wr2QGUtTm{CJZMr**G$SOW z=n02kYJ=PM3aH(I`<6e?g%Kz5NY!z5cy^<;3p^lR7!DX$2J`tW;@)->XS?fh$g*_g zMJEc)5-x`FWI-<-6Pxr@XWBhB^6~1~o4{+p1jQQe%U|ahLiQG=K0DQjn%!ySOq8+^U;U9wR-P^FMII-DBwp>&?gK}(G}SJ| zpFQJD)BMkUL*wL?XU=BF46|i+ujZz8Ga(=1b>bt%U$ET*^`a%!wQoCYeW$%p3idwP zHUA3sDEAz5D=ENHF!Y;g)1|8Sf%a*eO}!OW;Eq9$N50Bs+=+#&;v+k{3W=vQ(e{$G zA&^l#@kwuZGU6;}H`Sv65Sl;547fRK>`3 zr+bK@ zzh`2Qe&F)Qx1gVP#R<@CADfJ6{bj^>#_1lOhVD;vl4ep$0CVl%{1O0kCBZqxoWl4$ zen9Pg5OFuqd}>B0BKKL$!SQrYliWI8NVW7H3%U+bF9hh?`l1R#w@KJ@IBEUrX0ow~<6R+(cI# z@0gXROf-E0f7ys%HU=XbzV+d0TA<=Ar>y?|(D4a1GPryl(72US0!0=2^+7@B7NCEf zCwIF6Uw8UE(T8CjQ}?k*RKwI%H`CZ+U(fR0V+< zKhN$g^=x_Sm&h-Zm%)&f3J(;{`a?9^fnBD4b~+}JKS*>=bP6^D%P~fJ{acq=avebZ zCCmG!aPVg7=lBV*&ZfR2MF;7I;0t4LOs8GG(>QR8hlgCxdTeh~u@QgX3OO(tJ%r&e7hdQ)yB`S?5uX3-hD>{|#w~22~hs z^clbS@?d(Qdix3FkfpTDei^MBb~r`%dmy0a#RB&Z!H+OHXV+Fwf0BuImA?qNyI!3_ z%l!qf_;mRS)ZHbncQJa2N^0+*wVnC6CMk6Ix$oBB`C4gpHZ#)b=esg@I3{kSBz!(u z!%y)Kgh3V^rBK14o>zne4=;nHQ_n^l@Qvr8Pm)KkEw$6awB{rk`7a?63iCYX`{*21tWdvJ(eabF+6lB%Gh)!Mx8w=8yd2HsxFV59?h{S1{j0Prs`UuMrUZ zD)qD2z%zDn?M~MxN1%meZ5(#2gUb)AQ)5}^TK24TT=QY>qsRAiG zCD)&Z{vL1fcw2z*%*dm4$IU!IUYl_P*OJ^0ka|JFb&VGCAFNf+{X+amsD{V(+o4~s zw1Yx?03@~0>L*I@My-3qvc>R%CFE}s??a!8EBrvPk5l^Dr34bU z@+2~kuLCBQo`rhwkXPu^*1q(w1$xrOvz$!^3E8Lt@*fTiH@z3Z zQvMr7sGm!wcw*?74cWkhyEpIHSRIcq2QS`yp0DHt{rbpWDI9{DE4?5Sx>&35pZN>C zMEH>%E{lAzrII4cqF@rJ>~S*Hmbygtj#RBsO6bO@r}1f>tA1C>!_^^mMzrPH3R(&?nGHE-*dMsBrEEL4Gl@d3PTCFgoGO$8mvA*;%lXq(gG% zN)bOMG$!}=+Vd&Ir`;<`t`{K!ehQa&Y*)(Za(<|zc8TZZiT@Sdmgkcs*NCjbJc$+F z*g;lhQ{VU|`_SS>ZmQwU{qxtHH`()uVyurHI!#?B#q>wF)E?cbaN=S;(vfnBsndub zz4##SDV|m3+C7%DeRlk0GX3d~-$@2i+(r#XoL-m17%j+jZOc#q_YQG1FUjV4oGh>H z%nI%$bmT3neKOtSvJ2-eoU?M`tg#tCvm{~;DgHA0{nobcLw3=cV}->v6zf4|TT$QN zfsCzz5}=aU2HpHNwNTSj?+Q6o?%!LVU0xt^)GBKK8~=#VdT%MhUVFec;}>C;J(QZ@ zH<#jMTUJ=K)(hX><8g#Lpe5%Np2>+~y9k-@U>&ayWWUoIdphh7w!P5=$i$~(O@^M- zE#0T)%ANZ}2%w8pyx?RtFxkIzlkZQe$9*Q+TYYMh4u)2D$z#=gB?}+3P)0`ZJ&d(O z+OGVXtOt1JTS= zN+{TX!xr`);UC%1G)=4#s(n{Q;JN^Hst?m*-gPhbqL}lUZw@M- z%9~IegxZ|f4p%`{ULiBsXU|lb*hIKd3E#ijfrM#lXj~r&zI%5Qy!=qPf7(T5=BpyI zOIhHZXGAZHb33nT-V`|~s+XH2kbINpbMjBU$U#$YhOxs2=CZeoYSLAcwA1{+%|U{#mm1TxStx84xP9d6CgQDI7L&akn^T z>J4|Nd)JRm!7FOXtkbN$PK3Y{jfr4EaQy(;SDvV^qaq=Bxi(YiOM@IQ9MN!zvfHB`_AnvLhK&c z%?*sEU2gzWG@LwSj)t{o86U73jzghWs|Bsl-2 zh8mDiM@|=BRvA|r18^^_E}Wiv zgrFjLo;Tvxs_v2xnfz83*`oDpM7fC74DOC>BO@=Z$s05Jwg&FK`f%}>YOx_*f6em~ zF|T;0_3r+f@h@F9tR1?0q0d-^SezeWz1Q7sB*^s#bnBIYH+|y1e}?)Z`&8^Ihx*mi zqw<`L?{6JeZVLSmYIiq^?C15`8VYbw=?grJE%N`l-e%ZS%{fnHP@l#5Xj6fGU~vXo zvT-GgdC@dI>bdnrWWOo`(Y`s-U8&?!7nKeP$>1XR=; zd5{`G_2z@u+b)BzQOZygok?v!Y%hTlm8w3T$m^Nbt?pO%Kg@IX#-^ndHK0ylHtraV zb2A%t!=Atn?E~DJ{7!AaA><|BedmF$e%ZBqu)M1#`2_bc(jm21zF2u-emT7SE#?sPTZ=C zUvh$qB>Skp7t{I>h*)W@ET7ZSCh|mhtRVKVfly^|S_R5~PQ5SPKWNwGm5Quu_lDL^ z#mi=oO2`3ny~sT}iQK?tXysE>;g45+f7H9?&4-rsp{`1N2F6?g^?S84dA0-Keqe)*cF96i^oi2nAFgM~~*+CmFMdHj{H zh|njruF|!Xu24_!l8xICrQ z4H4+q(R)^zd?E~ceV{9SgA}ef{)#kn$|XW(3_Q17fN^cokRRPfCf?nolnSIClfFH^ zqChz|M;TjY)+uMmfoDj}wx3GK7=w=(+Toh%P{Mci2B#Xhcr7u=36IBzbt*%*A3fAIo~jnFr3ew* z@2Bv@VOTZGAdUqv8Egu0Ax zyOEk_9zqGrIKvJiclPuO36i5@3KFn32b?xCD57!0k24uQd%q{AUh%JeAu`g{H)ksP z4Y@X!E`b=3gLQfbD4kcoUarH_+n0|V{5=L96j8EwvJdn`4Sx5@U) zYAvcoC!2S;uJ3p8T_D;a3-K;vY`T0=Pl<0tTa(JW&3nFaecyDY{_e%y-tXu7M{2dd ze+bEU>)XUj^}jI>ZF}9&B;faj%tB9o)kWR@ll&xEzb-%bNd+mXJwN4sN-06T#IS&e zd+zsl>KP%6-oDv)>aoos2ZbtQ9i}}lYryQiJ*l5$&xq;^M8PKaV<+8q6FIqQ+8f=g zez|t7cX#^b6~Ab;-1kNBd}iNVxpI6?Pq31&vl1ck4}bsw3GYFgB#9~of1xZ_5&E~p zuVNPvtM!ZZd97MoMe4fsDtoM6O17?-E4A;5{dMlAPx_VbjYQQ9Uw*Ip_v_Meb}4$6 zRqFLV_h=D}g#Xvyq{m0`cC7jF%J0`)zdu$ve4eW>*Sd9X=9aBoyIPaXCyvvK_^%A< zB=#1?tprP`%#cGrz3Lqo2|V`t2Zj-Aebu4=s;k$g)pabc)1-w|7+Dz1-fpRP`;(-Cj?-|IMveq}i@7^<%k}T-;A< z7wZ47e^=jrO?vd)UuyMVr|PfpkLuS%$?F>ZPOIgtTv;)ld^eV12XyEAlu{I=FV`Vwkyx zA@#xiL4IRagXyJulYnW{b7mQG@X?Z#VIK@IKCFeOefAv^fe$s~oPr!Sv~OU9Ip4Hn zQP;SL_>tw@AoT~K=2tGb^06(cF4Hj!x<#h3`Rr+%fUcj5B{vs|G_`wX`MeZn&2xQBA#+@ zWJKToEahV*_=g{4yBn1*Cf?nPNP}IqV==7mJN=Z&B zOAgWD+hjYCY8*_@Rd(_;rbEu^IpODmTB3XHd`Si$gqMPCRm3QKQm*cN%0EG+h+81S zK1KUISZd_g8$V&8aEXe<2S?w`sT(O=jg00t8H>c7Qv@3VLcGJu-9q)Po2-YqaZ+OU zOZ&QwAa?y;f?>~80=Atq?>66cIUH@|i8_zD>?~O5G!uOCV=qyPe<(l{5q8(ubkDur zto}DrtnmMAOTVlwHuVaAgpP7u_*hy?vpuU%dqDJ_x-gg9jDs;IAuTdVzj z1xy*77eXdv!p**RpMIn2x5}9sHBC%pS8NR=dyMbkzUcXhT`}~Je{j`fZBI=sGSvUx zBB5Kw9$BOq$>27bxYK@u0uR2O@94VyWmHZ(^>co%R;%ByU#oD}P(+>iR^En+8xR#@ zCX}%Qfqb3JaM~=!64OE+XZ5z@N(o0}`>aQeoVTL<-v37s^_@B{OakwzOL(8>8=5`N zMJp7Ca&(qVViV&Q*bcDLpZx@+9l@}Bekh*Eb{wZjFnUxF4^gwnQ8~rFx*2^1^tR?O zXYoaOGR*I|K$@oSAm6I5#n!#vnxISF*KGTK;Fzql7dnmZCHM7L=8NRNMeywY86$aN zoH^J*$CjLZ;)`cZYS~=-sxgFO=CNthyTz zkPpFP;LIcntZ2(Xs_^kukXkIXbcyP|IE>WRaoJ|bR{FUr!jERFLaRWZWT>BDEPTF_?ri^)^Zujc?Fq|ro84YdzvLmIxiOhNy6~~M<~HO@ zht>5*F50viDD5uOYewOQ4Z18$41O~O@YHxjwix&zJ&%bD|Dw=v%11w#p}4$nF;oZ( zf--%qPy2*OmYUI9wzu9JhntO9!`I7msHO3Q6opLHpyctR{3LYG%})1|-+RL)KiyIv z@BYOVtGhIcCiD9Q1bijVJjWj@Pjn4&>BO_H|A$0*d;j=t**FnC^qH2gpYr`5(FNW9 zhfHV`(%UrKO{~M|Dc||eWB6%0oY?H$5~`BZuN#x=`UK_A*`GeLd}(o4`~VD zc1plx7*~QBsWF;kAf@BtPg^8Xfz=PMjliSh-cxFYEd&p;m+*IBZkHEz0HbiNqx(&& z`uY>&37Z1*J?nKDG8TovkJs*H#a3|ocbiztDWOsZz@%YEvNpp0%`7)0;Z z-a02(3if*sL6$&@H7OWb$OWWD(t@&qLAqJn3X{1vGaV zmFTOqaU21UvPmnmm6^Q!3zg~^kb+VCe24Y_4CbBQgxSb4R#q({1Wc~@n=-uAzZhi=fZtiv~dG1;z$?0jeK@&S_ zD`e6HkC&U@e}}TIGQn3Jj18=>W(2Kr`6X{D!hEQyJ@=B+hTEw>+fFYjoi0!8b;SrT zcbC};VmjCQ*^3~ypT`_1&ihoIWZy_@&)}3n28oOoYBSqTrkg*)1wK&rXxB9s?%nSu zr=?$w8XTA8A!mB>d9u|~VH0Bfu@~L$Yooh=P*hBJd6?=R%Xw>jWH}q@4P)l-q0DK( zcYc1cJl25K^55X2!CRKy?#GTnxo>y=ZE8>6S``F^$9=xL^88Be47jb`%YwVD=gZb= zl#c#P#M@l5K^h3TC$CqpcClWpioe}wzuz2v-_14D_wdCnTG_AAjGU=7^W9<=Up0Ml z_QV*z?A`Bkoh)-u*XvTT1hsESch{|gPVb*i{8}Gw`|VjIt6lNE#7?jKhHoS5m3m$# zpTzPL-|OG8QeSX{mbSuxkS;0)I_Nuve{MI(60e`cz5oCR!$F!Q2}%Wh&FD*fM}Pm{ z{rAiNWV`$S{`>t{?PdS}FGuv9tN;IfE&9vRmFoNWn*NEdRjQ&^uhza*?+AkP3N9Cg zUqx6k5;PJA_+M43_?yPlY{%28T>CM{ExM8Z?B}TOWT(;r6tLzny1U+ zLJ*)NAYg&+Ie_#!i7V#0X~!X#)p}C-e3C&D1qBLzGCYuv`M%w+BMO5;MW6-;bl`K2 zd|0K6p9O^*EM<%;4j-5Un|;)K;rA2nT@&F1j6j5H;t!_>PoTT7TopZXQ2YF$Fh@ll zdMPt%?F)COjs@5v?ubTZ{xq2t2!BC;mJg)TX5-P~3ydy2(wy^H(T217?)z5#|ZD(BE7j_7OMP{6`t@4(>eY4YU9Wei z_Nw*%34~DYSI|lOFYKz2-psRDN0ok`j<| z;nx@Q!yM-U?=XA7R{lh_qH+9NPEV{w@r12SrlUKUnC?;?T`QbA!V&K}F6{9}0e7kO zV%_@eQGSH?bJ8qTb9(gt9Obr4$G`WkESzxWmSkTH@uDXc2QMvs7yI!-F2kgN=2jwvC1Cudyz68?X_?Spe61bs>92+$M+;q30Xy2UhMh5AH|Ao7~ z-oBX4%|C)E2`H8O@Tm|Xwfa1`QVNziVgD}MTl^t=mrs`dK3mm_dM6eZpG76mp5%iw@Vg~V%uAh3{-s>b8$fAC!q6axzY ze0Es%ll&43ee3mtUojrPf-;?Z`n{SrSNgZ$sG((`UeAjfUn>y{x2tnKM0_Y?8;2vg7WV8z&-1a z6XW&Zqqy&tje`foK0BAT$U4tf(M)IhkF4*LCX>Fr7M50K?^#&6{Spt%Olbsng$bCr zKfz`4(t_>(^2T)k)$;yNt1t0i=)K^_E?W1^ev7HRI5U>lGG(v)rLZxO#Oo!YJzgZw zK6XT3N%$fen|3nzTg!%yD{QQ5Fkny;guh;Mth+dX|HarbvyJg^LfuV#qOvRr8#izH zg~m%CFaK`J=&r({ABvjmij&_iev0So-;{^W{r9%K#GgNc6T7+==iz+;N0qlRNB8B7 za_+%yNi~swuTb6huZ`%~Z{hPAd;4y>z~ zdqVLC3j;L|s2_BJNky&5ag(*CzL3kJEtAp$&9&{rIwitn#ntIcL%gZ+E( z*>xedV$FVUltSBfLGOuNzSTog_E=E6mf{KUtTT)hM`;p6s@*sHgsWY`|AZ z-)aAGS{T^Es;V5SYHdcQZ3=J9kP0%f0yMA>Ha~lbT63a{eSjBtyJ$ zdfx~M#J^gqi;LH|Lmcm@yHR!aEJqGJCyFiB_vm|1>euHo{3KaW{R`^ftWx>w@~Idb z8t_qLv9*&jr|aq<+D&N3TGyz#2|hp7dfHJGTkd?VtkL#?RsH`2eg-MaZ|Z6}Gt((~ zv$13&?_4IM=fdB2cRpV)p*&g|Dokd1wEHipKwHcZCSKQjPv4-8+@6AY&eksbSznmj%zWOJ+y0v<>)!o|HefF{Y?Q6tU|6Tv;`F~sXtzNpSEA_98 zu63zy?}yHD(p5|d>*teh*xU-GU_w{3d;h?T)&-J+;A$KRIIMA)J9MxIIC0+K_glly z8`?Hy$Rg*AExXk7K*Z%mNAQ4@<_HoP=??!T^lRjy&)95UA;_`-k099t@Rrw9Pko}r z%j2>Hy8CURM02ZSl)dZMFV)V}m5NgTuWrDA9t1+TP+H4)APXJ}u3A-$?B?)JkFs@a zZEmA21Hp&)Or!pk9B(NRBjFyRA- z3N#RL=$F=`kr`C5%B7ol%B6-%mImlXR2a0E&8U$-93n|Da(Re&-fx)mHq-GHc}h$c zVYz|gK=+{-{E3MHjVv9j6O64kOW`nRbPA9>5+96bYT6N}mqv-v;5@boF_d&6)1A{#=OAcA zaz6#3%7#DLH@soPX9^UsVvMk2j8TYiQI<23C3njhqqHJuGnQ$@NqVlh*dNOk)E?wpwLK@URqNJI&-rez zwby;?ok2M6Cd|F}%kW>o!w+~SAq1ZR*PqTsNOE6jZeLb}>b-0Abe^yDy?4vytzE== z#ob+B(7=XOz%bc{2*!N1SIJ+i<8keD{Mf>xv4bIGeg@;;5}~VJ?!d;!swq`XjZq&b?gK>i@4@{=HWv_fn%p`aG+4BJ@7lh{d1n z5A|B~p1nl+*XsFKua-|eGA(P^0##-Ippm?fO!FTx*xQ{|vUauat%tb`Q4I=y>m#!Fl zC*STGD>L7fv6*H$AMYpQultZfIAb1Wd_}~MoIV=8*5_qvb{H~xE?uqeZd+EL0t{E1 zDqQOWNSJImD)0}VD)G+aeeg_OR6*_x2mSbRhmHUSS<<%Ezv8KqB0yvu3xo()<(lH7 z%l-HxorGJf!61?|ySp(qV>f;uqlYB=o04onj?)IK8#4drucYXZ)S?-{RwgKRA)-{RJ+@6+W8q?Zu1}4yAVLaLVgt$!R$ogV{yyJ-AxSqMVPAXZ(IML z6sCq>fA)&$eS80V=lx}NOiP_u@UVk!`@LXq6?^brBfwFHzXc>0tdWP2Qy^%t$F5)m zVQDk)fl48SES3s2wY{lB+nv-5pTRydw;v^* zAvbb)Fc{7zE~mi|hreHfg6FCPu=eiz>^Ym=ejUEQe}?#GAdZ6JiN%lmF-Jh(53wQA z@3ye{9^09W{xpMCMZkqrSjGybsJ;l{8Oh`JQI8Wt!?&I_*Sv*Vry0|6R zH+2(}_x%^TRqqK2Ha{z?$?N-*mo=|eAVg}No;V0k0OW|)I~oCRv3*^aqT>lTUJn))21*kf zFb?pPGfUvb8B6wdi6G8v69x9q0gmShd+&(sPX4pLEqyN{Iu}#gk6x~rp@+nAB6mQI zX=UqKB4wYC%|2E>p|jlj9!>_gQ*9-qbe$kG8gX*}@(apF>r%HaD1@Y`_qE49q=SF8}q$i%QoRYf*7^#pB=xdH3mz=9*b60pkcP*ze2! zx*OI;qi)R)mQc0c%Ij7d(?4v8Z!EsuGi`B=j4Gj<_<>KD0=)Y4M5*Q%h>G|$H=V12A$fJuuZ+# zfb%b2ee2hP>%F-%%U+;_oRepNiW8b!@7J961e0lh;SpL4f&#+vq9;jaPC@!Xk)N++ z{U@)%F=(EDd%p!64bdiC8S1kA8V&c83pm`LiGD5&)cpDHarlTvJ}`HpeYlDNth*QI zh$cX#BfJ<+A=xkMxvKxfO+x3M&^dko^1mxK@9lyz=*PRhQ3h4-3%OR0kJG;p%+zb8@L{ZylNtdhmVUk_rObf$^?13^>A|U|KTP5hx`bH+P2oS)HNZJa7Pl;2Z!5P^z$bGwCyp zvhVN#CKQk=6bgj|VL-6ZFcu62j)7vJR4f%43_@WMD$L5OapEZwUhbrUp^A`bZk>kq^z#Lp7pE% z%)>_by=j~$&C+N zq!l&jBFk$^a#BLo@7Ao zNFovljKXep&ncGLSg4ASoYt-c;CMg7`48#8f7wTOh1BuYQ+7_3LHnb3^X#WyKIW(6 zr$puF?>~13f12TqcO}o9{+g21G)jR-S`jaw$yD2~FoLIy?-@)Y>-cUIk=}VSplhgJ zunDTd+24Cw#la9P6!eJ z1ZEnpP>((b*Fx1tcFQ+1BZfE*q~5yyt95+{$RP2wYr#ZfQc&$^BBon2xn0-;fB_m5 zlqeP&4Thm&z*uNT3JFAkV5o>j5)g^uSBtJ>s@7JSE~zCo$}TES1H)eq=F)t$uhVqg z-F~@mUnP2n|5FZ@S^QyFJk8FH`z~&OXT;&)(c}1;K`*gz`Vc zeHtE4Lt#CwKI@`%?-OI5M#aew>C~)`k$sBO9M7k>Lu{voS5Eghp6Cd_KF`A9duyv} zd>_`e?=kVx_~|8p<4o0fMKAzf1Ai`_Q1`>Dx#%f=i}Hn)Z{$#0R)rauNL?t<*RQdK z_Fr%kr|IJQ%+(=j+nNV=Z*TMifB_m5kW3U44FthZpjfCD8U;dyVJKKC5eWoJ^{w#r zbQPDDi@oNVHOz~t4u+QAHdUZ?!fH;sd3+D*8)d3jq4n^8GpIfpXXWxf_2ji}KMI@N z7is^~>KwnaLfW2RB=>pWioa8wkfW*laIMBV6a!R}VSF zx&F&ni1Xz2@S=n&77c8sPs*SqAdr%13Rik(ZaeL$*U!fvaI2yWK70mf13=t`>>Yr3TJ`irGo z`;z}p3Er;XDmMYPPxSvjFgxU5mRkvI^tBMkfW1~}Y;_V3_UMy|^!}#WGS42D`Ue&^ zBK2OcmMqI07vx&q32Uttj+yvodB^_E{~s^pf1CdBUdU%d8RgpIpv(#Lc&Gy03V@G4 zwd55<0c}i2%Y9pBE`fs3^p%7R;*Qa@t880k^pY_x*SSfB_~H zm_`-~1w?^hpqQu@3I&3KV4##NHwp!WVPKGiBoPw}*7ErG)nf8h<*Hn6Zsp2^uzY#H z@wm^%-A`BItz)yW*~iuNZ_86wp$UEux&8P5 zzb4*(PiUyvJgMFlulK&+q7(h^DCvE#LRq=4I2;5Zm`>2&#EelDQW!(N1OXiqE2CiW zQ0a}`#(8Fr4v+UX3;fTK6zjIJAZAjsh0IlXNpBVf*nnQRKuT-qo~(0U#8ZC?X04f`d??n8+3ig#^Js zs8DJa8-+q9db^>m)+sl35hhja;dvu~n*LR(|9ghf{U(UmUcaROe{%YXaO^yXeZ|Co z`p@bf0dIs;E$OzW;{V}td#4(mo}Pv5dY74T{xu)%y5Jh3v(^-iV`sk8s+H4L**o%! z*6k7gM~nyfYuo1UN!iPq<$;^08B-C~i|KRuf5gIKR9Obws?->ZGOeZ@?kZHywYP1w zjq1fwA!ZsbeOn5g!G{5APJh0;YY2k$cSkOQaq9{)wl{PpgKIojz^U4rFoS>q01D1Q znkET~1# zxpgd67W{yqPBWLrR=o-h_rSQr@tCdL1pk8bhXqttVhZsIo)*UNA&U%Uz-gLB_bdyC z#D%IYfu(gH5_e$+%Sz_ofh1TXq-KYR4B#{YSf$DB|8|AHO;)jd_)8V!|406@U$0lI z$$uUCvPMvN78qm7!|Z+c42&fF;8{b&Tep+&P{c@?L1&N3EsD#JZ>8JzPeB8gK?enp z@_lNhXBCR^Tf}t9`pS(sY6v+d10L~$T}N&P7fF&dwc4a&(a!lliNSGzz)+;tILhda zOQJY9>3DyhNXSwOA>s7;U&_qu3?L*BZKU@ak=7p@lj}XF7e+I*<yWQ@?=@WXwLdJ^^8QsTX8x`WTGG;p>Hs{#vyYo8g6*{iU zK!M4D$of}&4squq_{x{sxA5Z%OB*+qW%U)`T7wT8d|R!KI<^5QQ|BUZ{(S841yI%cY(*;2QkHu`>^e`cJuo&m$bG?K7prg&0I=!gnXRCd$F_#(^b zWL1BzUCZkf-mhN2r|JpGyYoebei-FCitd{H(3Smt$T|1?5QNA*d|RIcQIR?R{3;=K z=}k3p(?|c3&wp_q6K?I{W>1ZT%e%Er1;)m6u);PoAwElw6vEAoAjJE9)&HgI9TEK4Lk|l7V|;`g3t)kYLpbOch+D1MP`~fgA#4i#Dn3Kep*6a5wMY` z)xyi6-GoQupUIaAR2DWDb+4L=VD#Mk4417; z@eMNm{y3+!3h~K*8W!JhOL;hI-lHwh%-w=QQ z{Uv&=z5x{7W+hkV*TjPV1cTUgXU%4+|5!eDJ}4NFG<%FPLr79N#yjcO`9ecm90#wA z0zXo?cb5tZ@MZ!U(m{J8Tg>)2JDFGZz7!(}vDL>JN(R$ZIPR=rH*)>TZ4*X&?ubWw z=D`rRzb|n{byTI24JtrvVv3b8$zyM+=)c>f8owIX$uU%);tg6f&)M?-Re~L76&B6u z;Zmc^I~0(cL=3k|A4X-saNqtOmmY&J+bc?L9aq>e+L8Xrl#5s#glF`APu0%qTf$~u z-X&%x?^)Oy#?$AD{3u}6VxfjU{R}zA;}}4ZKO8R)i*(o6(!3zRn|KGW?^$~qpX4U} zZ}mkP8Bju9`B$`fBa>(cVJFEem#*J7*~agFQ4eoj zVVKy2^Y!uuheZ2R&RIUPet(5|Vjk3ncUGCHOQfIv=aqjUUw@lfn3w-h)TD-*uyh)j z$mGBO4;fQh7QqgYAB|%x5eo+E8yw7i!DKBMyGNwI`i6JK^_XaZfUt-5t}o2HYyJ|A zKpr5)j4dDdE98fsRt6bM$c>{{d>P%z>tCbQe~9>|y}_g3kdRB$K0WtEGE5Bk_9XJD zbp(Zb2&<5NzU(%~{rHeaSsB0BT!Huf zrtQwAtP%<={mRfVhmiy~biOn?J$@NWFUm9UfimTLFOGsE&z7zc(XoIY^IB@pN3c7k ztVsV^$22fN6SSvWOanWB#?i|ZqiBTettzE!+frJT^<+n@$R);edT({r7kmES0?mc5 zy`RM1mYU$IyVp!`eEEhzR7K*6{;R=7Rv@URN}K+@$INmAE2uQmkrtGiFho80Q(ZZQ zg}4Mt)4<>66@u5qqerek3~gS8i+7K;)YX4nq`SGbt7KKzns^^Sgea#PE-4=c!UF@0 zax=(d@I|H?O-z`^_PpiJeTGWQSKx&2eswQUi0Hskb6`~g!!6eTH9s>F`sBFc z49hL?<^e38W!VbMinh^h%;O*<`8{IXc{3_)^TH>Z&h5iXz4%AJ z3CVj~!4QIzWYGoP^!}d&V)rg;tzKJ_>%l>+43LScSgXMyUl(m&2{_QuZ!j;#-S?hf zh^qK^BdI6j|F!cQ8k+t=aEXOn{>(|SU@q7q?K*QW_oyc~IdSlTkI4>_2K&||7ECVs z9!uk~198i1y~}xVA~-rYS(eL@$Je0*t$4VnCDwfcSh=%FqS-Kd&hap&ToP!19o>bg z)*8N}$8-0%Ebd)31@mEQY?$U>kVx+sRyD3`yA+6KN?RKbFj!zK0f z5#k)m%E>iw^p+`pBk+i<`0kaAQK)A|t$X;&y3&gj z{<{6ed#_R#eUq0tJ$|x~|MetdJPRycKQH9;3B~+I8~I}_pM$bFV@Id|7Z6S{@@69s ze2W(KOjTB|p9bbr`B;c2)yJ3T@5Gc5-uI`O7^3Eg@1*a$@%hdyxoN@Gn&rr63WBrT z!~Q;rVR@;_j|X?yvWs<@9JI z@JLeIUSGL0rI1g-PipqJ^{5zw3`dD`xV#gEijGiLpRW@ZKxO4sjC%Nnm5CDNy|GST zIrThTf8RAxf zQ6i!;A^Kw4Z~y=ca6y_TiK+#6=w4M;BgAXpa1_~Yu*We zth`5q9+UNM>y>5t>MPf;G{obyll$0cz`(*T6+=M3(V)0s?_O^Cq60-Q1cK0e!5K_F z(~uw><)f}$OYnTY9eaxb8W{`{pxn#B=YaFY#$~SVGtznZ6Hb^YrJGXG157%@WqIxs zs4DypnRkOH+w^w7Uj11m#QMeh_kF7#>esNb0ut-^P`kQS+;$<$(-oG*V!ys{rZ&0$ z4)`k-ip65G*rOGSzyudv!9+tt`>|MAh;rFcl)h4eBLYYeg8+krzL1PpE}BhZMmOCl zlTwW{8I~2`q#cdoj4sPl85T?G5Lq+2O9W#ce;X=grU%cKDxy&EItpk@Rd~lGit)NV zbRZvso;oof!pigPDRhyLO1X)HM<*5hG6wKE*Ru@sE4E9*g(H z@CrF84oWh_TXgA@JfFq}K_OVNLoigG+}Wstz)fyU`T{FUEoR{Yryem}WZ1RhN%in~ zJz-D(K^Rp;%WDNv{=Gk|#9uu!M7&H`&JXE}ggD3p5}%Q5L8LvxS^d{e7^q>CotWAb-yGb z1_r)dB7=g_?+|0U_~beGV7clin?y#xwmUAe@rI9L@0N+$HA~QOxIV!&qS1M$LSx-7 z-ZGB+_r-d??}B){n$VuBzX=Gs-o1hy?)in(nUE50%%hk(<((kuT6|)}W*^r##Run> z5|qLrO}~M_C@=#6cI4qACSa0-{&3K5Qo;O#Mq0!FB@^|&AdkH)s_|hlaa93#aby7j89Ec zX!k-`h?yf2Ww2wOmvUpaISHjp)~f#moy0wjcytmAyWQQR?*RrHE$0pj>%oYfco7Ep zZ{R_P4L5)q4)qKBFAZ^U%j>{^@TXBH6$Fz;5(}XlgMA=6&>R+_2Y){VQ<=EOp!`t| zAk6Xb0L2bI|CV?$SXK5B67Q#XeI@1NjG|r$caFZ?Ug}d}+GQOkP8;yiV$os#JFoG_ zzBnW5WDfNKe-AX*x-1wk#rkGd|Z)+)ILeh~~1kJpGN zfw6B2mMbsT1s&@tfZQY&2&_*90feh$Iy$)c&Ro1b5fsFM7$(7>Hvs`$CMS-+{vdAd z@try^|6++!g0~^TiCn(-U(n)i?|Z-SMlIg#Z@dy3gl0T9^dPpGhTLx1{mMaSPhWzf z8lJ1-N%Q5=;`I*7z=X1&QTLH}x24WOU|R`TvcLZk({h?Vf59x|66FO@JN_#EgRsvj zny`}k2xaqZK6058AEEb3!RJA<}`Q1dM9Gsp?NV|4)!o|uu{V`kN7Zh%bqLIYxT>Y;T6}yJ_>?0 z;s$Eel z{n4AtV&4CdkldK}_xSB*qwXJAa+~Bs^Ej3WM3&xL%k(Lg%lXAG@r$x~#Do`yjwtIr z-WcW#JGj~(>=T!k3HQrSWaiJoXNH-(06NOszxzrZ2A%oF3c4It^=;5LJeSpQI+xi>GzB8v<)tgrKDwRt(D z^jiIDyqA2IgjeUPdH4Po(VU89{E^aBOXvvU0~nWYz4BM!voMA?>^#KO1O;ul)N%E$ z9rTRGdOJiKy8*&QU)P(@2kV#R?pl2d9lP}e;|jYWUdf1f?$o_i&mQ@HRT7gNVM39t z0~SQ^9r_da0(NVdnRkvNDvIrI@5mJyW((PNmS`8^$RH}bT53*Pek;1ongeTTS5>uu z+;JF{9?|32+61_buZO+m>|iUV9cqkjVQYt9m3!s+gc&%1Qdi<~Qo-BiSSEBA0<5_s z{aK*GGuP8L{3Ifmq%WlITuLu6BRjZ+rEo$-6HoE7 ze`~pVufitdBsdf!Ge3}%_P^Yp+n0jds1xfO)qSGWM=Hd6aHlaxCxu7|I3!0S^89t1nvpTzoroA$wSkXwljwI9{kXhA zkW{SUByr`a`Nd*K2J>StjA?7wq4WJumc?OXR$t_pP!FS4JDu7H>aK4l61cnf?!rwO zdMEEA;pz0uH#@Ytc!$Rm>>2n@^xJt@*Vp0uz4`pT_xaPzq$0tVlf`PhpW0p5kVG3< zd&$W@nmvb>PZ@lyXD6Q@LzSzWck<%BF4kp+>*Z^QuBi?|8s0-9SHFKV*O&iB3zkyeol$5 zFM?kQcmISwZ;t7~AYc=P9o#_SZ%DZYvN{D^9EX75N6Z`o7Xg3~*=ksdMN=w^q7(f^ z77P{VVMp1Z0=HdI(P?1axV7yM&k%MaUEyItxBvhQBte=d3Caa`b?8i3&zHnkEpEL( zOBGypFa27@-SIMUE7mBRi8qA5&A~WmSjP+MSGQqoLzb|UURWrNV6|<#n@Tsx2MX}O z(Pg}D4efFx5twv!#=@boILt<5SAk`tZwN~>j$D5PmU>z8S4SfLI|(aJp>;8}OVV`u^eSbbPPix<~;Vap6muAy-JqA7O}4xA3mErY23 zcxwBC)1>gytQ-+G4A8aB_ipLY*I1CaPj0vVjXW2()-pX z1<)`J^lr>IKhy1^)`R?#w{0CA=hN;@Cd=TsK?UA7rFU^J=EW~|G+r(naXSk8;#w#9 z#tkY&IaA+rVR>dQE~4r{IC@3t)pWQa;<>^K(fYCeTc5l2uIldQ9oVP^cyCB-Pnx*@ zj)R7~_krwy%+yN?kgguSSXf6e{uV%#f=2|7VvR3Zom4_v1iujGdX$1)6CJe|{8PgK zRM0pD3KAdc%NVR0-0ogqz(+wXr?@uR7VY~pe~;)pYjn6m00@Ag5CGgDRf-ABtP3?5 z3u1$@4xI7t^M2!o5kRlHK!E_^sTqv;5N)I31szZ@#s}zH2R38A4Qzh-bDRK+z|?ch*WN{=)>!F&fE)j~fdMoWvo;ssCV{kU4`;vZsLM-=GtHixf6+06ZQ%566JvI;E(h zb$$1W?glXk=vyY!Z2LEp=pYb^o-{lvqs~NdBLJX4U%voHN|e@ly!SY`RAayVNJZ}N zKm3{RUPFIqhS`1or_--dWg&=8&>Nwj;~td;P94jE+P-2#UIYAnxRoXduZF%`Ap|!( z-cLdzbqHBQ5^6;fhZ#7WJ%TZa>wZf`sfTu#2I4iwj}8QTmoENnybEB^44{)-CLp54 zJ^G8+$COLoUl+h2Vb1^?M0;p~9QMn{JBL(Nx{DyxWI%?smbpH{@!UV7UV(y2g}Du) z^Ix1>>QQv@X8upl=xve#Lnkr~>_LlX@zd%Rgd?uy-@M_$6R{q>T~I4M-*xii^J@8h z)m$ax10&ET*Md0dkH2LxnU}rUV)<}>n`!P6IfN9Me}|%<|9ElyGd^-Gw7;6`(Q>XX zQhxvIuzT^3FWk1zm-%cF99ZSc&yR?5u%sOe3SRwGNH`Fq5H(}3Gf{?S@FX$y5iyY9 zMraaDY+ugbd4KkdHcp9m z;j+BBUnAswdc|BszOhNF#kffa@?aGv00L`gj!E!gm)n*gJf1C&a5`B2 z8w#BPkCNCcY%HxxNIjo%|G^&j?LMwO0!>Xx?!kSU;bdg`u-RuF{+FQ?kGI|Zep2j- zFOp5GKZr4KqX)F#SAv7(qC3@!@JADX8>Szxu&(VR1aD`$sC+9|cIBw@5AnRzF^%5v zGC~Fd9nrjY0I}B}ia7P?3^t+u<@Sb*yPn7KQ>wk5HDe&-^j-fn zJ(gZwe7;WjV3eaIz#20O73Rv}nw8>@r$0tJFG$<*WS&csK!%6ZiSdQd+PO0F`975V zLKH14-Tt7ia6l3HNGv!1*q-tRd#i_z-#1O%h5q%)_U@$9;hcr#rEidj!C#5|K_-^e zf&-`P!E}+%AR};%p$73D2t4qPgMjo+G)yvX@Eb3rT99%(^nx;U28V=sJt(odm3#Gx z3M2}RQR)=MKA=}MLaq@L29b?!;BBhn4N=^E1qjOPn$st(5+HPDFofqJb{u}jqhXVH zAR$_p2JKinjZ4D1n1r5thzg4g4?jr*SCjD@23rBTY7}vJ=_5Hb%K95Qj1?8_347F+ zNT0f@FDD>_+}}CY9C5$P`lQf8?`IGazeeT|g0Tn|Jc_D~Xrjg>&S(&x<{PbfNcIi> zy-U0k*kw07!%Wafku?y>PO!%{MzH0U6ryiYR5W#m zvS_BHQhY8B1!8wV%qv^CKJtCY6f#)ry#V&Us|sWTHBwmgJgnLiqp-AhWl0k+iwIwF zaeUa+nO1lxt(Y%yb?l#h%|^Ss)2Oo21G8J)OA7E%GOzS@pIcXA%!6!y8L0QC#7As@ zJPyR3TliSEpECrw*YINy|CUVc={NXlm23)SIZ=F{MWx{~Z8}4*kG;DNTGL&yL%8+- zFq#v$UZP0%ysT?oV#)lgv=KFRL(jD@sdIWhc+{kVTL`#jo(b=s^0dp?-jv{n0kd`& z&=44i1G}o+Qi-5pZ~V&3&6Td5{~(Y`Vg4mOlMBvBww?G=E+>%UHgOJlA?Cca-fQn- zMsxHR&55njEhb@3wCa=6O|WcXMNAxSIJsKB{UQFTqe#*CjI#bG)~sZi2N zWzFb}P%t*{6YYms30>oz!y-SRk41S1Q(?PN{%qzqli$Bq{oSwR?si|0sVlee-jbtm zk1a}%>-sOr__GuHCFdoW@yGH+Oczr+oN1G<$@!c4KTp31k?$q;V~o9RpRQh=kcF}? zTH;Vgcku(yXS)~j{FV?le4fO)II=n8 z)$)IRldNe<%4@q)`8v41@4MDM87N|ol1|aAbXL1%-&`Xty>#f?)(t~U|1FbXSxAl2Mb5sFHyv>{`ok%Da<`r@%df{vrFHD8kTlm|KBA- zt-Un)m2WUm{)0m5pBc+6NRZJ&+;}yWe|!J{3YI~dCyD9>f1zwj5bOQ5p*MH6cClSo z()D`9SbzWO!v?>vzLnqi{aoIy`t+WzuV0Q1Mz3!y3}A>*r+0S-s|WMIz8VS<-h6j| z&i45Cj1c4V*sec*3`Ga`P5AGT5AGO8X;&nPZaRXmr!2P8Y37_SNPA3@m6!V0%QfDv$-9olXA}ku`I%ZqUy5)sRJjQY#qL9FRj4%4uPWu5cC@I1#f4hr= z))(-w#d8h{QQUA+gQY=83!E-+{W?y3vY@m;=~EJDCqu-qs&@Dh!B}pom&dxP%P`Zi z=+~jO^sQIpwbJxe%j=dq^?vymd0;ewfFQ@CJ@3MbtWQ6e%0>;&3{(<|#de9}+5^4- zW>I&Q3({Fbra)K%EqY9X>EG=mDOa00tPq;#f3Fc zafkp*TX_r)%m7-yJrk9pkIazg;VLD^;=MDn`Gm1yiDNO520E~IrExrSPi@faGZu+G zg@7g*YMcw^B5EU|YtTijRj=>XU#oKdt@`(M>n`Vk(S?Y?I01)a0)!vgli)B0q^t{& zBNv0R`MDKp5eY^lX_BFO7=JFqp%$L-vkajz*1+JKfLTw+%E$~@CinZ%#0#+@+*oVj zjNXDVUD<#2R#>IKSN&_ba@QVT?tn#sNH8-rO~S+CN8wjIW$7@v4|wK;lOY@I z65{xcB=M*AC2D_ntUZJvN}Ly9w1gEBj~SZ{6W_wWFBnL!6jK3Jj(g{+4D_^xyreB> zBO&sXeU6UX$He18O0_W1kh@q+Vw^^{TGeH`^d_bC%kI5m{bkQRtxw>D+rNG{#5@b; zri6Is!N^TlocrB+eWG0x;?)HhTLg2--b&*F@5tQF_-qO_$4AmW3wf@o$ezneih4dxPHTy z_}c&OqteDB3^#ufvq=^+efRL!X6jQTWIz8!C3d(;>s`-#_$w7$L*fDQ`T%2qp$rWi zVFv{`k`&WP4*(n_aCqn0_(Be!o&)8#-+C&^cBK9ZPQlcfk2G(rywr|Cv%KHEeImK~Gl6r{ z`bBv^-&hTRZUW#Oh%>dH0Pm`vA19b71Gpgy$~-`WVz^LLkgG60H5eEbOT+{)O;m6W zK)TsD>ZBu{LEnVVdVDs%FY@k(`RY18m>66p^nbPOULyEW(w6VSMXhpY;wB^-X_!Tq zo`xeq{Kjro8nID=QoY@uOtH&(JpWqoL_&WmxwaN^2E7Y+;D}aa2)em)|0fZ;QE}uqk1tMW4Gf>^35tCCy~?mz+;lWiz!%?1 z|9R2ET{F>Y?DZmLpv(PY;>CDM&^4KHv45CtU-Q?{L#BAQJ@&mPlJ3-=y9uFOoBl{Rw*PK&!RGj+6^qa9(i&2rPQu?6$i=mF6*s(t-S$=TVswup0pBAf|ip zYg097Thh*A4qYEFmLU|jF!0?lT^M=IaoZ|#fW#0aO4~7*lHYQD94$GBNG6H*P`&no zw0EgE4_%FQ5ERF1Bn$oXy0}BK#K6X91A+$(hAPO0AQAGCSJXCHIIZZ*HQ(}lg)S-U z@}CCmTNI|DJ$v+7rLh9IuI=}$>%|?=S7y%d$W0-rf|u3(6zcmHDmu%zEb{tdZ<4{# z9`C(Ov7n^8;tbiUH{X1|aR$S`mmPRfKYrm^V8jEL2c83O#P5d}ieo0<{tByoj*kQb zOh7mfc+9K&#gpC>da#EkDo`0?fN8`H0gk$IdTi2zi1MxcS86HA`B)KP_~Ru11~UCr ze-SQO?F4dvHXA|bk*BqI1FS)sFMxOCk#eHa;PTuS zdSuI}GwV*&#?bj~1Nsbk**ZdS|6P8)`uFS7m-X~)_2Tx{m zSX)mBWFhAy{s_WCief(y_V4m0MT`3F{6Z8W_jgI<@nS@rR&Yj6Tz@Ro-?U5>oK?$j zdoXv-5%+$AtjquP>nMzyX@BRhp5GDc)n5gxmQP$b2(hvVcYMsi&IdZqs^g1+`d2yR z&tG%K6MQ`LaI9Gy?bS_o>jHo{1R(qog!6B(f+#X*E`Otd0V))XEENhBf`MS5R4g%4ocI7ghol@YV27!)`=$D8dq*lb#7s}*$3!3+DaETxjRB}J-oEb* z<>iB`0+cRrr`Yu^7giF_S9}5oADCI}?VBJ@%g(3}3Z0!X$$fdHYP7A|sKkqfFV~zw zzyT%{kqjgg4g$eIz*tBX3I#%gQ6SVV5i+$|$BJdKDS55jFA8IeijzaO<9|=vH$GXS zzDu>2pDNUxbLflL?pwO;y#5!MG~r@*ZtwSg`Gz)B4j1pg=fn!Bqw2yP^?Z3YJbEy4 zhE?JQ_Db~UP7~00e4@Oa{kcL=h;Ppq8CdaG`9h)gZkQD|~YcLS60- z0VWifC{_v$jDcY|kSr7n1qP&Gs6_61-&xMPsd&g|2^Dx>H(HCx=odbT(Dy#uqZa*T z^ADt5&PcO>nD`9QUx;_6RbjcP_}2M$9a##VS|!;tjoj<5kg;KqErv!|g0N?>A z6p$wU03$@Hr4H9rFAK0>YBkBUBbAA}%HjBFE z=osPDb$q)NuB1ipzuEp*>i>(}WbWhQuHRBv;IVr1`wJ6lO|-Q_q)<`tPN-#B7)2#g zyw{0Opd0}z6p(5pD-8m|fUsaLBohS!qClvSDnT=!$IqJg>pQ!gnX0;*xvHe9H4xC^ zn}HMrE%w9JAoj6f zU#w?qBPSj5z6XRa?%{p77nrVl`cCeSbglqA{ie|fA$8JOxoVs-N>-4RuVfKFS<=>A zt|)_m0Vq_E>_iI{0>ePCP)cJ9g+hT7Ijt*vZ<~xw>XudNo7Gk3b!5=pxaT75wx197 znip!1YsW|U2tC|ftGi=Jzk1g_CFY}Xemn>42PG-bqV%(YfD>w(PAQ>vU7lM81aE#q zcj^Dr>U?{&tGVSpVJ`H^+h{sGF8|E6)`Ax`QddXEUK`^B6ffbr^dSIIzP~}w?hF0H z>%2?f*-{`AJvtw8eb341;Q;nNpaj#B$@s) z6)04RGVZEAJJ$Hna6rl2J%dtL^>daSZY7&-flm-HEnA6k|V3tU{^1HGm?ZNC&}_{DSmr@v>nJA9uvyQ5OID2+>rEb3<4&q7>0 zOV>XW5%%&a@4%XZ=C}tu(DM8@jaa3JaDv5+=vuQNJxVYlr{^!6EQDx)I5dL-ViGM7+zkSlZpMvj3pr)c{G>VmDAeR;Io48}?O`EV7`4+v0-<^Q%15uZ&DLjRDyxcc%^^@=NK}7kQs!Nq!RaHqsRp?)l6m0ki zpq99dqAF~g&Ui>YPUfU#wTp87|M9-=G=jU;RbAR1T8hT7;2H>a7?*Afh75D`;(*bV z8cDzI^$?-?)&=uXr(O6r3-@-Z1`vdW3L29GJTRozEMr@s5!!g66|gYq1Ri%plRNY( zGT{XsP%z{N$C$`9QrpB2_F?YR`B4UreEy(dY5~CReXmi1eF;jK$T(zPG!uqMOv-?X zLS+>)aSIVXdLtF~hV^k&DN|S17xinZ9r}^^J-Cm__z_}A0z4<`0vIfCm_hC9RhRPu z+>C{epOktU^G?3`yIzmAa$BN&efd3d|Gb_d&_q$>f=DU|4dx`~FMsOps2IceW(#A5 z8{$9`B}8-^pgIU0Q0=@REYMScF^QohFWZ#2if*?5`ug=nJ%056cW;V-01^bKf65Lf zuZf=t=E5{SuKp%Zmk!P0$GBoF*iZqcxB{r`G|aJ7TH-V(Dkq)~=tyw{LPv#x%V0=Y z2mYaCTVX~zK2Nf6<8si2p(S={8}>5I4CDWy{aUV7Ygg*|eoxmaH(JGcfBkN;%WJtl zrB~s6-^U3!iUZDWC`S|wGK_Bc!Z61h06HkD zc(HvuiMI1c?CvbT{68pVUdTz3=$@8jbh;YA}$(o?z-%>U}|_-H)AKjw{BWUfU=UetorQ)$dxab<;#DenO05nNqwtH-@mxBPc0%0Y!xKn zp9791H#iO{eZDuoiYz^L00gvTAekH-W>DC_-qk`J*#M*WO|+too{sVx5Mgt;hZ1rb ztwCtiv*Brb*8TqwD@bd%8;%_nV@stXx&<_dM5GePgqSl*C-#E0t=|0j)@Wqz!+;SA^auJCTd(F1Jp{ULaYU4}>|A zLOk3ichWMOQe^$n7Y&}TZ{d{vTJsZv%$eL3@I&v-G??%R{1)QiN=T77YP=D_zKjYj zq018dUlYQ2fAIxqeYdP+WrY_aJo|-pQ?Mumn3X2@SI;< z_WkR+wfqp=xy8KN5x~df%YA&D-OuRn{`in64>7lX1Yns6E+}$jok_fko5@ms%XR8I}d@O*)tX{WZ|#Kf$**=qvz&0rOp00bTX1ji?g-ORW~ z`bSCMipO%-D->0)&LC~>*^J-0gi<ekhKDC@cRs(RiQkkG7Hm8`w=0It zxx*Fwc)My@f7cVah`>(lD*x9jxj8ED(cX*TRRv(gCmIWRKErUY$BKPN*O7YOutqot zVZj6ofT`~-+qhH;^S68t2FY24{}Ou!e--cY%=tqDzVXmSq3u3MYUT_Ez?Z&wej%uW-%Z+MW)F98ePOZ`X`~GeS_Rb6){a+ScS(h$vPJdeX znpZ$eI)=%8EUrcQa`$g^E7v>n0l0&h}YaT7P_tpqH zV<6F#E=fDB1x|#5SWy0^-O@J8_0xm}c`F#$?ctBh^C93r^9z-K;Eo?j%lKGd}VXm`k`qi;SYLxgZ1$NymQQLCFPX5mtp2RQt{>pi+6csTP1uUC)T}`=*er<>fcM%=)L;%o`g6j zhd9v7`$TT(e4iiYzOs7hZW5k9mWp4)MV`Aq8wL%EFVZdUSS9#MF;Cu$;)sUC8Bp4y z{giI+u|gp#zn%4y@sL3m9Bj1Vi9yFw-5WYCF!=I+Cr^$sdy9>(BpNh6pg3i9Q9@Ao z=!41mi@9Q;?9!6K(>GLzz|{6m7h-u!I!E~Wh)jI!v8+sR$u3clwWt@!BgtedOW+^)$6;n46*?;bo~0RfgYM?%KYVYBX@~K zmcDX%x9%IB-(2G(fBW5cbVIl#R;TiRtP&CnF_|1srrafbqfgJMj}{@pMbx@+t7Sdy z6ye$kJf5THY7jWK`}oJ1okrZh@nEE@*&}8BYj5uSx2AZ5TW%Be*N?Dqm%kGc4)>35 zmY`$!q!YJ$xcO{WT?4fRWx}oE#adlt570|)kUyY5&$uc%^D5XLA!wmdmn4B#JMzrl z(H<0f>%3jQ^6y!h2!n~dVO z&jRDW-Rv&~g?D?nah)yaE0Bx>)I#C+*je zoOcrWVDNW9mrHW&lp2N>NST9zGXmrJV>w~BW*x065mpQWG=SCKVggL3Kp$QbNdpT) zwGq@2i-=&~^bv~YTI25Nc#gXE;(x4H?98uTFUv{y)Lv`+g@)QOd=S=3X8BP)s%rY` zPeF(XA`b6*PW+`}H|6B=HF*RO*WTHwQ6nSwnBi#qm5;#$3B*~w;K`_14h2`s;P_C{ zAi)7J2-?R(V8nQi4|$g?#aA|8AL#q-X;!hx`1w5sPj^3tsLx$~9cj^jR9?P9-QVQ9 z>vTtx*1x3^g84r%kS6_Lj1mK|QYkqwP^eWbxwu`F&{yR?E`($! zP-87@O9u5!^(@<;s^dW?>2md6t40(DgKBHT1A^2H1!!N`7FqTc_$b~5tnp!{nrbQ| z@OD>YCx{$vC}f$cQSWt6_ms2&-5lWJxF&4L@_%K@yG1W2yTTzI*Zav@qEkI44! zxoR32Xq@=`Q5uhf!lzIe4P!)#zA9>zpxiC7Lt3Ke#aW64f(`ME<)2Lu)SX1HokN~e z=#YL7hvxu37NV6hC|dJz^}6^_c;A-r-X$Zxb!r05y*jfSOJ>vWeh?lQyxQwYwcxAK zxa63?MH^bGtw~8k8ck7ZV!D7d0d@cNAMgmkIvhwHNDXfT7GCf@KKE9S&t9-qU#&@X zs^t@t%!^do5D^4M<^AD80$~q!?LI5!Vi+jEzo5}q-(G@Cv?`{*FNOevdtUH3Vu69F z#uRN%4%#0e$zrAns`ET6EOR6u~F7 zDQUG5J2%!Nuc612G{118tOpEy3k~cP0ltYKueJ(?dS`Ap>q#Nm^DSES4mg5BowC+i z!GP5-EVgpX;FvxM&vVsOrx5cnXjYbe|NI;RKtK}DV;Z@gtbUm-3yyd5b*q)dtxxM; ztxbL#_tSH&a3dRpmbL%uWsBbgaEE=IfPRIuR4XqJ3cv7zAqbHOCW*fks(&iEVRiU^ z&U@%>pZDB<@AZC~5cR2kT)e&_LY0LOP;g3lq^069L&HCO)UAYQLPrKaNj+=dC-F#` zDiFt70os7G>5qG`d-U}`(ckC%o3s&o?P|E{$EEIis=amk^?KKbH|wj5?OZIn&oQ!+ zER;_6g3*GkaZ#+M&kSG#v+l~98O}c}N!MK5M1SM;byvwkmg?y>ePp41C#%WpSL@k7 zzw3WcSTK<4va*^u;+Fgpi851{BRp2u55Zi+n9#>D?2*9u?wcFD6nO8p=PhNZ!bVW) z&@$G0&@vjH-Mz~|JG(wL>J6vcOw)G1o>{{4{SW!Pxzp3eRqr@VHHHCWj5R-S<8 znhSpfAkX@fNB{GX2UGf-X5mb-ng+Qm{d%cu1t`aGps0tB1M>eG0uUMi`VbNkyWd;D z)C~Yu0wza(ArJ^uhZSIC1j3;$E8@48&JYCvya)iC2uvloKf)Qg>XQYb@d5Z8p;$Hs zp=JOFL$}r65GezoTn*FA*guSvD4iK7;taNWe+A>qKS5brtk{ZU-XtCQ!a*)zRIpgz!!A(GRmQOo^?Efzj0 zi1#ZV8UL5x?B{>eb@*J@F9+;F`xG_#pFM8U1gAQU$y2t9B8S{X9F1Vt2`;RjbXO&U zQ31M9xwPJU?%dw)2yZP5kIo_w=sMBXkk~QOzi`!H$15mxH=ecrwCh`>?oXWj%sK*Sq*V@hVS zG65y)V{pSO2otbGN&y6-u?9gm#(_Zrz_%n>5UsEHg1{UE0;+#+-(&dy9bN&3(@-^b zv`L*UeibO$ERUmk{;Uo4eDUw7el|UV3^;h5F4?%}FZER5f+PUp;BXp%s8|4Md*ieY z;&!y+U1R-;AU^Yh?9WSlLFp>$Yx>2P*Do#6nA9uF!AB+srhU2jw{YQeNgf}j*mfvi z3BNRqll#f!Ek zh?ftWoAQ4Gv0$w|AszT;Tm^uIS78S*E?~rYMh3_HGFaHeA1afx%n|dJEwldFZO6?1 z*>IN^SypXNX)yPM%&j*sG(Zfey-3jG0kHqKp%dY7v6k;#q^_QQPl)32rmC9Hk_FsC zN_;|*b!MD<3yI80?M8gQ!n8JPSBMdW^L$p{+3{tmQvcZ_VUbutKBx7z;j-i8X!=W! z5hv-=FDbxTrM%MN4PSEJ-!T;}cq13YIa)d(hd@!~r*fGnml)*s@5*phn&oC1F@Vz5 z5MK_(;qvD$PcP{Se#3$arOKUCJ~BR|`|H@kNWMB7CgBx_ELc?~m`#Jflh^ejUe?ON zR>c{HYLb1B9|BfPdAIRo^IWwA9yD8xU~4Ka0#+bDT>4{wCy#kpu|;Jem#7cbV|jRW z^<@6fJh$u&i)FXgJ3h0WK3BD=f3y?gY5P>9jH z<6;=$2fg6s)#WKvJN9EdU=@0N5Q*IWv`dOKftcWzV*kN;&>)k99x+d^#)oeH3%VK2 ze7!e$KOgjK>gd^_>=p2KYG~*ww76N5OOyh6LZ$pZWCpKpzS7;pf}RpfEoivIR;9JL6z?$cec%z7;S$ro zwtLeG7H(-m$_YK)Hxd*DLVPIsf#q-7tpWViv?A96iqPYZ-f|I*fOnI+rm7pu!$6)! zs!n3LsF&OEcaeZzh+XJ=UPu)WHgYn#DE{MwJ;4aB-xkDo08CUMr z;vgXxoRt5hQ6!cpU8C4!;j@z?5P9P$L!~`Myw$kdMSDkn5_Nttm$`1Lxi$avA(rn8 z#ypG$JdQC%VL9l}< z>c31(XD)(rDMDFQ;F7QVO0mSu~FnIDB%11w$QrT zxS-|uFQQ5&#{vjY4hYMqqCCCul%2$Yu(gm@S7q4yhHHUF+(jFNQ{B`{QY zChCt};Xy=dN%C>R(6G!%D-DOCUxu*4?>hN?wtoa%#77&PR#%*h@!5FnBB15yCQFS?Fd6-V(Kcbd z-Ok2aT`;5|<9;36Ki=-l{Y=u*H`6BtihUD?DQ5GPr5p&yeCprsMSwA*k1vylm#6NsaZT;R{ojpVdW(eit z;(73Zfe>|IJ7ijFBZ8gfvI4FrK|IZo8yxrTbfS+5(IU*^U-DWG%|X@73QGC}f`u92 z)l}Y)3WMJsyYleZE+{4&2DgDd=@qY@u%r**Y6J<~E+@%o`YZ+)(DBH-Do07rqm2CD z|DpX?KcdZD0#RB_>%5V(%hYCOIY=X`YQ0TTuJD0n3d%^W20xBk`7PAT?)(yG@3CHb z{~tl!;G~Rs{_`7Su`IW32)ndrG;y4+`}mlGGfc0RfX4T|M#;l0(z-VCT#`+jA|M<8=&nU!e z>-<~t{&-cEC{?TFvEAQ+_!ADsSIKe`-7TMZ7mNZx5P1U@IuW)jFDI^~^j9m@fqW3! zzN^))wT-8^{J|rMHkEQD*dfjtY58P5ni?W zzkjWM81m*^g6LAPY~|O35|@8HcyY)0du#s!C%4=GoIY0N_|(6Eg9WB0kU!1_(0&*( z@vGrmC5j9Pkq9~Xk=Knxb!KioR-vSW`(B-RvM0HU<&A)?S&{K~2yuMqW4nGnevZ(UFa#)Hp8O?PA2q0I0WJDu(n&iO1Bk0fJ z+#<^iV|Xkg#fIvG2+SW}Nvtl+KS+xBxDY>2w<|%&j^un>(i!%>mcY941R@w-rlbW# zvG-!>VS0N$t!A}bbyF4FwC8b|=+V=qRU*l101MMEg82h|e7OXuU=dAwj>t$VKdGoPtG|L0xDj&$QD{XjA0? zUJxXAz;{}h%Le$zLb-ErZOgwfE^~p?6(B&VCGa=twUY&8Xn-W0AwA-*VF}$L0w0!- zYm4rb-EjaELI71KL?g3&ma`8cfEmxXm;fbrlP}XxO+7U5b3=!CI=h#;r#?#^cp)j{ z40aALk8s#JK0)ilcvF_Iy1whtSjBJkDqpUv*DA}O*QE99S%sJughXB|okeecXeJ}I zky+}2Su&UvoUuDlAPL}zwOVyE{~zcTL8%C|B$*b}xT3+Y-&x>nf?uo*AJ>jQ>#lSr zq_yt(`p&uws_ISeoz55ar8N#`uBwpbSx_NH|lGV;vqZ>!Tko+pp&uHAW{B zvsDOE#UnQxhv;`EvhhTs?zQty`&GmAqJOG(0L~X6>K#Qikue+Nra_a08Rh>k_@1mU zqQ;TOzB<-QW@;PT?6x@FlD;tuHZLtKPg;!Q)B5Q_T%~!YJF932-I5Jgx$oS+$t%gp z^2v2gbs;q`uS8jmmxolWpP$%b!r`YQT{Sfm{@kb$kymG^Dm92765yh0XO2Z2zA~D- z8WE4O+K&{?d`H-GBXRA_D-ARE7W?eT62n`j6_V|@+=A>nheQX8v#VqJAayU5Zl=KXNI@ z7>k}@8iV9#GtT@TpD(xX?h%eR&}_9nM}{AXN)PuFM{XF7qpcodKSKRe_Py=Mr{v;t zcz+%V3%j>s_=f~Jh;X^FX3K@jzW`W4flH)Z(K=W}2Cx*tL6ub{QsZ&7!D#UTgDTol zTnEnhw~ZokzWC1K2OaH(ZA=dFoUy$+c7o+0E5-zUGe)Nh zIE6ard=CY-HNtR1bA_N^fvSGD!gq3;%z;y}>+r!KjosSqpy>(q!;gPfSYyRtypuN4 znSM9jN}&_RM{mH7av#4qOLyMAT@qUl?U?H6O z@nsP$mNz~Y?^%cbp@j!YE?V8kNS%L9unP8Jm$6&wFPja5;tov9;3M3!dV+vV0U!v* z?!4XseYG$g*bW_l)Win^G9UGg8V;BHKuiKAfmC=4lUh|MsPUnJ20vH!(yspgNV0vg zDM!ceCzt;1#@Qp1Y#ZtB?|1KpQB(Y$|0ND4PfgaVH`)^}q8rQYyb>1oNUqm@yPSv; zncIT5kZtbzp1}`*+nyexySUz8yzq<>NM(LIxPI*)q`TUaESdIiSxyA=2sD^0EsKh7 z^9XZ&(q+=vWj$lwNqeyaMz29d#!wEoY#gEnf zp>5vRvErbrmU*n*MA(&4Dz%|3DpS&w8u3U#SKc?{U)S^3AjrXR{WME#Up0jK?cfYe zueHSCI@}ixRn$yYlPpBc|+I8LX#QMs*SEtDi>p{^nlXv2KfuLVz$?LxMR>~Aa zN51s_-9#61;^*95-*-M*C-x_(Rvu!4<(Z+tqBWl0Nq#E1J~X)l)D0nZ%RLb?<~ZUF zPH7Uz%N>tn9#3f~Cfudv_3ea=I{*5w`%IDkF70Je>QxCs1kJbXW7AK%yN#=>?H|(a z2@3B0Rzuciz1k7mD+Gq1qwk*Yy_Dk5m%ftk)WZ3H!-AW#O-!Mj%nY76LcJ6QxAm2%(iSv0uz8Sj z>pH`iv%Yz-z_oS(nbuuvfxAS+Vc!xb;B< z(x+;LPm}lCu)wkmCCaAdL2Kn2hu?eK{rIfjwRhir_upcPj_LM}AUh-?-_lKH;~lG& zf30`lS$n>uEgjp442lsDf)e5V=FQDT%3Iruiga{*a=A-_EtZFfrRLD-e{s(Ik zgD2!c5$+T+S27}JVHBYBL~ow!G&L3_Op`SFJX-d813c@G@qAZ?5wxCt}f z!0}rSzSBh?+_lLtuf5bAHG&zP2>mcn={!)ulMrmhKzadC5E zOvbFie5Im_c|Sanv1brCD-!2--WFjIBKevZa_!wx-{`Mf>8v&*cUZvKxqqrl@4NDe zIm_8RtJiYqLz;I&``QVSq8Re$@JURx-|$`{y5U*Fx#F+n`0`W{U>W1Kmn1=RV<&C6 z+w`A;S#*b9C%Mk@R5JbD<&)$zG+Y^R24$943kSuA>J3E1MKMgb3`xN}iY`1zCA%s+ zg`X6}@wG%0KthMRPq>GzSDpw&1WQtq39onY#s1FHAnLG^ME|>I0Mc+Qt|W?x9b;k->-e6SAEHLPZj$YC!v=!8hf=7 z&{3cFoci)1$EBANZ z&dgS~-SQ&kR;Cq2@$6A)_>hM-U>V%;!mf0nKPQUn1dxbC(b&FR`72m>NL)zSL|P3Q z55tNYj8Fi_zc6n4y>9ID+jhTH5=S~hIrqF3G9M>*UV^i$rK>OI{as(^ohPqJ=&j{H z%lab{!8Mc9iT&Xe3;|$J&&B`ceQ1O6ib%2FE@6q8fM6vC>tjlI8+>_x?ZmBJr4phelll=g zTLMR)0c7YcD#)NX!lpzeF?ZlR=qubn06qgD007_)zWuA!LGT#i?hSsK)%3x45ab>6 z3;++n8W;c^pe`@ZOU=0JIV@Gln$p1|*ux$=2|>lV-5%FpbqF4W83`Q(2Ucg@4b*hsI)=8o;m0oIKK{O)CNwHWfgbH@rG@}R|isdhf+2U$|q z|1u2dCN6{Vr!7NVR=pAozx&`B&Dh|OAWZ{rWiNL|(>wDUD1blx4%%s3TfYsB22CQ@ zHiTiYEU@O0bS)ji5_BO-fu;xs00eIY{z!`As#hHlqs!x|(tdc3{$A_Qo{)Bt#U~Q1 zRjq!lSNgH@UD-W3@LwShi95mwfd2qkq_%Ij%%lE4K&XIzKw+4+B$)tuK!v}=x+Hg+ zyA^-XEX|J05|D|YcF=LR8J0?7{Lx%p#RL=#`Fm&RH$JHzw8d`rJH!F395JB}>Upp& zlMmfTK)z%{afkM?zNYB>*!~XCeE;jfSqcvGV@gcbaC4!=iPRnzt{`d-hqpYzz{yF8 zWJg5^rQnx2Q8|0;egL!qdQKzc#dxLotR#fj*X?@gewMiwBv<;?+P}sAxn%vq0L>T^ za(apaEU&PDIJ|4F;YM{_*G2#SzN+*r>3+Qza&E2h9Cha~z>o!$NbqPtueoE%Q9xs= z5lUbTD7N{`qJryytO*Yy_Fv@iI1-8?N*q`afWOsqFzyB|*l6tkui>#i%9LEa?U<-Z|ALBF&8`sa-s4vC^oAD>Vf^k`R z3)+Faeh)-;Jk(EA@{z$#D?$q?f-|^q7BOsR%CEVuu}ur9J!`d!PgdoxUj2Hq>((_B z;{g9bEHXgIKw`5*?I5HrCfkB0(r{N2gkMA?Vn7_hNuAK-cTNUsWdPqO}? z8O+6lWa-)97zhFZQ+l`iczWI+h`7^%TU&}5gTDB4q9qOK;I}3Rh{L6-#&^)Y?B^tyisI76}W)J@nv7 z0#HcXySeY{*~Q#e?)4Pq{{fy1fFPigUkR6paq9u%I$r@F7ERu;5UwuYEG&a&$dEWB zIgWD8fg)}o0VR+%Ie~xfpTr|;WZNoovzNXyRoEF(sBzC z?jPzn4z)06lJ!MFHNv61MulR%;;HJ`5NSXd$@e2ihTX737n@Dk{J*wsy z{ITCfoRpsKtAaAsz!_D$uKDuG@|AfBxro=`!eR6ccb!d*Wo&gSeg7w)|HM}$yxrfS zF?Y6x0uo%Y&zyID0$`bZ0wn>^PE!Q9uJD<_a0(aG74Z&m5kkh@M31aV;(%r0VB{z< zxpi>!=66xEPxT6vPyi(o00gKoF$TzhcLfC4B*>MYh!oGIGC!aH&M&{tu`B!#VI%JC zbP6BL@{a>`#%gQ`3bE`SO)`AQs5>qCRnw?^j?@(@SXDS;kWEL?veV^GCG$=p{cSie zDPjxXR?}5sWJPPSI8YWFM3JJ8a=3ib@(=vX)K?u{RVC|FAM5NiCdTIbKwF951_BlJ4fzxf6elSNDvLU?`FOo%7J>7#^CSCe1ZmZTQTh#TsZ0P@aCugg>Pd^ zL})8gk}g8^8DITbSd65uje{0rKB@5>b6CSt+7Tr;~osVf;I(K`$?)!7%e|ah#5Xzaezb={LZOCPNsq5opeRqGu3##h4 z$?X>_zloCpPzrcjAjq$i*ZT$%U{#gl-SP_^9PCm3L!wmz1eG2aQtIx@pL2L5H|42> zem;El3|qar1aZ5a0yu5ieG^L!5%<-2kn$`0)iXtR($$8yJ}3D@2)Ip5|LO@!ki@9D zue9y#x&`@vvsAe59W$uI)XW{^nRLu{Eat|i&652| zxFCe?4WL2NR%6;8$paif!(QkzlUO@~q|4z_y6-%d&0LQPp-vYW_F^Su;3kn2{Zhg{_|G@_iJdpub40MI-Mon0E zUTlEYuT)1G`kTW77+{^I{)YUOWeDkdRJB>KcX< ztO>RIx9NH@nB>5x(tGRUWsfO*Lmv1niHU}3{#F>8M-v4(5%eBurxI;;z^%*HjZ@v{ z7=M@8b3w@lh-azr+2;5PD|86j)BU^(AmGlktRUyWG;;B^T6Y&fmlza*cs|trPq#8w zC~ew3;VnE;hgWv4@DdvPXFlP%*GQSJe*ekt6Ooc6!wcazxq5R^K?3%*+wh~6ZR6lV z*E3Y6*2?FbzxIXx(6v``LF#;^8eRroaX(Gr&HACLiYN&=9v|S2a^FFOjQKWGOYESa zUSd6Ug!ydW?9RTe(OvGWU86kvtJbyXm}UQ$4_)s#Dl$SM3J5HMHb} zzOPCW!8-U%52vywd`%u(bs(=jU-|3fFIN!#f*b9@`D0COvR$0M{b4e#{Ayi)ul|wn z{7{Vs@q@Tk82;l)UCF~Qa?(>Rk{rHK>SvA+<(!0!lH@0E zEa>mS)dtjMRfWIGaFokWC&{F_q#$@h~}0Mj)b_zm7&%etFs>|XI* z{8z^LMCiniD7S;F8mqqqAv*M4_=@%KDZgItpS-``<`oQ*1b5v7uF(T{AmWr}Fu zZtQ+E*SE$&0ZTnj3ouf?Mrr?DJb%ufyZ^#4We|qd5%`Dg<5PL5skI~w25c>~`e9i` z`FsA$%>;R-1V4Jg_W#Agq&x=%0Mg7G9z)Lud>uSdZLIp=Ne*cE=bb`=emEK%4TH}I z55wT=&Z%1naB}ck9DE&lh#CWDQcopRr-XE(9~JoV)pVt5qK?5~;=8{eP_WSOdaSDK zpPW_#_A@?nF>F@tG!}EmY-(Qui18%~mk&SVPbVZXpVbCz^iNT6*AUd71524ClTW$N)3E&Twj(8 zB5XrpOvc##kpo@#Ad89#NOU$dKyAkpHW-$Y{7_zyf`1AK3~)4!rHD+iEc*VDHi^Px zh1mt4ZMi3XPK>c+;5W|;k_@kk6cRk3rNO*3%XOa#3=ve)NOtV_j5A_(Vjg${m4TFK zWN^$$Zg=adErYJZqyFL!3{@Ba!N+GbnhTzwGk+qYQyk_Dy*j%b2W*A`e>2mK@HD4~ zuS2o{7_|U=L!#DgXxyFtf~K=*8jhc2^tssmo`%S z2+xBPf}6Ce{l2bErCJO>sX!%Myh1$ciZjv)D$)dxXnvG^~opqQG80Vc{MD` z|0lmL=keS6SQW>(jr7CprG$>}aKIoCIr+u;X?Q6K;rqR~_o~K}R`Lof=;w=n0VLFv zBozq>0zpBrTqq_A35MZ7uwW<=5rsk|FsMY%Z@p)!GspA#UjDu5c)j`ft@!v=JLwak z?(gq->Fqu=-xlVLPLEIAxS!&hH=ygUVSay!e;Z4p{m{OW+RNr&;Efs%SJ0dLSNuc# zV!%V*a($l*FJ*2R01D@`bO(EIGR-dNKpqFE2$=2TJiWRk#G)2jX;6zOno$c-cyU7E zp2>UrK!Z}VD2#+_XsQdK+PT;%9U$NVEEI@H5+a2J!BDVJEEEe00>yBMltM)inZ7xl zdhPM^uJxUJ%!IE$8P9&vS)5W{hi^Z3n~#s9zjot@jlb-bg=^cN@l>?NjV>J^?teOu1yKR@IAdg zF5aHbFUWbR{kzdC2JFY{UB~!`i%7Lz`kkD?jN5XiBFgn&_@RFZTRMl1$Q<*3KC(*+ zV8?zWF?~YvS(SQf>8{!s*u1Dtm+;)#2f)4nf;s=N?@uK@jKRe?(5Em zAuaK(j5&w7`IPu2RmXAXr}bRhH$;-X<=<~q1>?3=qIA(OrftH$aP~&-U+sg$9$lZ^ zVShV9>l&56+uQ$wU4E4GdMR#~O!hVdCoa^Ka|^GTRj+by5@}ULb?wh4IGlfOs3n95 z9l=;tMdvvd6nJ8YOtV8X2v+QD7FAQVG5 zd|f7@u<)<#dOR__XE%8#K7;tDB%7APt}`~zD4#8=8SVpjM4bbP2h=Y}--#VuIGZ5$ zTSr;Q0YtacqLukWU)zal0U+7^tth|4 z`~Lv^|Hg-uOrL@H+q64Ih&04>%tJ~%i3BbQ#D*672PoBYi(Y6|lbs@Dk~FyLk@THk zY2Vg&@r%dFeCltX0NMU2Y3s<1V5P53AwL79F$}nT1+F{J;`is3pq|5?#y{2C_bOy2 ze{s@%-}cI~-CUB@x#;pFi`RRlGk~UL5vEutD38z)|J=Lx!wFVeJWM!LdPl2D!_`Cux@7Cvs%bi7IT?jcg58X#M00uJajzV%$+ z(*z3vTDdRXtNVIz2u9V;`3#y{7IbOmT5zZAW z4G9XX6pukbnEOTN}X8*+fhieF(XNLfI zMnZLgFs7%9ckBgidj_)f-}$bpgQV*Y>RQ!T@HoN)9C^SdLSP-ts2Ro~eA*VpaSN4> z{K;N9Za${hQuP=A`|d*j`t{HHvEDl_U99;*IKtt>f(MoZ5InFPOM?bCn0pR2>y5KF z2l6Hr&f9_0K}ect;|3)!7uy}+FFOr(V1fv%>BwWXd;O%88}h;h76}$k^m#catJ|m) zm<3^m_bw~XC<=Jc1t2mb{{7THN0^B{9nO|I zna-(xg|o*J18Ugn)eI>zLNI;yI#6^9e}q4JOT_~0n9QQ!K?SV$gN*L{GWjMBtap7LI8^ZUWZ06_q`zw zHaEBu3IRpGly$eJC$X-q7sCYwTdz^}9m&;eW@2s@;HCCc`|zTz=-~j6!-NFlvKu(+ zaC?oT#}%gmSuj^OAM^_Ir2v3H{v`~uz`EOcliiLuK~aI51N4xkViQ7&@PdgP0}R0Z z7eViKfvqq6;zFeX-G)$GpAA^=Km1ZFysdlgxoXxg)xTQ(d+B;_S0uG#^=jRHNidIq zF;SzBl`|mdTwVhEsa(pguDa;0dWybJFe1U=83+Y}U6?+~>cAJEB6Z#n_J{Xs*A}k! zuh*-d{d$+`*Xt=gd-dwSwbc{MDg}XLaSSLh0_HZX9p?j(!AKO6NeO;ttgtwq5cUWR zVx)mdE*_;zZ%Y2wN#RTYV;Ye*=l6-j7?jH9A9pR+YoEAJF)OQ?)Zs_k4J<+?BQ1wc{+z(On_u=nD4?2PV^e=NV?ayc(nXDBKgd}31{GgSg{HZ9Xk ziWM`GNZ>SLWU|wkpsp>^LG6=o@Gl*qdB!Uky3mzPH3&%W;h7 zZI{-T3TPjhY9f5z>@A;>|`ZT|a6nH5d9myYB8> zAB4OLA);>Lz6Fp$;LH#)SG{~mZtviI_!vZ(`~i_Zf_u_meyBU+Gd7$M7GMGDujxIu zK&Uq?sLS!aOMS!e?DaUt)tou`@FEyJ=g=-XFEt`JhvnNiqBU_Z4Qvo;Q=}2NEXZ?i zq#PZ-rq4r9qttK?Cr+r1ca9gBcf?zu#4$^qFA;~awgLn(Cd}rYLof*Fm8awe*d(pD z@A%Ue;T{_b_^PDPe*|q_P*VE8jez~QlZgtjfV^aUv*EB|?h!p~PB$7iL5*0QJ&G8ov|sS{ zYY()@C)2R$NF(Ass!Z$j5w(x_BP9MG6w20a7?u@R-EqSo{5p1T*}s-AwRW%izmmN-?+T7M|0#0#W%yiqhc5E{$_8P8@JK7Zkh<+Ta^F}= zENI)`vjS_%V3EM60lcyM5DsIfdA;x+g$9++%IE8hDL z$Rsi>4_=|#!FwhS7wUpQiqniee$4WQs_`h}$)im|-zT5$ax8utcAx2jlAK_{_$`!A z+k3eNdtiW<6}&9dXM@XSfH6RBJk*Ml^oo1G;Gl`WZe6EyUpK&+0(qN8?IIp7{!g1Jfp8S4KMc7FG6D$( zP_zxT7G?p;!0xQYXkmNsfs&1O#Im=J)8H5kQKEweon`%@9u_`=l^2DI0#!YMbKUS- z);MqpM~Ww4O$P)ZV$%yrVU70ppiUi~NYT5Vkj!vO^dOa>0Yrt+arR#v5T3sTdvNuJ z2QcmlM(&A|1A7TStI9yoiGHczfxY$lKYeiVB#ul9mJfX2sRszJef@X%At>=b(Z%X- zB`rNqU&6MPlf6%0PKBqh;lu9h{5yp&$qkx?84{aLJo(fEz{T*-8Z4dEs%)$|6ymIk zZQzfOGoJ6U_CC0|Yo7a}c<>YyAa`@muES43H0{KjGYbF2> zJRhKE^cwwldDLt?C7^+5!Q;+M34FOIrf&vBw&*Nt;Wn)Bp!yZ{Ws(!aFV|T~FYkQU zcirKiJ}l(V{Z3k^asTr9Hd^bO3HNs^60u*Np@soM-|EUiL|A5HI-3&7^}5htxPf5Z z`b+$7)W7?Lr-zmU);WFOTGU^T$}x>r4eM%q_cyCa=(Ur>@MI@|tQl5l9wVav^tGq3 z))FyI)1OO%Ce|h6MP?~HE}3W;3fz1UohnBy9#AC1Q+R@8Dj0FUuc@skSn>{3g3O*%wZWm ztP+3J-dy-Z_-&o4jJEa}EkMS?Xm}695TY1DAM3MI9Hgpj6>Y$NGaDG<4VI0w|FD40 z?Z#TjPd~RsG5!h0jxt^EjRFh)CHG$$z?QhN`ubw_`gC94vB;-uF$GJ6a?3A}yla0c z65Vb>35ab`R(m zGXqqPPcpUgkTLm}{tG1Gr;K4HId(QA5e!Mfm=`ZbY*`{&&K6-npoMl27qU(ky+<;J zH`yG4@nM~1h&b>A5(k<{p9O$rT7ma6th79QBX2W+X!#HjY0D3(-_MW~hfI9F3ah2` z^%@orp9AkON(@cL_D#L=)ioK-rASajJKf89q-i<8F+?<~1J>T*w%% z9|rkzJ}M1?xac;JbZbwy!uVc9oz0?%3>`=%tppLpzbEtl3BFzvd!PQw@md(XnC*Uh zzDnY6%lrT0Gh!VZ-|$s;)d-7Rn9~%`#rhW7O7Z4vyhJOn*Yu?}Us;0r3^|ZtHyXlQ zmsa_FhxHgBD$`Jh@5x|mJibyCb|~^4g2%)g^6^*Sd-C{!%ED|W5w@X3F_2A_uk+V{ zk()g$K?N9DRYN@Fo%|2oKWB{9$@L6rVrn>Nmn8cXAQTGl*LPFvf73xarB(Usw0-;Cdk+x?8%w(Dv`w zU1k*smK_=E^7!AO`w5gXfCl{V>#PyxG<$hDSE9X_^{pCNeSJkzzjwWNz5axmHn#f9 z#$Of4kmCk4j$+qMZ`lQkf{K>m<4+B{=!R03t&oxTD8fKy`~$-)FO-6gPl6VI5up~D zqd^}mO~h=?v7tW-FJ(cpzl4McAnk&xk@3>xO*2d3!36{+n(pdb>g6ELA*1fuuAKNP zkGSUTxS{bQp9lWbPo`fd=|h|{LjrT~l0N}@s>_R9QEN~)u#TnAsYV+2t z4AK9Th*@*wxD*)aes7WpNqau_#YJo(f?%1j9_CWtFLorUj${zutGPfskXU|ly`#dWnQV$<*!9@{bh5a zG@o$&LH|wPh2H#G!4VvLyB-B`;HW^?J_`E|!?ozGr+cJVfe1Vg>lOe23w1%7DvGKF za}0~M-*Wo(+Qm_Qt9GsbG_Cr#TKDT0e_u=A{Ho`_f93z-6>?8kJ|`5t_Pu_++SPix zlY)>^95iKhH;;e#8^XauJXd!wEx(F#tis2+1mj)~g^l55p#GWKHh+v)|5um_} z27u08!sqQcFgKL(!>^|Xq8Bege82ptYi|Th1*jv{!3zA-lUMewCHLMtjdH){Js7>xVtk^6+qQqqmXg2UBz$OczD2AN|USg&(?ZqiiH0k=exTP z@MA?ZdZk-QWKQF=$4b9eUR2yub!~uzDBd-y75k(IFx63Vu#R0rk|VxMzCHi^z61b- zKr{-53LlpzIAccdYL+h#U z@-xe<0vI2GYZ!~HAgM9w{qpB1Cpv(ph&|L7e8b${g|Sd$R9g3a$!p)QUEi;Ey(NZ> zKjGJ$1%ONn%frDSowLj(|M~@lULi<9Xr!f_9pvLIv3_3y7~ouJXE=fm2jBl#FBJ=; zzrhXtdKTTURuRiW6Ww~(b?XIOmqqc$AzN&C;3kUJ#f*QYiLGB(JM0Y~8b`=Hzi8t) z>=V~}kVVx-QdHh@dJH(}yB-N1^pN+(a@xh;>hfB(aVy`icD;VFPq90JZY&fV1jpl` zLWb>)j>NP%Zg?8|uFrq3FWgBhCux(S<6#3qr0FV61c=ykKS`+m`>tC1=>&W4kFCZv^ zP=TZrVvIs)E@Q+s>W$n$Ocxhf3~qo1!U6)I^c!@0am+{{=ZqLSc||mXT5G`Y{Thgh)2Y zOGM?EB6?k@yWtG#X$-1bwy;ecmINCd^@&DC?LO4zl_S0M&G3GY7kw9B&b>YMttS$_ zR9)3to1|DGeXro0*E}w^PUi~8^6`EoF{gd+1F5I`#Biw`a(MgHQ_(N@>JP6%&we1y z9!s!PM`B;rjDy!}zZ-c-gA~h=zA*Ck<^G=;;4}=kpgW`=rcEX3&O!XPi%VY!*fSC_ zqDaTfi^C=SJ25HSB(u=`Y04?l-dbxpO^LU!4{vDh5HmTolh_N|BJB;u?ld`DJ{$YsK0f( z{t_(P=40?eL7VY>KT-#OCG?&2m*}~Ey^8)Zd*VSSE(mdrVNu{GfP^elxnmIJOO4rl z1+Y2;VBvDXRG1^4EhOT*v8)Y)4g|2F1i60HAy(`Y!{ajv-kaz zT-J~Of;qkMe#nV*zQ$V^qn$~~@jsSoOlEx@$HfxdJ4{Ke%Kxvc!6_#5qtX_2gF>q<=eidjnD8D2p|#OnrYkkerPQ$Xqk~SF=fkXilcxEKsM%72uG-4DFw*I z%%{f3Jx*Ke7vbX2W9433(ril&V{+Q3>%oAxefL_sFZvK<{CO{PhYoOf`C!~v>IBpI zV~YJ#yh%^`+pjd!$)8s%%}Eab3wCPiT53yA|Et$>`t(ndCBW<&`ewl?rJ+no!{&Lx ze#!0^l!TffnxsCbhvGRWsRd*9;oKVMTB&>%iJ&O-tETXE2JPOZ6v6O-|7?rB_x|}c z1Y0!FnNGYW%5vRFe+BT6-QU9~_4wG%VVU?}gj}4hXn>yP>-EIOOqb)Qg}CM$fjrMs z|1F*SFBrG^dt|DH%OtBUer6D9sp3yuO4=osUkRffzQM6(OA zVZg`Oyek{DPrv-0-~X~({}fx=&X`S!$H8BBmRM#LUVSQlELGqp6ht2!&g_3UwM)J7+u0gMGjM%Jpv4^TCwMI`IpYTv6*=#5srek#CBaiPb}55?F;B|7$| zN$_91q!;OT+m3?!Ow-}cT36aKDx%-vds5`^E?QriL}*-o2VHcMYta-^?w~{f2^4`CbQ@z^L-;tp`R;|*jOz^L-WX?f-hNnp#HftCX z7Y_c*Fn=MmpE*`GX(^t;4kM@a_D@ZJ@?P$}5Uo#K6ieH8E?SY?e1d0-Ep9&Un+nk= zqtdGPlk;;l!XmCpa6zOxSTytDucz^8uk}*dZ97LE8&uH;1hF`DrU&B|2lP0oxIrZ>~I$r!Dv_q`~EaO)MB+ z;@dQTJcudJe$*O;O0^L8FtL8&14bMw_rdl9{Aj>WW~VO(1F%^xEDY%W5zz$|R;!KB zDllF;h@`#p27@4+*jRUB+rtqt!ln8 zoC1Z}w#PlM1X#(B249!*kp6#Lf>;+)v6e*nu{rhO?O%CNf@n2T9lM>_NP9bkPG2kW z9~JSOzu`#fOM(0EQfdI6}Fx)y8FE-n`f@#Els|}r{APAj6o!{ua_Pxs|l%@ULoT%L+_aR?e$-xk&kDqQE0TLGlL<2ikCFSnBySus5 zC%Iv;mRRC!!K(IJue-ni01eYV>))%_uSs?4RFaALmM+wZ&)O_i z394M4h*kfF1^TUe|Npx8YZr2HH*#K2U->W*AzVE$2_Bq#|La`Gzg_}daC}AG-uO{j zAU!)CUoKyPEW>XMvc;+5SwCf`;q~Mdc7QR01Gs07gSRH)4wt`whRPw$Hwa9KDmQ`A zw|E;N`{B~~2=GfoqIh4c|94)luUEodQ~pm^U92CidK2G2>h_R4!7vH1!G$qQT}jf% zeo-%T(wvm2fW!#EBf|tG0oxghYyk@DVMmfT9W1TmAQGbsGV5hyHtylr<_RjUz#%-I zEt~M@20%qsMMK=(Zx8TRvY~XqIm`?SFf!s1=>?wdEZiEXgpDM-?mQPW1$750v|l4u z+e~6a57X^={9{pill1Ca)}pWAVsLR4^axF|l0h`X1b5#f<*?l{e*^rWp#dN!H)sy0 z?e=yh!f-7Fm56yK<&Ew!GJCz?Y2bWpDSR|=M1L8qtnjqoa5G~$rx4Irz*qj&D;&#xz_AqIdY!a{*C2_gbIpI>|;qrL{^F9uYykxRj= zmQ^`$f}Da3k`T4VCTA^T6FzXU%a$t@ir){o9i-*d`z=jg%>)vEDi>T_mnRUq{d!+s zp82)z0lo>=TJ#D~#%>S^N%k!bi}mjWfV7-Z&8=cQ`B~-qrRBT0Y_Sm^9Kf{ZHW)OyZT^aLB*wo-<25v1;J@^ z?~kG?q!I2guZXz1_3ziY`Y~E!|NNIfUQZLkT^a%V1ub#Iv?LUrtIoMp1d&Hg?7I3Q z(J9y@+RL((1qt9>wh9>~kO=0w!C@xs zv$(S-lj8g+G^8Oua=el2VFm+teTYb$i|vhXg&;bY{RIJlaC#%ILjP|8FTTf}quhSMjVg&BSP;Wu#gVF`Bqi+c!X3 zyGQQVtDfN+?R)25{d=VOVk{IFcig#o3;%xoOd+O&i94G7FN>{k*IL|ib>oNzdIx9H zuKnuRAtH$9u=xmFhPHugX1B0zNI3qs@gDb(d+eNf?M_JJ$>ITz&SxSuoL2!c_1Oo zELP$iTv`AopokZI1V}&<6NJr|i!c7A5+&qG>o4o#xbWrC#Bu$Knl$=Z%|0Q2oxsW) zMVHI=AN*|>Kxg?BM!`o{LKym71$nCf1SbolC%Zp3_q}jgmp7@1FTllVj%EFPAVBst zO-LXk-3e14<_*Gq{IAQQ+8n>3ig<{1J)E|E*fZOTa|}0e5}% zli$F35C&4$fixfy8M$*1;I1jTGl8fR7ONItXb43HfW#XD5J8IE2>pa04hI84CC-LI zZFBZKx8*FGV@UgH*A;Q92{@&J zi4J)x@hXq!vugiOJ1zY0cTeTw%dMCTa z$60$epx2Bak(`45lU0aJ|L{x3nFrf+7_jRK>fme#%OZ(b=;6WG{1_H@f@V#a9`5ZoQb@7oR9d+In5JPx1IGCKk0A0}qq#nT+ z$5%gqDViuwZT~^?fj+Ux{3vZbH_GwnaFpn3p&^FpV(u^`p^I_L5!QN-whMA;$geIK z<1ZGk1asv5mSgM}jj#)!yS-H5flvDFAV?r}s;N@ki%M=6Au#R;dCmxZmzLS_-s|^u z%k@4CU;m3M-uKzLtu*`mT(oaC*LL5jPrLO5f(~MQgB#E>uBaGuVVHN(IQ@un{38A7 z#9(y1ik05wp z>uup*3aWT~QSl)GK@dPlpgx>S!(M}xt$t`?S^gcyD(#WDD0n_-0D1y47{I*xSg6}?KH1dj%GewYER!Epi9napjf89 zI0u~kKYhw-gqwyd7g+bUkl-n(l-d7#;o1IkBcmiW_=fZ9m%;evi%RW7_Ye1Gvrg;~ zQILWC)UD;u{MSKIFJ7;!Uhz1B|LrTis$Qlp?_T62d#=lp!FjgRQ4#o(OUnjqE zW+{UKrP&NLAV06OoqncawesuEE;xL!`}GBaox&bn3;eSnOWfi2KP)#)xJlm=qIc#n zAG8>L&|ku*rpR-}vwDfRUx(8#Pl7_eYwx2-Nw7@v<)^N!F`zKw&ISRcYP|*wo)%O6 z!>(G5p8j9!LP7@M|H2o71H_Vh&pQk4?I)l839iDDv9=hA4c<_IZ4aj3vU`8m*3_I_ zo^9?z`|H#75s@1m7Gs^TFheqoa23AphVX%g^jwjIhY1(V$8P=cquLULL7g;7cIbb2 z1BD_(m-Md&1m=^9^(-?_|3|EzooW}kycnbvCkvFUt4zP&b~Y)Af87S0MX3AbgX!1Q zsTY&--S>Jr20lc5eILI@PxAkDL@-ocLhQH4VLX$*TtdL@ALa60aGxb?ZjXOK84O|` zX8>Z9LNG8e4fX1RTBm(Xd9v_;k?ZZ{VnUV*gb{5_t(nuaaQ!KQrvkJ=Pc*y{g9Ff5 z4m}M{uJ-c{MH{MdPBDVcu_HC!OtZ0`YI@K0oWPaz=eIOIf`0q8ugw+dHH;ov$Sp{x z&MUC+`XgL|D=&Xhnhkobh&qXpdZkpk7KfG;0Jx{`qotBA5>(}^l z?fVurwt;^vsMluJecarV%irM>G08wbaZ+~~^`}<2QhnE`E8B22Yb%C3O3j>b9t#hG z$#658>FAj_)KMtGMwyJCf^T;!-~RgDb@;4l&k_jMiWb9m6dRc`OYa-G%j>U`?LWk2 zUEIRwlLh)a96`IgtU@Bnm(`u*{^{{vzVrUNa$kp3VHFuKm;6ex!Vq?6EDE_tmBn?i zsX))~K%Ii@Ge50ynO|hr%{{-+*+wOqEWSn2xLBj5rjPF;Q9x z(-p7EY{VnZ!K1!>zYrEXC`e%LoxQzc$B2H;3pISkx6N@ms=fvxm(6}12%7rwqs@9u z_|c_45A#oTeWLfOyrlZC`)0L%=9FNVd+I75M46?FB84DzV&F_O`x)Mj@BTaB!T>P# zbDwP}=@yfoU(4uuf8m0LYQYQg(U-65Wvc!gi63v9bhmkTeQl9DX-lc?*GlzJ*9xR7 z%N>s;aiiPoL*)Bcb=SVW$Wt&({u3Y)e>2A7|DKPfw4oDq4Ch6N%wF8F|6js0C%J}J z@;i4XEn@c^YswRs=`Bg9j95xUtToh$DQ>|^}@BtZf83*zEvp;#SYy7)W0lKb!8mud)v!hPGZ_$Ke1Wqfj{J+O@2y|(w=ZiA`UV|u6DlANzV zY|BSN8IqEVwioUg+Num1+<{wmL&nv7>R|~{=Fypx!|p&>SU>UFVAf1`v2xixXQc9w ziaBp&n+rbiQc2+pWB7>jUHMO(*f;s_lgy=D>{fgwEt#q3ecs=!YdwEV+tMj?hfW=o zMJ3FHsQJgNnjVQVa;OAn5l-cZyig zPHBKEAWb>Msq4EHq5L|Jlf(b2OgaC?QRz~FHlS7gZ{O<_x4)Tdy0z4lM}c4x7}|(` z0+1pcZ8zhJ=b>%+Hmi#&3J{E*zE=)B%v;f#)%r2Mq&xt z##OLXey7C)VYb1e$G~ye&;@x3bnqCXjA14E~E8b2MQkS1CG==CV_{aQ8NIQJMfp zzQEn!>6bw9)k-BZXB}F%fL(#{N;dlVdo9;}960>k zslU^-3JRm1Y56^3Wq?34PU}uZ1*bt*q-9Ho+5zSW4~525>yE7^5s=gA^Eic~ah65;*uXu*|*-ar{fODC#=+sG+64ujEzqT_{RMme`PJX8V!jM}R^$7j+m`Kf{<-VcrQK@1TUn5JG%No|eO=YbCq2*W zS9PWd1rIFt-&PArlQ^DSUsMzx!ZxVtt4pDulqIi!n7lzR5KBklNkCOFv@{Fdzo;tG z^)vZ+iW}yZ?a`-RpreD{11Id~0scO+a6m%f^F!7hpUH8mlPU>5ruquh3Pcdz>n!Gz zai5deu&~ml3u&yCtkeM2w9%Ju&75nVMO8h^@@>BEdfxB!dhdfewXfDGHCphGrs?V# zuRVBnB#-zYCVCG0DFh{KS7rfQqdIx7>Bi07K}LeYT`mP1*lEx}+SL$YFLiVKpDXWq zf0VpDXqD8=h1x%_$A&4rP0qLS|KkwhtR8tTI$xGiFT9Y`N5jQI9=e&z3W6ZQ@6V+o zK4<>C$SNTN?@YyHFsx|CqGrLtHuLFeqyDze#>vv*R#^|Sa<%9>iatBtxYH$GQqc~s zGmJi*WHFw;pc#n$FT1#ZAQo=S5vC0TtYmOPHJSH|=b;;&LBha{anioWH zB#cX+UH^Yxj`;4GE9+RIa1iF!0_;X=thsnH1t25G?-pPXa|AU3=F7ev7F=+69uEhY z+;#wQ@g;C7cpmKk_jSfPm&yFSrWuxxkQL!%eSSdnb&Z z#|YyH|Me!H)3i7FCiXZL3ThM8`IKceC5KjSBtPbZk6M3nTf4j22rFw{HFJctxRLA?m9uY6EyKCtpy z*R|Fg;LB2=FGqYfrD5Q%IX03Bc$j;v5x<#bUbPrcr`2;d2n+haUZFToeXGgb4e+-9^$SO^^T3RFt>AZzBHs z5!^%W?)~qiXcjO)Ragbd4N_n{SO>{#)MxbN1_@fR|A3TZ;MgTA)Qn3JhzW7T?*5<0 zz3;3Ok7EQYm##5x`D^HLIO!9R05TtJk;H0x8vuLFMqldUn`2;&d^2#(f{&YwxCUR? zL*3w}AjE)UA(!v+M#zUW_x3h({6o*@_EEYjAtj93v3Mz-g@65m688}0Xk#LkDg7%Wd;P3?$ zKd|tD<%I8W;x$j2(Im%TjTv4V^b5+94r3kJI{TFDpW<(haKOsX=#Rh4<BpIQDWbaW>|l}Ai0 z{4|LH(UbqtS?&or1b~mw_fGs4am?u;o8Z73JaGX3YDk`QVHH_}A3gd0fkBSID^>Mo zspu~0@ML`@%gp@3VD0E~`s(1X4yVhEj(<0sk#{&GAhHVb>-Fy9b^RAF%~pTRO;^&t z;ao$wC;W>5&6p{W4>@RbRBw(EVxIrUZ@feh8z{-aI0Yx=>ZON~C@BR-u>!i(5R(zg z4^_A#&EwQ#@Jw-&#;%=XHDk#&>I<^4*Lxcds~5N}F#X@%wpey-q9zT+-!I)R5g_o0 z={b%argh1Wdc}p22iiSBaMW3rFB_F_{c`pMsUaQq2KoPRgnLkoYgd=y(g>I#1g%bD^*P3wycq)h%#OmAY?f#qWYV zot13u7cTzPShBYI1QS{we|d|IcLhJ~i4FV&KfH$ri7tJVw!tcsm)tEJh|vs<2xzxqiY=#6W)Pf;7k&JUpI>u=G4R zo;AcCQ6dN-!D)Yod?qO<_~FkIGHf;+;dRBOp7PW;>n^Z?0t5)@T((@Ra_qX@hD{Z)hW7ay>jmP#gJDm8z-v}`GR6A6YUGbm6DM$Q{ucf zT$f)rMb@}pUdHTgm5Z;wuZ5PZpI@mjKajuu2D1Hrh(5NT#gjWL4sc@kt z^SD>C8i>~63dp0<+H3runGv|WKFe}<9qLhYRM!1ui-L)>N&>a25&vt&K^_^1ghH|3 z7P>q!8urZR!qIZ;e<$~xk}rB7N~r>;&7KC3$m~SGsxUMz z>z2DkmuhsYSRai?Dsg!|30!0lgbkQ+q;%Kec>7*f+)2FZ4rYep2+4SIGj z*IsU_=Tjx$x9K4nZ=iS-WEHnIWn%C!9bB|tYag$y$^L0~+^-hP0(c5Oft=s9>qiS9bzQ1j4c#T2E z4&Adusd+mZN{>o+(7L{Y@S*RwS*U#>F6vy-{S-^lNW8lR+r`t<3-7;y^bF71`PfRD z+xGE&UbN?p{{z1dXCe4>pcdQT!q@}}^6KYOCGn$lt7S58qKH|!$#-tU9Kqb4+I}ZS z@X-YFI*!+CjIDqgA9nFd<+&{)BC3I?904p;lteTNg#w`=AV?@8355b-P>4(=pY8MKGNWNsN_t#!E-sc&w9dYVy)%@;OQeFM`aCM!%UD`W0SC`hhx5j%uipN2X z?%+lJ_h9M%&7hIyKm2{1sna3U^daY-_pg;F_&`78>2Gzv)7&w?r+6OAqgki=poTid zJB4k%T|ZSinmoKU?={#r1PC4nfS>_NoGF|FYi8@+$*8){KaTY7y(hk8ZtB>f7mkh#zkchnzh#UbPnf;uWPFTWnW#LsO>aXZ0DXtrx zBEg&msj#1rZ~Lk}H~MO>(<5Jv7rnFr%GSPwt{x|{og_P@ zME8;hpa{l;Aot zY~bj0I3e5kEi~}D@!|J}<>Au;eE>ZovHxD)JHYvT^ZT#@yidCT?)y$7Oaq|>`i1s` z0HFW7(`R6UzIKN1-;!uc`B6Vvu-yb|y{kzwLj~drH-TO}&T~ywpHKEw(aP2v7Cq4Y%Yld*M zc91!`K~iZm_D!XM$+dWP_;tbjfArwgZ#eMugR2==?Eul+BNBYInjZE=v_Y*kzfrSI zsZoNQXBWSKD?L=68gK#Keei1aelEgKYkoi(g{vOIq&{CB2#H&D8Z(i;7xc*$?!K{8 zQtL0WWYHFd#A=~4xk~}S000UTL7FTJ3I%_mF?af%JE5PleE;9CcPzDQmwnauUb#tq z^Y)A5z8PCQ)q3t@sQ}k^RULH3|Eim z5_b4V{P5QmctnAY{5P!NoUs0}@ca@p5i{xrzN4?XD={e%Yt%Jh=$A9xEOL~$hbiTUBb)>b>zm`biq>eX^wmv4nzAfs;Y%Usw+ zLhB+Ss%ZP9P2mM`DG0RNd5oCPG(YkV5H|l~3V_`CW`%Og_*s@)^C{FqD>ceN$EAt) zQ>aP|m5wpbr?*OKt=yv5XnWj?X7;qRWw61TAXO)Oby=^t?lJt~m*{WW#Zxzzn?A6d z!3PtD=bsk`{CoI^J{z@ILSP`lP#EPBT(cw&e75+byYJ%r#VuMtRw}Vqs}o$;@gJ#f z`&nNFBF0mvd-N=%cXzB0K`1m07gYggN5NI3Ep@>@dC(uDZCXs;5|rE_HZZC{!0z~{ zykFgOSv`N})gPr1%j#sU)-To^n|fGy3F5{M39oW!#9{q1P@8TR5D{)*xPc3EWEhr5 zNkC{l6;Z`bwJy*pEk^_PZ&Bzo=(Ynt!f1Z7*RNzA=Bt19MVWQ773a6Jui&^{&N z9&iKP;2wD8f^&f2nbIR$&kfVx|@ko(Di zRecGSzA~9U9X|xaRfC(y+ZK?H55Xx;NIkm!2BN-N)x-#9P-^n3Bn@)^PLPacsWKMV zPabIaLi2T1Mm6POxeR^nh3eyVIF)Cf&%Q=UeQSGA;nNT=F>x)-+!TaS2bVF zeu8&__i z8!!_fO$-@SxZL0;-Hc&)M~%2~N_=Ht=vX8316&3;f-`IweOhnM2nXPUMsUEz4x;WO zXoP$j)`Ni2ugqQ?Ut{5^!3BY`gaZc_&ODg^!rKZSpgbXeugA&?P!lBea7ZPiso(HG zLy`fjxjs5dFkJ1H%OpSl2(WK=FXi}5fnVIgZQRnjB5C#bXOEDrTO67gzx==SSZ<(U z;n$#ArC{d2W#(WVevQE?Z+8h;EWEV8&T=XX75tw|{dBb^eO+2CRx95Y9v%}V@4N8S z5|Q7!tLp=xDhRMy)LqvU#SK!)RKEn!)RK!eRdIEf;Yynqs;yOP2_Pv3!FgWb7sk}W z;W2oDd0`&n1^)xI62t%j%o3^q0&p({8F&!%3k0C%RgKjF#5})3%wL6RRADYPKuW({ zFVdiwiP$rBL|&`(NUOqGyo@?tP{~K;e!fT{J$VdnPy9r)jVx;!N&KEl;=futc`KTA zi@R7M2z$bCejgA=YZCUwdcvmyY6PaF@?$g0ct2nw4ZH=(0Fnp^y8a2KVM$@(B{9i( zy`Qp%(ml8^AJ1PUEH_>tZEo-U5(+VjKQF>~zg1P_x!6zo#roGTJwFpZFYYj9C-(2w z70q{Q`8|K+z=#poQ)_|{nLG&r8}*g=EzCV84Vizx5!FebE?ExM8($%TJNsYz-SYas z$yzOWcXxlOlI}@s!9Mk+c3+&`_(Z?#9ysL6BE|&j-nnz0{Qh8Z~aU)DNb@zR@g0v0;nl}phQjVpV9-HkjLh}#4 zjKpJK%?#~@U0?b{iN+SqKZhC8rntX>q}@#!gMXI>17Q?7L^IY&?rwR+0<3L{jK@a6 zc#qMacG<&OkRzjKADq{iNPe6nQ(+lg-2R0;O|D;t?|P??>Fd#DUUM(W2_f_~hsYrjkR(ns)IqZ5>k<{a>B$}% zDd-fEC@9iRewZb;BW_KP&z_7HnrWoSZZx4I`Nuk>@9Ta-2eL2qddl6U23_%_4E7gn zyZ;z@m{DZ15@Q(lzcy1Gn=QnOY?DdREK+!b;FEIVZUd;-S7xFAR8)kj_K6B=7>{WV zRkKwe?|4n%4#~h`Z5z_rvD~@gTk|+dwFb z01>7^nkH-&m(=PBmA2k<2Am=VuF1L!RfM|lVohsm4 z=G-?*Q5O$}1Ym8$N&$*#bmebAmXK85Dg!Ack1Q+~=t=L$1FT>b10jp+5$Kx5$|fCh zCF;-@&Hq*W7RyXVus9fSFat?~;H3!9uuv;Po+nkuQ0TI6>aL~te-U^3^$sW3YcJJ_ zF`)rNoMu0IwzEK-TH$Oy{nD27uit?%fb$G4^mht+xy$1MTnFq27*Pu<#Y_&8xMX9jLa`9818U=HhT z`s}-1yquCbq&pD=gb7mlGep%;ld#nVfHr_C2A3h#bBFZW$I3(3w=8t+_r0Hr?*H*u z^F-*5f9N%K?XmANUK{L8E!N_0)B2l3XQp8%33V`n0Yrf1wEh(?i*>ggH;tV_RDIC8 z{cF&bXY10ACF)yTuhrsoCwMi3Fo+@~f8M+T1P*~IpNGs#fa}cUh7eGmbOFvlW-z`a zJCwf_V0?1?*vg~+fnhu&>N12{EkL03{JI6rPv&*SZh(`Yh#%M)LjEMvUvn{TxEKX+ zVapXb?B)fsXY%M5%m7&7;jzL_+2_QcuB%Wo!UK|Tc3SugfWT;qFN1(`1^^X8O+k1C zk2rv83_xaY_&_sN!Geem4N*b`PEu0*TtU;7T)*I06m!QoCGr3AeAI8+E?3R*HS2S^ zJ#}8S-E&rqwc4{M=!yavoVNDjy@^%S%_TK+e9~g~==~+vuSbyp zQis6s<1PTn$&J%;a2Sl`(p6O0mz=MbRA{N^+t@1~)O~Saeg9}8$0ICN%irq#*RM^a zrB8|OOP1v~{^MRecU%dBLvTG4AB~ofQUg3CtZ$AT(-L=ymw+|kNk@JtbD=npa3oO) zl*SavE5|B8!h4fg@pnLEuZsitP+33#fe>T@A+)1fdLRJ^b-LkRnx*|dI*-!am)y5I z#)t!uF9m}uULk-$^pv$0^J-amWK}jUPWQCp3&1;)8jtV`=A=b^FB=V^g;V+}_Ekgy{VC|1>o>37?_}>#b%l%Op(?D-b)naE-B#T7GN(`oS zaBAXP)6HXsYL*$d@_E*JVfow#tk{CdVMP8wJw08`@!|8z!eqNY@-12t@?BkV2%YnM zA>n`O)rr)r-!jEnb#)2$b#q0VVKKbj_6}R|s zkfNobN0qK&iA=xX82Ya$<@I&JfdVn^lF^Buq&X^9hLm%(6#dHmHOV(k?8!F^{Osxp zN`Z|yJ~H62ki;E=S@kR!!(2t`3#tzdT8E-$++Dint{ofVwB0a`!_it8o*BZG&j;#;@{At6 zF+`D@0OHzUK=yC+M#&!=Qcb0lKu{GRnv2MQ8R@(wlqp^z1#w?r=c{ixPOy!G227ki z;#8(HT}>#6_PLvl<5o(+rLFeW4dJzF-^9Nb?UpwbZlSt=y+z(}9r}VI?*1PHYK=i=_X_%ptQi4ro}VU-;dq@*mS%Y+i7wJyW8)Ya>rLx#>jq8 zOYab1;)NE$rYnv6wl*s^Z03~ViD?byCb)4hwLC`#&m=`x@a+O%o-uR^K{0g&{Ww?S z0-i@1(;*1U*4x-?k3x!hbv6w=wxz5+wS5jqSHw8heSrL@%{1RD<(fECe`vAF*|z-k zU#xzgfU+3ya(@J+%kzN$2A~$W2oMxwhAVtP_h*VYhx-Z?R4j#NRmr3Hcy!|?hXXf6^EpU@xv{*RE0ln5*8nvD|}?3jK@Ke%|U zv^rRFmmVaPV7!JtAvqjNQ0gGPE&Kg#5P+v6AprGu{HhI066zl~`G?Lm|Bso+&VP9+k{H;-Z*$#eVzqR>+dhu*esQZ<5?wMwoSpl(h>Iiqq|GgC*AaA zrQ54^8950)=keKU&ASX5&KzthTL!-!G@A5b)YA)b(h~9yY^&(>-4_qM{lhlx z*Ti2V?)q;E?}>RJPs;ieK ztZh!g7IiaydWgQ%}hS3^EvHT+UUCf*H9{`8a)_{6B(k^g*0i_Med`6|cko4(MuHiYep$3X@0Pxz6I z3=V%)mdqFhS$&uA*~~nS(wRWOlN)NmANtEplt^wdO;{9ZFM<}9TOaweLp6&5?Z3)| zzqSYjaIIc8CFfC@lp5KV*Bk;*4vRRe+*FwK8=LkdqyDn)yimo6Hz}tgk8seM_|6tp zaP+ZZoiik&=(#_==sa{c1_k57&zqM*C|Hbh9T9kP>ON1ud~Cnn;WIobm`cMndL%I@ z;!(zI^+Yw*%O{?H*wGi+955dE18qH-<1sd`w*9`9u4B^vwptAw51&A~`UC_Wb9?!e zEuL2bR*?KD{yP1GYVo@jllq}OP>lCkV4Q-twHNDNTfEz^(PHN`Rw1V^<(H7kx9^wA zU&8T_Rl+W@pw~dWnXEHrUK;s-(JU`Pj7EHGDr?rO%&X=1`>-Gw*t_l2#00EE{g_$c z_B-`Q?{H7x-kG_1!vThV8Jl48RncRBcZSRV!5;U9J%VoT?|EzR(EuaWb7u^%bJWVr zsDA(Y!G*YgR~}Nbqa6aR6o=s+FW2&Te`3hY30PkH)}&31vXk_L{18GH4|votA*Ps4 zw+sx+n=YN@+J>${1TxV#;_z3B9)zd9{h?n3O{i0D5P}sX-;s*lxqmyU1`vKGLk~7_ za?+8LM|SCn1y}2p#O)%v1xqRmDRmwGOw`y%_cW=Lf<}HDRkqL{&~Ls~v9diS3JB{} z&QYbJ1Piwcq^TaNBv*wwsy?c&+^G4s1@t4@&p}AE9;)=tSC{uVlbk>44QOV!@;|1= zRx9LF*eJ&g@x20w?M_kQfvrWD@dYkc-BYLV8L7YhoK9S|6@SE4C|_^xhIRV9rT_cY z5tXiAu3HQDW`P${bl4l>#S@JnHjETwvh)?{q&Eeeeu5UBY!GVCU@V9Ju4nc`bcKa)n_5AhuAsS44D=atOb6v9>MgJ$-PPim50SL~c zLVg${q4w>|mHr!_r}!kH-SxXrN+gWGX^s2rc{^~@eCY5Rq~YWa`>YZ9KQC!PD5*fh zxEBk>IHrIawl3TEQ4TUW|)Qx_?(TEA}^)WRL9=r#Ie=ooKF zP%&L^e_NWuFd6wTAVZp&5y)|bT2MmAECcq(C*4G%xWlT%*N_pNo?Tiq#*fzQ+mRV8 z1u=v5!^Do8F>nlf3D=ft{PKIJQv-;1A~Q9;!$v~%{u#a8HYJD5upMHaLn^$Rl^|v& z;c^zF)zoL#|9XbP<2y0$aMkaU`90W9CDg`f)A&p-3d^dMFWUBi@B1ZRLGJf!%FWA~ z?=kgU1FQ{x9|`y3xAJSRQxJHG0eb1f`@QVSJm4iWm>W8M)-WV0Lmp)>ZYRB@Jh)KXzog9&EQgB%2It^UShX8lY4l3{DT*v$t( zD;R&F9!&SHYgYL}cfFn8IqrT@MIukBA+0wY_BfO0al#V_Ic2Xh#7Ov z7N9a5L|hv$4%Elmgrj4M59izu-?>mzd-of*J7MtcgQAdbD;-v5k}vqmP+mjecGggz zPCYOMQ}s#*NGdG2vTCt5I3MZ__$azCHI1{mrO&x`So%Ju3BO2c;Ve#~#l zRc@fas(Et0ag+86gOm4P{7u`pZR^2C^W9eG;lgg~@$xO9fXnyt>)8Q+mxHI_R6upd zlOOlqWFb5z_a6!)+?9u2HZBAePBRxjsAL)$7Y~=rX^FQihXInnLi9Cv!!tjUZdF-FOVy7r3Kt z6;@2Im+O>=G%DQx#uk^)sf(x5h<<)-m)GI}U0Br$k948fBXuNVsrXtd!Ti$pg#Nu= zzvQn)PQ5F;U0VHWPeLI4mv?&nIf!v}^cd;qU&C};x%H$i;s;&P3sn(^Nsu0RbQ``e zCeKcxU&$t=^#r)EPW=wf(?$lpLL>}(>=M5b@JJ*)d47O~7YdRj6vI9OBol`CD{|W7MvA|I z{1b~NTqH8`IX2vl2shyp^GdFQh?Q%#AHso!mk=swK<3@82@d@NSUTJ!iiJy zwmZXT4_%qSWauEN8)Jyt^{f_jDf-xDqPkMRSi}2v_a2!iw)=H~Jm6{)6#I>;qQ&KV zQMXGEvktZ3?p`ai(44aeG2Gbu)&nA5W@>kzDl?=zTd=j@kb4R3#)1H6B$75i;LjfEcvfcs{R=`zX&YM5H6|@fUy1! z;M9LqmkFUIPYl)mD!EoG^<`S?)pG7xYu75i?I3|-1ubzda(l`F#sdJp6*X*PfMO3P zCRB*)+ZBAC;PeZp4`vwR4jsn9Jxl>C2OZ2$U;mj8XNqgCi&tH*iuJG7D9=}ui`F1u zp#uj1$&8qSSsWMGl&LHa8ne_27H}vf0Af&4RD|6($~6f}^0(F8yRVI$8h&V}vx1xh z9WMc+p@9jxWOXA znYb5wp#8+)nD=muPd^C|Q8|ZoG1ZCqNP`DtSg9zL9;mW?AL4+eVP$(Z$)8^duuv}( z1;HV1YTqZ3&r8Yi5foqOO9$&ORqNe)a{pjf1)xk1iwI(L7D^KK)uq)UZ~Aow zRltHUljxPHhCP4EWN~}w^xxdOFNu1%+;uTpn1(pYGT06OH&A1S$3Qi&5Ib77_aeMN zx=mb{=CUH|BP2g1d=351(f=KX@j;^@Pkl?LR3&Pbp~lcrl;PW_-kxdtm*FvN@ig!Iza&#gJu(7>3e!;JSv+kdnkCzgO6(rP9kusebj8j!#m z*(jMadqcVrWO#?C&0aQPh$t$P4NIzD0+?7Ig|36Kroi|=+Md83;rBPqva%o(Xdj`f&=I&(nijpTn+K{!bsDy#TH-M zEihAceXIOkQ=6dp@Y@b~2Jp1|pzByC65)t_KC6}-YabQm(~Ume{F*S%@~~1YBPl6a z34;?omG2sKy(FahaAH5h@!wm5)RP=tB%dz&G+~|;L%V*5OFB8P{#xbzd%N}P)m@HS zRluSU72V%9a4muY5%=KyJQFkB-&@C?2s{LD!1g4>DJ2JYDtD?`hVs2n!Ic|Je6T%!-ULiOIBsihU^}DV?GAHBsGS}sYSm;Wh z@J3AM2um!#uYv+m#>TLdhrD!JBu6%eR3dkK;Tu053Vch7n&n|HEWdeKkR!2}NsN4> zefNTn6TIwd?>_O;>kPiWq0^XtE}*UN^~Hj2=e6S~^hu8jQWaard4|A798c&gl-|RW>d?|zk zz=3i$bF&Yun9P?Nz;b)(?E=GGgg4n_pm}(_KDf>D`m2@|EPG)!%}ikju|X<5N;w?D z|JdG?>>HCCmk>TXLx6Dz@xTDEcmv9ND25FxOq0E66c=c6=XbgI(qg(84|bUZ^v<;2 zsWR(q8e4^%m3tg055lN^!?v&xyzHebX84SE%2{xHl1%Q!KJY}WWZt9viS9Dd4o~95 zc|xQOF(eX2gRaLN*umuM$Z0B4`mJI8go~LMbPn5TVIG>^el#N%9A7FvTbK9n?HGz> zRzdO%N1FUp>0<~lj)nfRTs3zbi9pk`!Hl!Ahe|Y3!0}EM-GeV5hpB`mLsF-gU2?uy z8?VJ%=;ZY&dd^k**8dN!JdJuwuP5icmFX>C#A`>)CT9Y`(=>!Bm%-!8dz?M$&+qe5 zm=T$@_aM9DD${%IqW204x190TWrhATI6kp?R8no9u-phX5x<=o^B_Z8pWXewIJ zf4pu62vs%T;umHA?0DPKsRdti`^6Nn@j|4xyM?3JIZTYjPaE76p zz*HLSFj3ANq!G7JPwM6K&OjA5PL5*Tq(xztFNt36d?4xqU`MsX@(@dhfah8Rx`M7+ zdx7z&aKYBka{Ds);6cpF9)my;Sr1IliGTo?JO{Z1235pMy($Ba1B|8qHMZ{zcIG+k z8I!)HeTk<_e~hrOZ_V@&7~|MrV1T^~oOlOkD7K z1#^&l_JnxODr;VwjBW+)+)-Cl3|%eyir#e=Cq+h~*kYTCST+oCpyZ2BI~Oeg|LFg* z=G6C39;aL#)ab_`fzq^(b7EDwA$q#7?(B3jT%#|vJ7jAQ+{Om;Nf<~hk$8U#@!46c zoT>`LY&{hn70#RH!2}djTtiZLO8uk2a5%u=CIXGbWbwRSCzxR2nsiJ5QdoaCG8+xF z!FLK{##d?x*TSV<3SI=ikGR%#W=2G4WO~xD=2~t4r9||W6P^jh#d25q`G5CbyVlDn zYvLZUt$*eBy&%|&(qGt#7MhdYnPsrS(`rj7U?Tvfz#6$ia}d~uOQnP7;d{O1max+L zKkv5<*b|gW*Y6le{%MdfH{ZA<7rVmC|5zv$hY@$^WKi+Ts21mkR0i7(^#+9*LhB#7 zd;ZHu4;|*M@9oM183ZTrDKX+LV25-{b#`ugvv2=6Fh1omZG>q6&9C?O=3O`n>e2V4 zqUjAkJ*F;TGPIyq@K|Zsoq>=@HrK(JrqHTc@a5<;a*sb-ZNo)i$Moy$7%Cb2@Q9Ga z4%j3w&4VA8*UbzUoC1W2e2`b%)qDO?IdAb=mpFwde(cg?__goCw6_5Mp#NnFNtOM}N>nWB7`xo8z8I01bR;Idf)K&?9CUCaolK1-!K=`m!OD!C^ z)S-c+jiP_Sh1w9ifnz_Q!@P`Y{x&dtZ7(={m$Mp)HF14jtVD7{929ZzZcLp!sEYfo zIv7IaMGN>DgEu;m%SIlg&xBUyx6Ii!9wCweop|80{AKU$X z*_IV^(+U*i6Y7W1LUX75uxh1IT=Z(K{PgyLUfVmVimu?Z)pc`OO4wqwV@I1bx^5{y zWTLS{F#}~E7$QTx3E?r}v2DYDUtm${OZ^@Ce6xBaSLn4p`hv4jUp^p2!Hkuy3S0bc z2{yb&w$6174U;|2>T{)4C7*6OBC)Vm5 z?JA!}<17yURj~LZEnp*VfZH@<-{WXth3~?#vjpue{_=gL6&zOQ9&H_^*YTy6if z#-N6Mw$qHq$UsNJRX|Jnw7*SLA|+ptKt>&^xi8x;pe6GT>bkc%1PnZYsUJ?zD)y3b z>Lq-CCTEu6ld7+i?GP#-gs|@qm~1Ah^9Ob2VQwgC)PU;OAn-O~M-H$Gw84q6W1#bC zKfxGee}M*>epWI=Uhw#k$XqH-S5;j4-_{7=LkNb%r618z6sg4RKj1sS(k%KwT*kOm z=B>(k@6jH;T~gPg=PGgtMP~cgR$@Z}Bt3PP39y~P3H&;6`m?V=Ci@#r)mZ1)_`)9@ zFK6Y-gw%SEf*ao)Y!%(N-7BNu$@ur-n86F{=cO;QK{KX0v_bWSdGlV%1mWfqNHz_z zqsR3I1j~iShyAtsMCQKL!<;+8uUr|Kr->i@6N$kqW^C^KH?$KrA!@z(_n$g~!ti~R zu8^1UX8ht$?@|;H2=i>yFfkKxj%q?zNEf<%U+nm<@GJh3{QZRO>IzCTSm>FxVtm^AOsblXv;|PZvuIhs4#6Z@?;mehL&lit!A^(`mJOwYP)pS!S>uKw1M>R7NOW zSgOr08Z4)V3bzG^83K~OFUS!Eg;ltp3y002lVUG62V(eIJ?KB?9!UZrs-9V^gSWdas_?CF=`x-tqqxXZt{t<9}W9eE)(j zHf7&^5txz4kMK)sK0XZzf=1JJH;mATI&!3umhi7@;Et`=V?~eo8&cMxu0(o+R+_m1 ze2(%RMSrC6q$WvJ$-}jP8$`_^*rx6)o+(~hNVJwsgwEBG+yh1D$ z_G`*rB9|B}>G_YtoIaVg+b-#wcubDSC>Z-Eq zUzDK^?`O;^KDKNBn7FPabEwMd0giIyK~iE%^D-|dsM`NgJjS89SF2*Ov7)cmuZgSu zdeg2?e%A#A7i(!zqjO(^Zl{P*Vih)ih~obQM~#hb{jK}7TsphdxFR722rTh_4PUz` zkVGSfN4T_7P9r<LFh^bO#rOcy6c zn7{xcaCHfR+u}WDT*X>kwdj3Um#VAizt#TMuIhU7VWfZ4tM~8gzt*_*eOPpNXpVSS z-Q(z{wUDl-Ps9!jWcsgoq<^S$Hso)YQ{Vsq4R=ABEsJUea#dVH6JP&a-S>0XtIg|| zYW>x#$;#&$P^7QF+pvE{)miH$x&96N5Qy{R6Vl)gLoc8IHmA3g-@4(jYQ0>^>;K@NygN+9-R2IfRaF(NgG44F`@d@rhYib8 zbG5nsb32N-Q|J1hp2m_bAwRhPfx*ZaJu;`bD&s6!>URodEV(?vNa&CfgK@i~M>ZOW zL5*@JmY9XlmM!voe|Rc^P*~Y=I_NttxLiC2x2Lg$e&4Fkw^IO7a}RJ+^V2ng-sJ5r z;oc2hjn_!B8=Lh9d;>BbTb7T9KDYhyfhbsi!7rCtTe4z~wHs<$CR+VkPVsXO1rf8Q z%G*=6%P8Je=%Uwxa7KFg;!nEA4x)Yk{UQC`TJ|aXSC`eKxo_QT?O*kMU?>4_3CL(f z8U4V`fTj&)@MmAZgkVcDA~5%#MQ^7%j~o&kiYF9o$+M3PB)z(=>%)@YTs%P$`$$-FHgB)PhZze*56s>+q7igMUl42q>*`84)wEm{LVfVt)1G^{~zXidgzd_M2#|s9R&7tpHFuU+c$#s3=wO4mHGS{l~ z-Rb^_?O!M8$fPnc4IK%ZVA3$y?oHxBV;w0#8(q#kl{|6&IZqZ})@`r$#$cJ}g@)F6 z53i;MGr1l@YY4UD)>lij#@FdzpGWp7abI%Xj)ZdE|0?9k>aRDelT1#S%rI;O#SEA88{YLr0L(ra|GSOdbiB@!>OL(`_;9 zz3va1Kx!Y`mpj=-mkh8h1~5dz{=}f%dLsClJsr;O;@N|+fMbUqQ)B}}716>t026Qo zpl%>CngB=#w2%N0qB~%K0H`6tLIP5nn91w~yO0QMcWlVO;y>xJa&tGSF$X3Av_6y^ zHVb|OwhIf;Dzpie%L9D6`;p}P%|t2o9cj$22TO^v!$nL)3>AL%;#}WHeg?cyZuSdQ5LwN@*4~P2R?IP0W6sM|0mm!RVG--d}#` zLBkihfG%+d4_@lMFiLAlu_j3aK$}Xn_%I~zA6(RgLuT%^H?(_kbB{db{Vx`%tdjOTJX{+z3YM=Oc<9J z=MuE%|K^c#9}CHTt6rTq0CGT$zwt}pbqZ?(_*?Kgg$Ing-Tp6lqK82M`@6pG_P2q2 z5vF49Z`xN9|Mm$ZtL06P!B)y-G%&gfgl`?>UJwT%5179j$dOGJ9$bx=CR`n=R88f0@Sk3hB5P81Fvj?$_>+{)^21TgqWB^&H%Pubg=757 z!?ep;m5SCuI<8%I#xb#b6ZZsDE>Azc^~188D!O5o+nzKA=;EB*n{4K0OYo^B6G69Q zDS}r?(L3KV-GA`SSRbUm!XW82iGJ)6N0Mp3i0+Q%AI?=-;qpTFe7*Fy>faIHfP^^W zJG;gAcgf%bGzY8@AeeA~svzSvTf_&Kk`?7Ob~8CUlf0&{86++jM{-+{Fjo+V3ug{B zR_M*aP++F!)YDA5-Rd8hC-_u>V1|V?5rQ9vE13b+L1=-$%XNgkF7FqU#H?5Me?v+H zFC~Y5bn*UV#k5fYyyrk4U+M@(+AZ9I1wvdCnv0^rkNylbybIBk$5`qnpV!zUm49BH zesQHP%y`HA!kdiKy=-n@icLd-!lX4U0A{47E=UfCfZ-x){5a2|8`lo-h<#bBN>6Ur z)h^CA+x_Y+x1)H_Kze%MpqyktUugUFU?#sAonZVE`s1+?E(vpf2YE%$0Qo)G2^m5K z2t*psygRi&;)~#_cn6q-f*GIoVbr)fM3`>j^hud>f>MXcZnU9Il}n7D3tN-4bXy)+ z*XOb}HY?D*cp}tOixErr(y%p%N zkK++LC95^J{GPR3T$ewXj{5Tn=E~c_75MVUH+CHqo4F@*2s%hPLj#0wU3i6b{!csm z36<{4B%9$7LQ8M^7dFckI;f98rDW@JSTta4~dr2@vIJxu7Tx! z96O99`hKPQtemeeuUp6EaU0*GnXk>g?_C__C6H0W0l#!ldiyjqkR`r}<^A?3vncm_mk3HB z95XlWjrV;Jdwh?fwO5dUch~ZMe_*<)jzVV;`Ti822%2DP(S=z+chf2-a1L2MkG=a} z2?7kMAg!mx;+nCi%d-^7_+JUTLA%VjX}YccPG8a)fZ)m_`ctz8t6G4EbNARV0r#aV zy|bs=Y&$m(Xnc=>ff$lz!%)aj`!T!UVU}Koez}%`1#PaTQhBV%7md$6Ra#5@X>w5@ zi`&ScNRmgpaxUpIDd~s@I!M6R8{6X;|M11&fJ$-rKdB^`Eu-p-+_2j+4%SrWf?k0@ zwT3<2`7hdUZky(LdcVAugg?=_K2NIuC*Sx>XI${sy(h(UG2>cpyeqqIWgbiPNHY6* z0VJ$Qg9m6^orjFiTS6yTlpo`vDc$^T=iAs&hgJkpqJnB*fJq!%(!~oP0uF*N<|;EV z$$RKL;gRhe`8Mv$QwwHa(^nf1#x+$B9>d;jD4@nJV@Ui84`o{)j+(;{gJvw4W$*0L zNJ8U?TYvC5!%A<~Giu{pq}k1LI8aBeRZv*yM5p;@ym{LAcEYWOH?sPqC6Hi5_4O4) zX_MxKQFm2pnj+s3)3>lNpuGf{gYjLj2k96eBPE!9fUX74mB(u2p^a-cMiE8IQ|rU5~x) z`gQ#LBc|U={^XbX>b;Wa_qvBUAz#jD^^@NJ_1SG4>X|Oz><|dRm6gYWPV)EyEI{*K ziCW*E)zdL@pDz5qsA@%HOT8R*qAUB=`&BKqn$LW(ck+8!d!WEGGpGOkCT zAUTuv5fE3zX6C#4LQd^2CVGTvGj{mqz_IdC_AEcR;)MuViQzM$We%*z*dXEzvZDXW zj}^E4W%@9I2Qk8)YDt*0h?gMy1abDZDN|UMSWu!kF0*4wk!B>|-2NZo{B{qpt~1=< zqzYv+{o7ET5<7PJhr~JRYd!@Y5SeG|Vlam-rBU)$K*q*<(i}N`u4#c;cXs8=+Oom^ zMchsPOtjadW!NDp>7m$dUEk)h@AC5c^AXu{|Ml1-kJDb8;YwUY2J4}6`dqgVG4hl3 z$Bxq&8ge6`Fqiz{)MM|xS6tC)oa|>e~qttK#-cV?7!l9EZ?2w$|JPNAba9o zOTxvYAkc|Yh!! z-}^9>XZ2lW@i8%wf(cq0(}#(dtC;fzFN7mAoXXas;jI^zuuu69P8c`Cr|+- z6o^O?3JrpxK(Np(Bnt)t;ZUI1DiI0=NMTV4o+n#RpN{$V@2`1uh2`q}UUAPEHAy%d zKRj=4#kYLhgq_a`@V`eU-j92&W66yt=XR3KSgD-pf)OT6d8u`gx*ynBS=j_jE1cIig zsp-EEL+$A7z5*9G?{NCfbMfB_y9lqez! z5rTnGpqNM&6a@mpK`>M(B?<(>q!T^lz1M#pD_G5LuC-OhT+DUf7}Q3GH*L+no=+0w z|2Nn?Rm(pQgL2Qt^l|gt82n`}OUW;m&kHdh3;a76rf@_Zru@(*_#*ODF|SGOhdRzJ z(Xd$#J`iXkdt{fh;LgOdRQL{7wp4JBeC{&P2 z5()`Igkd0HP~&-H3JZ$LlED@~j`RW~xU@W;A|H4il2}75BmCsK; zAx=CXt8d3?ny!zTd>ZsL4t$hloJml}oP|!S#wGZ<6{xQHx?BzcDw+M17ARb)VueVj zId`3Ns^fqHiWWaI+CIegCp@L!PWi{bSpEEF@%PqwXibBWV{RV4o3MVCr{S&{ac|-F z_2{qovs~Is^S&SFE9u{jd>3R>(bP|<(9XPj%04vgdKPZlTRX~&F4I0qpLWi15oC9h z&A#5NXfV2iJ@f$G#GZaOl2AYt11cHg$uqPZCXH5T)%Cj7OC?!Tr=f3I)S=fngPd?2 zXQX3SM{^?>JRZ!REQ=t{T>2BEu-kCj({54go6EkR(J3iGo33m|Q3p3I+ng zQ6O9>69|byVi1@_CLuGvw-x#6&&Q`a=Z#Wj>y74WwYuSTC660Ee+-?Map=Z6>9ww>vJjZrzV}G(;mg~X7(IXIVb1^76_&TU*^VI%67SklO~1lU8HjpD zc`o)0JZdTZXaAyzdN&c9rj+#*@v_hPC=cu6G>zxg;?gJo^+W=QD6__)S-=R^z*?nI zV+R2$RFotn5eWvtAh1v{77YY~r9h}eCN&U*#3yF@SFazAeSLiOKBI5ZO_XEjxc`4qV0cuNMH5o z9#;JBEK$EjO(DRTKAk^Zjpwg>(7X^m(E>$;hps`fnFJPAHOKbBgWp!)&Ua4+J6x7rtil4_cJ+sMZJ*Md9Z1>$r88<+ra z000u4L7FZLiUoh6F<8$WlGm=*zAbzI|6ct{udj6~RuKNZ+V)S+{XhD~`dea-wg#lg#QUeRX z|M5riNW;&?J3tUZ2SWkDoO^_JLBn|}CEww(DM{VoEkRR!3=y}y3X&PO(?|EZ_7Yxh z+kF?;zh3=DAmB${yI%P|Ben0gv*=i=)JDQaky*&P8)PEyow1f6K!}}3J;gn#wGY8rzdN5E8 z!R;smsK6RU8^IXGLvrsle0Cs6Xnut_!v-3C+tx&{{CBGYD3B{5x}1V{M|(=|@=zZV z{IO_P;ACZlqH;_8j^3Fw{IboG_!Y;6LS)Jv@Z;TN&A5t{Uzo}BzZMC`mmLtb=EVj# zN&4oDxJg}2QC1(Kx5G+OxY^DL!3UavxA?&{pM5+A?`h^eYHnUwut+JFR}HL0~R{Frs6Kd_&dS#WBQwCmt>Q)VA--;n;e2+o?>2cGelg@c_V_(ED zKr3*|{suWvJ#a_>xXj^HzyhjW00R#}QY`@q6V0R;EMs5REJ0&=KvTk~s!f1X<}4)* zb6abw2L|He!_AyN32hkg@1qKvLEA}HWr|mL|Bd|fP0r#RZT4A7JPiw>Fp{=gt%Sj} zI}YJy2l4r5A^tWG>M5{<0ZwKlaL<3NWe!Z%e0hJK?KO;ef+K*&rU5V|ai|aPQYB;5 zZf`o3?FOxKE!G5njC)WRXDVL%5N~`(ZCcVWw*^sl3DD~NSZ*}`ytza60nq@e97&xU z>k=UcD%`7d3YJ0=6}E_Y7TreoLr?y2iZMhTs7PgI*5jA*|J@3I(JSTod%Ad=zgDNsHR*UhlV>57v88L3T_b=ss zHh5*4RZIRT+*io~7AiNOf^^^WRRz8cQ9H*=)*XWM|B1+uSQapXGC3!!gjb3%`dV2K~dt8RRWzu$b8(E6L%s ztVt_1_D4u`2e$(ZYJOka)NgVQ^v*}U`;4%HxF~AqQ##hF8t>8`o&Qm?!8bzWG5LQD zbquAC;31XVv7mokif?*TuIFWMA zBz%YyR0p(wQi__hDvhXmD@IQ#&G6u0)z)FgcSf$^0tOb7zA2p=zpdq+k z-Al$0aFNZZ5hDe>3$@lALZ0USyo?x3G|7?-G>eM3&=$M zfp@m2oQB5ZKAjbp{ubY$CkDhY1rV+23$F=2==et4p@lj{AnRX#;Zo0eNQN5otw);wSbFFW=uxN_ zDG>7(`?~&Jj$-{FtYxi2+ec0ZbmgKRwV|S2Y$Im&(f9x8@q437f%uj0mwZ?Hv)y~Y zFS(!Kko-fIK5$W_4;~K(l!3?|4iLFxUIZXiVUuD<{{momaS}^OE7nY`7!VZ#v9Wu_ zVu0KM-SNA)fCGSTED4Y`gim-tOh!4TQIl5LMO_~U!4RzQ01ye_UQECM<{F^+-1#66 zEQ^A;bdVj`FSa@OhkyJkHSZb{%v>nYt6}plIjlK9e(*tnFqMJ&otdci*+vi_@zg8} zDp3PhKkZG6D!@m$fBEg+ySzF~iRjD5xaYG36uQR6Za!h` z$<}exja9?W9&oS>unlnPo_~|;-iTTMPlxHzIQsOk@|fqMZcRR%h(GilwMb($*eSPe z_4*x`z8lv6^V%{;7x{fe-w;66aANLs$JvFA9n4-%HwVX*wh=vZXpO`~H?)}#tr@*e zgp1~SriFcB==VTQenggft**SSgblYq)7Og}HPomX9r#78dVZqRI~j7|MV?Y1QIzLC zBUaW_RJQL9oJ10n9_${-=f7*pL!L$N-Xi&^kBf+Y10Wy?JH2=x4#Yn1SRVmx2+4xG zleqohU z-T`b!G=XR%;rGp_z+i8gg5O!BLG;oMwbeYHk$Z0s)`3=r8@mHnBI^56Mxh2J9jq9j zL+KO*#9dwp3JNiqX=IH)icTN@bCT#9G+awU7{LI?L1nbdn{8>f&roZ0`BU-qRensp z7R$Ku@NvtOr`thG14d=6`vF_xxVr(BDB**T zi3)lR6g!!aJNA-zj2i8;np4AHKgsy|fIY#XyJ;bm*MoOd4KeBD)AwuzjZ^K zgajq<;^psUeeGdi4*8|sViP~?MJMgu`bfRru0TV@V~ts>u;DH|n2Btlb@wENY$LG( zcAc%{{n9E(Do*4@xS9hIK=-gg)!G{!?+72ctoXl&r`Py)xf)Un@}B!T#{ms+|LSiB z6iKR&1_J=q<`epjS0@gA9U)p@U3HviIB(Hh(%t_LE~8&X|No`wZcM*_bWE!R!4!8D zqTq`tU9xl7Wc|HtK4uwong|WWbA+WY3kh;?r&j5LUo_qQw%B~Q*oe|Dq82cy@=OZ( zFdvk2uxOH)^G<#=H#|U4rnV{hut3^N)()CMzYIj#t`Oo?{@pQqrKm&xbXzkMbHW#J zxQ;%^tmS2Z=1!h4GJQUKe-Fu96KCJ?LmMq}c;YDwhjG}_An95Dphvs% z$>ZMPX%OvBHCEl<_|tKue`cI6x|nA4-$5z45M+06r*|29MvB_=l);~+ zvW%i;lX)qV*FO+~ zq3ndx?(`~o%D>uloEJ#`0bdet+BW&FHMIdVYw^M$v|Y;DoRR6BE`5N!7|6g0%3KGQXc?&tQ>(H2+@+0uEvrLJ1Pd zfMUO~78kk8;76o#@;b1475$F0MC;REA+N@5@!z#1zKAfADA=D(ZI{fXr2Q_3uz6f( z1Q5*AVj20%LI-(ya8B_ixkKnV_SBJoCrbknQ^ya2P z<`bKhwJQ2n+{64eiM-LE?ItQF&whYqcQO2cgIYEn$cg5_@iIe&3k0t zHX9zCp?V={lH~2?oK3i6zs+APo{iP()L;Kr)}ij;vqb{B+J8ZO(dW&~Fh`$E9!@*RT79~a)drY2jk(9x8z42b`s3!csgd=6 zJ$@WS`klJ-k_H>x?;#Q#roWVOFo|zry!^6Vnwp8V93M2p|4(3$yMS-Ek87(B&dgNV zKi%En$1Z>N8X-ecvBQa8uYctJUoUEuA|5&MjAWnUe*!dAM1&sq)OE8fCEXK)N-ND4%Da~ zvGkEsJc4YE=mMb!&-$11xEJ4hg}XFE*gpSzbBrNuSEf4xN%-O)9GDiZqmXdyRYaO* zEAsR(w$FyaJZ!e{0yfDx?QLnGRxMqnFObMYMieO$cM#-t-v#oW7@&zDu45mKxD?mU718OtzcW#Z<{c7r=O zw7ySx%p(J+WLXzibz8!uIL-7!7`TT7IWPJV*4)02)w=fo<=^Z^Qx3|KW^gIbuMDb(|@piqi&0RrS2kOhdxnV zyWe&`xhd&_QYBf4`@5fo%V6ViF>fvV@!1MPAHpJ*&>d&XAQi2&d%$0W4DY?K3XEz) zCLPX~&Qn(kl-yhWX}G<(!pDIC=G7M7*7?q#9q-o~c=*+EIPg#EG=plTcfYW#J9H)n zrBVr9BFKBd|68olOc!%0)ur73@W_z{ihF_@VzjFyu!k;Bhs?AtR$tmD50xTj5As@% zij(0h8$@Z)qe!s77dHml-#mOB@Iy>(Ta9Jf`dZ>K9QZfwv@Uaq7d|{Fn%ahV{~Ee~}c>z9@y z85!6XJ~lLF`j_sD0~fEnPanZm^vpGs@69glcq1yg-e1bZ@IeN@gB{p4e}u{6!jGUm zlSi+q-%7Jf3PP-|6?xcwh8l`YTp#q&{TiGa2C*<<&2TnL;u4heHuw!tb8BCV;7B0k z?p;gjEF!^SVmISW3Yx96_sS@T=1oG7^Gc5I2%letl{@q#-lq`6wbjG!m3oceZa|cPF82OU+I+gzxoAF6(qo=TxWF z;;Y{}y?O*d>`HZd z^?W3y%Kp_$`s%%MyYJ!`z9LJ!9|Z%3X~O`jJ?2mFe|71D4&}kpFxXtm1u05rV2lS4 zIzyI;$6=&=fWawkwf|i4;ZR67bi@L{qZDU|$Z&M{lqC*$_&=A?6T#WXqhH}FyIm== zn`A0A2V-c5F>$RS5F~(>1mWX8--qya$q{|dUjp%H3<26!<|?fWze0Iy(g)vRS3224 zB1ZTveA^P^dww`wf~uC_Fc+TrKik-wK=YzHam<^!J~zXxU`8wucn80wz-#!|pDJ6Q zSdtiDA77XzE)bpj=d-@~^@Dy~EFTZ`RYb3~h-3r{Kl9k<*0APA8sJ0>2FhHgU5>@b zQt>Q!jC=hFuhuJ9`>QM0-LJ3LDyl(?eSdm4>(vA(t*vml1(dD* z*JI@mM2-&l{aUK3QnNPVdSfwRXYDh=83yXAFCyxzaMqYLwMUO9I5wrTco_8$+s6wQ zKv+WAY*C6etq7;f&se?&Ge?fMt!Ok=`dAnNs1g)j5{K9e0HxUAKRVzl6`LG!!jW0{ zqb=-1g|S$y`1~wljJ7Kp#(r>8Stl-kT7rr`g2pQpVqc~k+axp6sMHrqij?&<4#0Pr zR=|}=R*J{#DLFA;LRhE2SN&yobjroPs=adUUBI89AN(Mxy|4Osqu~LISSZmi zn8b(>g$6VPzQ0+TC@WHiODNU~c78{U4ed*PC9@7dWNs$_1ZL^bcOG&K!V#bSy9Oau z>A$R({Ou__92b9XiI%jUW=2;gXG`+OwJE!nv^CZ0@>;)3UbWiRD4MIdmzjo`W5BNI zV3_XaD}HD67#P(T{d5XV2U8F@%9q_5bErY`%j@ncb@_!L)kOR6C!eqSJXOT2_up$O z!xgR(tlsL@D)qm2eaiAPFvn)4mE5@)WmX)YU+x|zHIaP5v36lDf-YqY4}Z^^>Ll6( zy+)LvG-cYp_si1rdxTH4C zI7%5Zg9GpQiKC1WiIWNV*v{W?^F(;T^!c+=DV<@Lvg)f>`4+ocmi$NmRcR|$uGOp6 z{+6pO+c<7~rT9$6HNge%8!Rv`ft7oANcH+y`n43kV*Vez zbagmDUNFENPX4FGop|b2eo;{?b9Q588?=ENEN`9z`_Gdy<8h}Ij-l&`7+vSp-1e>F z0d>V}PE)T6bnCs_8%M^RT!$yvN;KQrRb=iu@6)e$Kkz0Y5K7hLV1n}rhIg)X9jHa^ z_+^?$()d@P+Vaow&PaYs@y_v!&A;m5rtx-0um0eug0bCGwo^&x%#HZ(Jq2Ozd&fv< zzR=yaZ`#N&&sTunUbSjZKgaY9Dp`-PfhWd;`F!ckG6fJdsbfZ(TcVMgKc?Po0t*IW z;E1l`%O+b44P5ZX8mwkoK5Yo}5d1uXW30O@QE1M;&!Y&ik4~qH^j`gY_3FUxWL&p` z2ou?bF8m2(@Ftj8jo*hA{6R*I#5nV5(7g}~<_5vH3~#PNjRGD8`NS1zaF=>-4aP{H z8yzjz#`^}A=)kszfmuO#H1!XEx$8k4P`Xhzp|*YL;1pHIe=Ns{X>Xn&KMz)n8U*Nx zUckM<4{H%5`u;*!+PI9cEZTrY;SRsiU+;f{oP-g1JUb^4&mYk2IyYkAN#K?(-=0zb zCxIPZ4e$-Z4<7h9`fzPNkQ)h>RBupGK|IsAUPofh#8ZpQOQ_-92)DOGx7u8tC=umdrb<2 z2Ml5AbfP_L%OgY(NVsTEH|y~69!NILK#WyJbxe4M-q1LC9U@a*dY1GPa^L(A^o>U! z1r(HuWon;q%M5WR5Ii_C)Zh4WmF4~XMXGOL!0$Y;A8`|5rC^oC%Luo6kp*U+Yy8a9 zGg(=1%@eaNEI)Eg*Xz}H&1=Ar7zAZ^cAs3p&4P=#qZD^$H*4$X6f-UtD_#r&1*+NB z2n-4XV@gaB!44M1)VYW_L&Q-a9|Pbg10L`W?)u+QwGZ13r*=L?^7s@7-$B?NKnA2@ zFa^289;V#H5`Z58a5JN-st@eWdi0>dvlqc%aBNYs;m;x9K&1%QVP~>WhJ~Cl3`4L+ z#@=vyU6c%NlPguZQqy1HfSLpmoN@>Zqd01vTwgW#caw+T;HokthEr3=ZqCXr-!I3I zzBSNz^1%P8I9iS^ukfubTp>}JaYJo``=zONpXL0CS_HRvdVQycNJn2mT1ha1W3Hn_ zQo;Q<%49IQ$o?FNb_=fGET8Ycfv0v2=AchtH-Ypx)BS^iGY44}4VlxR&CzJ*4HJ>psC|4nA;83& zA@(9j>(aE&5ZN#P<^Sj{gdP0;ff604f>1FuqeD>hR1gpLrlFyF@Ia6rzwAg7jS})G zT+aK49u0|F@3It8giiodUp@NEg;YO+2wVeEU}lI(76GH5MLy|{QNhANt73*pcim)( z*rMo3)m9KP#2?-7zV$u{PjQmM{Ki^08$EH7BTamtzPhDXt{dgR(&J)7__jQ6u8AH~ z=XRgDV=v|SaLg%4CC$gevv!T~6UOC|{9U$uhwf~(ybF?Q1~-VDF(Ve7yF!i0<+$+7*9gMhSYU_1&0ya`cv zEQo?-UV(7WgW^TlHAqi>tHr?lJ3ya}=s@cYHr90MUMoTGpeCK|bv5E8w%8W2nqKPT zdA(*wllOy3@VC2=BY^vau)v>u6ZvAF?Bpn+t+M_IBjRSPU)*3w8uEC$DLiYpJmu(N z;Xa@1yfrJmw2Ne*`v`6;UK!qk$eN~qoPr}({w#gDY**ZCVe-AITZ;P|%}qno&&`K2 zuE~m$eu=ul+s@2^R*=V%XGOBw`4~#~_M+Sv5IdIkGOXlNdcNpGR|i|m1}MeKoaHc* z(H|%8h$4qcuHlIy{UDL^o9M&)<2D<*j+7tT4@tYx5%9!AR`tr1VqfLXK*n1 zh4BIH-JG;tXfTo7H{R|DJOS<0+sv8m^aH_!OpxFyUR*wss{&ow@ zgThA+Z)%VuGOOZc`A+KiXs98(pN?LI=sZ~?jxu=vfHLp3I`yx%B5SQA!?->vaiC~E zk%_<2|4#Y&(DPwWL>OM>Y4%Q=D$AEX?nRQMs=8E>uP+nZyI%I0Veak$-{9)nU@UKq zB&LW~1*%JC`-ZDTN~L!TlK_a`pT9u^lMijVR1(@D&KM2Ghm8bo@Qj#0M+N>Gk=lC> zUiDyL!xta@q!6L(0u|))iW39U6Atizy$d8iz0;7ylK5uK%J+RKwim(heqh^{MMGE* z`FH-qr3Ew7fC>P(;DUQQ1M)}lbe%}oD3r<1fP&y{^zP|JNdOsxgHkciP*;3HCSH{+08=~337eSW ztcb5n$ZRTSUoF)TD$Y&@|KuRz#aJ7pUWvY2UI|>Y81;B_AiQy zmaRxL1$?PK_e8^EUgSi7?e?`*_nPqNz9)pUiAep`mQUZ}d*?&Cr(E6MSLOMVwePuR z$@cQG+*(m}W(TvW%2EhHQ`Fcq@U|LAjC*KEBV)he748cE3y?hQY-TW-qY8G)4T$cGmXOxcw9f8@FWq)Dg7iM`RARp~2;H+{;^WeKBoUu{ypWLz zSNSjdwOC6p>sPY_pBId^j8Ip+EZPK$1N8xVuMhX>%4Nc2v%;_%M`FVH)=Vn3J)ueF@E?Iv{ zY!v*2J-UDy5;2=RaS}%7Sxc75g_T7S-smQ9w}Dwuwg(_gHjZaPykA=KZiaKY@#5i2y5-ZkCdMjVuUi7D3{Q`3^DCnH<`XJyY6zTc-W&M@4FE25Z z+`TL;QXjya-P;_ZBbPkM(r_`{LkZscafzVs5JefOq3ki2ACX31Gz5Jkt%KsMH!4xI;FdRM zpw@G&{_ss^_G-RfjtO<1lb(26r95!voPHk?6^MRUtCKOWFv);)9FG?@D&%z?=>PGo z6%cP@b-v-_m{=VLk2B{Mv3wQo4?J!MV^hJ-76H(ZA8S_rDGVv__c2*xQOV#x!HoEE zJVkK$}3;=cI|gCxyL>_eXXwdn2d zSf8;A(pVz!ffzb^Zx&DHNi`5}25C)hqg!U1H7rj8y*R5*otZHped9(CHw@~m zq{f_fPQAMsQC!*-kd11cNs{kX-`=_op@Q^H**rVkD}BntcZr%bP|A{W&x2C(c<*ur zwXTs;Bpy5NtSp5MZGJCZP{PlFUJm?R*gN>#u@K{NYL+_8(;E-g6K_%7yUCi4 zaegXpBs%b87~T5SFQWSGYG3_($*j7`1h9I+2Qemsc}L#j2<)yR5y_0?`~L~t&TA$N zO83?X`Lkgs*H50leP-DScV6AlXtMn2Y;q65|^?|3ccmTl)3NM2P(A{(raKPOT@1lRUKkuU@+2FVPyV z?~C>Pf+f$F<&PwplLUT{Eoxif000q1L7FcM$^~)=@6eX+pYriv3H%}2vgW$$*Q=%P zwP}4{ztK`JuZ!l1s>Lnx_zG}CliUmtB^`ii)$7%|C-v%sKGmx3 z)royvseP}*gLo^`GMGS7ut)#Fpy8oTIiA?Vc%tu7**N6>99Wy4%^{>5+B}EepfUk4 z-z<1uqCwjKKJoPuQ4HLo!PuS*#L;HjOQ}x-Ac44_6k3Z2LIB`Y00=2<#_yy1fRt6w z&-hm`n}oUrVWcJFk*45m1vSQ6lly-$#sflpG2hnb>ZU);(jabV_ z-JhoDbvIfdMUC@B7}%dDz+?KBBl@WHOB3{+vbu?E+ayEs-D+L!x37c2V`5(iewG0A zmh4G8m&3qhmHbikPl1j1Uhy05Ve}bXmiHuaM%bY-{oG%yK zYoAV+jGuuCA^&%MEwRf>)!lBX8uUgT`>Xv}lIFocf(f~aSFXh%=;Ftg4+(D$4PICN zd{0?9^h3SEupj3&`p*7)J++m@^l~LDbY@)6`2X}9uWSC`b6{taP030cQ*EmYPC^uGAkJ&;0i3|JhmFoO&G@TfkLP$Z!8&hC^E)a#TcVt@v!hOWsFh0M?v+N zbVDCrs&;FWnYvDVov2Xz1ci&H2>@lVF9!Dwur3=o2;nrsXK1xYogp1AQf37qznbVj z(=A;?MkFxe*+YR-Nw$Am;!q~sviW~}@Jst14Ba@+gm!6>-@xbKh7TJ9DK zlC@Q;`SkhtgUQGY)z5#3 zI(`Z%;A5&yR*X+8zU$Fi@4Yg9#s02#u6z2csB-dUy1A~GxMRC&Fr-BhXEc}?!T-zj z^@K@inatSAkV{Tu?l7*(kXUwsqfNB2#)o`9F8V&{STL60G{60VgLV{sm7YW1KJr8$ zp<~D=)DGGzi!n9_GD%mqkXa)2GKacCHMAv!A+s&EJC+-ukfgu^G5!4(WUCE&o8lnv zFTVNtYZbp<@2mMQzWQwy7y2)Lr%Ha%EGBCoA|gPE2IJ4T5DMW=VaC?Qufr12yLgj( z_TVl*9wTEF_$<$xpEq~w@K0MqM@tuV9ckr`37Xd&R^tcWua6ff7?tiwR$*$9!BB3bgG zuBF|-C!)Ce)pLHaRjaG+_E%5@L=!4s0z6S_t4YKU;6V~NW!CR?<<1Z0HQ+fjF1#Kr zVAqHNz@X)rIZQ4lg4n z!HufX@b?4|C$HrGbp4L62m2S`wF|5yU`6s9J{F6=A4dqqfdlx__tTQWgxmQwRgj~8 zot5MvT`Xr8=m-_#*JU7(%=mSC8bZ)iJSJJ0!Zw2(pzsx=1wrK#kMOZv`Ek3n+Q8xW zjJhb2e?X4!u=%<}r8$566_Pa2U^RwOb^0%rQVoF&TD1xD5J#;#{?y4Aa0H(6clW^* z_2^M!-I5D(&HPV<4~KGso=eB{2p;G8v#pzxjQP1&p2N$n*?km^e!Y9FRd@DJf5Der zNYJ9?;Q)Y=JKq)W9)PgCBqPD%8xQ~nu;2hKf&c@D02~K^76xGWfdHPm$7FzFY)*47WM^W zCS_=DTdo`!4uOH$A3|u4TcS7!CxFEQ_;mamZb5Jep@7)?cms9#c_qp6c#!qbc%0)C zq(Gkwfl53xD5vxkD@om^ZqwcWFYn`GP(bSl9tTdnA3+b0grAJ{b{O}VH~_toAcL2A z3qk_rX_3aP736q!T0oLD5EA(yTg3O5_P~HG{|)zUrCv94|JT0{cYfwx4$HvpCJ{;I zqOxVIJCupnehRKx=PoC)(b6IP7a4frvN(N)W-oxsPcP0~eV@F%MAb+srz$VfW?pHR zC&^p*eoko*(sG-u3L&Q|$G3TiHTPE~`Jxx24l->hC7_mlfC zjq`jh@Q1;ejK5vuNvRuPzUv8l%VTL&l>$pGgwzQ(I2piuUWO0sSxT0RJ)lRDN%0vH z$lb@X_q`}UE3rB>!*xtL&_Gxiln_DX++I#vM#_xg433=> zQ*|lvvSn15G8m=D*?b>_10YIb^r6Mlb%SI68_^UmXDh4ggy!2}Bf`(53&qpFKUtDJ zKlcSf5l;jhzm$;8HXTOd2Krse)XsU~Vx!tFXl_`tLp%+-cNa`2Y#0CK{|N`SN334E zWee5D+m4EFEHg#_VPf=Rrgi!|g_E!;E&ovE@x1W;A?W_xmF+Gqt9jT|r6T$B*GSa* zoX9Xr3OH>OpgzXYFwUSXKWIG>I$X?eA&IGWKJ(@1$-@_AA_(NDEW*~V@r9C%At^c3$_tK-bpiU>$9cl>;s+F?(*G47p@KqGq)q#NRHz=^cJi&5<@L*FG8Tv1b zIS#?ERJVqqwS7(A`Z@p73vt`NIL&P+)IOH0#LwsHU;fxs!9*22;hVizi3cQdMkxHh z?bveT0~p7gLA!U<{6c5{-kkW?Z5954w`I-h|9V5t)c9&jMNFiW zXc!XVfA+(~!l`vZqf%H*qj*1IT%d}y?}03nryPRE^IKVQwfC+wX}Xfb*kN)k@O>iT z>g4x#RAYl6(Lt41z{5zKPm|?;59;lgFJgD#{f3ZpR^q%D!6tflug?&xtb zSH+CQ_SZ1IEXM{sT3FaYw7yz~Z0y^xkE*ChnRW#yw zbu#~0V_^=O{(;I|gE?AYnpL}Ck~Y@%H;305j)IEOAoaiic|eB06UmtkQ4C%5VaH%b z)%f?SngKJjZA;w#ogapAgIOPyG;?<(M#ga9&M(uetS+T5YfVxrmpzl7L! zWVbi(hc#wHbB+}B|F6JNUN3bc8R=Ld|G|Hk>Ax9)is}Iv%SRtI0Sn!IZk~n$%1k@u z`E07g)Q_hC22(+Jq;YzurB!8UTONXG5Zt6?#?KUsLs1$eg7bH;Y%xe;iBB^N)E@9h zq~<`o_82m;cb)o-9T;)A)>E}}Aq{24zR@1ON&WbfW8QoCzV>%V&h@jeQqO13U-t1) z(bDk@P!Q1YR}%_M|AZuowl@L-y}`g`u7P9VvA<{|XaxOv_#I=kaDzU}%fO`mzi~cq zHyW;W_28aEWu~y|Af{Wlze+_+W!Rw(j_uvkE$?&tZcsrufVmN&Y1`oS_9yS^+R@Pj z+1^i2@kH{mouHB9b_*=BewbR*V1p1512kiQIR`VQ@r*FU`$&c*Q2zUgf?Azd;43$$ zFQ$mme=H7+j5e{I5F7!+uyI^v}`)ihZsg+zt7al8HWrJ zTct;Y^;3~f_gubF5+{WUxff)ks~QV5He;XbtjAkMHL(bT3q7%#y7hOdM6mV;F~srO ztfz?uWWh$#hk#UAThxgpBUD=--c4@rV_5`)2)i z->+9f?0v~qpg)8=Y9YrO53<*>4pZU6?l+ke`I9RD1YE}2-S{Q4y%XO#`3P!zdM4-n z8iq0we1@6vDaJunD?R;-jNRSu6Qj4|CKlb;Cp(deS0g=tckk^7iIP`Kd(CY1AD_qn zf`Z+I@ZMSN`i6)r;`YNofLi8ucIuQ0c+?`fu=+E_g&dxlif%eQOG)~kDWt}8(`oQ) zOZFnSehIbM7#562vbMYNE;$1ph)F45--NfZ_4qKlbRV$)}f3{e~b=gG> zEncHsoo!3Reyi+cy?UsppA60w9`CXQ##L2UUNWjo^@4EuVS=cWNM**Vp{;WBBr(lIBw6+Eui4zA{wnl#Jt8ghQ1RS+{JtDtC+od?PkP>tNWYk24xzl8v`ssp zS>r^jq>0*)ZdY2om;t@gXlm#2qCTAYvpz}aBbsS9l;N)(g2?2hAM87tOqX+c6b)C} zQ*YmP;*}hR?&B=>8fS(j#DAX@x|jHJ6U&@Vja!01hF|0<4nbtgz~v9vQ0Iyiz7nWp zluvi+KIOZah^w}re=zJv{JQKmX+3!6M}R3zzja1FyO*Riy39@@e5g6FRiF z>VMLE?(gv^U3l;6_?~0gcu5~FYE>6jyhB3eN#K?z1~-#4oh7~*LS9?_ z6tt47OMk3gt!dU#OI+0Q%|pAl$FQR;NKDNiK3@O;4pl*#FN^90chVPMtWsZU_fpk# zu}OD-t=#Ize_gA8|Mj}253P2u+L1b|*1k9OdKs@*u3xQwwffggtXHjmwc5Sezjw}53P2xuUEUSC2QsVO@6F?ulm<(TX3*QIo#|;{x#RwU~pX5n`0*j$C8(5 z-~H|=P%gdr(O?NpzQNX8TZStXX2At0ak{%{>PE}edKm+>4YOV%XfuH*E?*u{!2v*k z;e*D*uR>;T_+i9SRKRpl(iEHaEm})A%k_eYG!h@-+2|wu?%v;U54COp+)n3NPpfCc zh~eo)p)P5kiTt>hQ1Hk^W7Nb}Ou=K7X9L@NbidOxMbC9hb97x%B%l`BB+Sl3nANO@${s zwks8i+*T`S9rA=&#dd}puTE=vX|=?HM=1qLX@xOm}XEMsopG&Rdt9XKl zV5X2CdD%G1FXkxAVuKW7xU(mi36Ot?4G%EWhwGyQdp&=;dT0Ag%}g5YUHv%KY&Zi> z)MI z{|NFEtf4=6fk86`hGm3jFW%^!kXK#(0wJvhmF=u{5D;q>@2thB8Gq0#){uQL*MRMy zYw8u<^6NzSW4~{l>B7Y+`|2 zmyKTidV8;0?&HPwjaSk8RplZCIse-T%*Bt5hUH^P*TjXnp_;T;(_Q+p-BW(873i^k zsl(u)oV^FALdLYyhKYw7)~S}3Ur&xKGo+8H5lAo@?$@YV7(h1yZW=y4jc&bG=)ayA z5r}XaM#~(Y18>4I5Ve1r(nxxniQ*a&ppuEz~aEJ*F|DrCR)OM5A8616g)KYx!b_}`J>t%m>nj(#>yPhxw@bNQ~7HmouS<{z^%Wgq|!WXA@ z4iY$S{-n}Mkp8_w5_U1B%05M3F7D|KmkG&Ge;eR7k_8@GnT&0qVJclVN_%X>w!CWF zoZ7%aA@#<7p^dzfFVl)$AP5bv%XQG993 zg~0=d1BJ!{N+AS!!$BK5_&;o%A=R4BbAcic9>Z3{Jf+P#OK!d zRH2EPmAaZi0N;BDd|5dX$N7C%aP76V_f~R8POYO7TkMc&M_SjGKVG5YP<-@vOwNgv z#7U`@h!m!p%>O0#R7^pC@bG98iRH(s^2_k7FdAWK^JT#fZq|RS3L%NgM{eh0(B=6H#4LOj6E!qR614^DEo<;cSs8bJ2`>Cu ze_sT%RX~U4gD!Eb+P5o*=q$WqD`$qLi~;<={RiMo`vd)FK;b>^oy*eq zkIC_|YUEBv(6+S*ba{G1XO5TPpJ;)VBTUwdteG-h_$ivk2y8cLF2DPR3;w|Xx3Tyn z7W!#HZah`)Pp%uOBc;p!5!Ury@9;ym@mg=)?m>^nWRw}g0LH&l!}umF5Pc(qwB711 zrp~w&zYP%?COlweSkU^<{5Dc}MVg#r_U1_c1d*XJP4MfV@V`v@#YQ?OC=!q`6bTH9 zKj52toBDtJhP~zg;SkZ696`bKM1mu)m%@bnY5meIyS?6CI&Ay?rM`f4>dSGA|M1|H z&IlSM;UP-feTG%%Np zYzRO65S8DH@chPi3`w>UqQ@_%OR+N^!3`Dg!nC!!SzY(&%TlX*oHI7{N^P`#y64xd^J`1~y`@dX24c_%uQ$zkpV336y+UzeDXnhK=3gxH5HU$_FKwQ|A*!%kx z=?EnVF#-_>#3!EFq9p4nkTN zBJOE?zEpOIp-MSikdL<(&3ZQ*j}i}M-SO_))8F4TWg|vm`yb_h#@Q#(KmByVU)qQ` zp^)RjGj7{e;)VvjHH-OqvVLsk_NmH;_yN!D#GB@8D*y8rmYXTY%%Vj7%l_1Xh$E?m z5)9|IGa7e&2ZY)T`N#;xy!aA5$;rJDyI8t-j|5X^b$I#x?nLG$1tNfFQGX8AplCoA zYJ{<{cn*X_3aU6{NX%b7SQGvWwP)0@WA&FgEi<#L!4_l-4-R#VH~1@|l@VB!(?MO@ z>+wW05z1>2f9DqeS-M{vAqEUQ%@xs%^~~0PvB8o`X%xeyR*5~9bK?XakE4$_b{xh6 z2#IYTVNXLCUxuNo-`lLqhcB&o(nF`XiTvhtaQs&_oaikY(`2gfA~?m6-OqRB7ZkR4 zs}0@ynz;93+$4X~`rWXmeoMmo7qhzv^{}mm%-OMEAumb5PBW0dU~Bz2yz#C(8c}gJ z3p4z@T)aWRZ^1a6acVonwu`AzmP%#(d(qZ$5rbr44aU?H7{*e``BD6wcTUjeCFf}w zdTab+9KLk!9*0SQ{ckG)G=>SqC*^H@pO2)z#cT^!&j0vDct@{w!+FSrPep!(o|$!! zQJCqk98f~|8scimlMX7@W*BjY)8VdKQ~wV_tLko6J^vA%``=!tx96#mK=ueXDF@A& zA+zC_mi+3wh$G61?|DBxT)VxkJV2e^&ih?Oh?_hbzZna;t5e37A-~FF%J-B1Qvo0Q z$RPhQgLbS!(+mG7R+%#tyz2sr)^A1Qiy`@f3jL`PjxTpVzeqt09@P%SwgFnh^M=E( z#R~NjEO$I9Z3H-xl{(q^DPo5Go4f|*K5CbC@%^ zd^JvAU%4`e)IWCZw{#IduNypn!3=j4Ci{zbg3DB?$ddPYdWEk|`Eh(}P6is8XUXFe z_+KhmccR8E=VOC&y>FN1{GkxtS1YiLVzJ#zEpz7cu2ynT`it_Ml^xs5G_x2F(9M>LpDz3fnU@uy^E@p7wg!#6Y0294yK4Cmn>z9bDwZ<{TduFL!X=*;{QWaYm%=#DDWuR?05%FWmQ=w7`U$zuOSC@aGvmX4&-?`ZqpIE01Bd@Yv;OTg5f zNyi{R5qH}gSn?{nn=HR<~RjH z6P_xbK}^vR;U;_lr2>=h22@Zp9wjhw+0^Gj)My8%+XHuo8oP5J8|X;Y+8v*b0@%8b zLi|(DSTR_gIQ(cJBaGn}iR_|ECkWsHAesG|7%Wu6aw*PTUiO~a0Z`6za%SZQmo3qC zb!)vXckG&Ad8BUg-udM)gtkPWS|RR zi7SF}1UXPEn9u4b_#?0AZ>!?hM+20c_^v;qGE4_6pB)4WJJTkVbSXYcNg@*4vv5WN z3x+~i512c~!U*sb5+g`6k)b}BlqlFj=g4GL@R%%`DN$jt@_vjBKYAXvgpWt49q$eY zg|-8DX?D^Ul}_EXrCXINE8^3xvpEk;$Ow#4G!2(H0UnwCq8BXOi89_vGj*>z2N}xL z(_I_k!);USA0tW9DFWKJV^e&mldkBGvF+ROw7FkG*!j(ngLVN+*H`MAk4t$z|H*tm z%4zJrE-_v9f^{^b29)K%P8Wt3vtmGt*o)n0I`alb2g7h*9K!Do0c7gw>#o)*%Yzk`|PguTxU=KD!YR7=}m{904fQkR&7$ zg@l4&s8DPa3k3o~FrdgNMhXRlCsKL$$+=gUscCrD`t+&0mF-DWf#7#>}*{c!6a6_NuexHgqoQrC=_@Iw!vV*TFZgv%$~BS3qf?Lc0QjT5;=O*Y?Oc5TLD9 zsbqb>l8^ukP)Ln30kt$f2~7x_00P`nQUNsYze+S(%G_j5m#oMm=q_8Lpx^-{6p$(s z5(I+5L9v`H6cGgkK|(N4Dijk0!X|UAzCPR4XC1;yu#tA~2P1IH{^g&B;qi_m z%_Ngm4yXNlbj?u7%i4NvlqLRCQRgn%LHKi?*Ly~rMPdE!7xybV?}IQvAN#h+3k>zY z@ZENF^@LJk^WeHKDScDU@eZy{Yt)pm)a+w|{MRd!{pyeSyj}9-T~lAThj(rolvc}& z@ocj4Pl~Q9@Y-mrBpt=A1qf*Z9uM!f81IIWu)v0y#NaV2=gGLjRJ0OIZeCUD31iQ@>ij*Q-FWyM zvqSxegA6`V>(}W0?w*}D>!Saxet0x-U)pW{2`$^-|9A@22jN+Ljb+CEXx)EaqbEW; z%15=vyWi(FM3X7LWoxccjdXirVr^sl`*|6Vgs~XaC%n-jh8`vV(}-(ZNK=hjZKti# z#KQL&?x9QjB$@b@q17QpDn)5CR5Xy4B3(R6SfmPQxHthM6qFVNNF>DunOSH+(z6yno=WN_*;*8foSpWm3p>w5EAX6c+qWpD#BOZKB`BZN|- z5Q1Xj(28180x8g*kT?JU5D`I|FboO>cX>ZQ|3drq>>=y@vvGYH%gRG@QF0DnUH-0Bt9RYs0lYV$1UbQQB@75w5Fa%v@&Tosuvd>ANYk)t zHv(A~Ag_dDMlxtBqfR_%6)!el0tlG{hHMaVTa`wsOy^lS=6g8zR9zZ@OqW`bv=cHl z^R%ZzIfAdqaFQi(Q0G@xj-?_%r|#L=FHgPfQ#E)Eod(fQB2E$ePVTA}NzM!fa$u zK^-PZFm3ymO>Xy*J%W91Vi2I<%Fse|P=?rDAZg`+oA%hvwaf+$EDrRSnC0Del$09` zLw^Aa@dbGF*E@W0d&_B%tb|BBG@rt~{uzFVx@Pst7C6(5e0xB)Gv1p!`!QWbg8Q+F ztMfuO5RhaDDni4+jUcT)9%xA4qI+qxfqDzdwYITvs0cth8=L@PiBME$%X|P~YaOwP z@_E>v9o>?1&z1G8Q+jAsDSajF)&?h*>$)m2oO%;+qr z44{<19WyMiTVCKsPD}lJ!x=q#X>m(e?z-(;s$3B2tiS5xL_sdy<}nH(M?Dl?=oJ2i zbWN^p)7?C~vvOY~{H=anr!qxC7}Qx071%@yxmU+-mmVC-TSUzqf29`CnX^xkH)feTFL#tg-c*Z zAij~|+LpA5bR=Q)^V;rQKO*e+uSftex7I`&vp=&!?7z>w^nQ^$YU$gLGAoHJI80|P z7O&G2**^Dm2ymO}Ti6+(`<4N4o!n|~(s^X~K%hHLS%UQUYz40unIDN>x->9^Uhb@YiJ!nDXK)=deY03TH zL+XaQHX%le@WjX9grqUgRQ1S4U_Qu1wZAMCY$+J@3qWat-35+sK2J|A#`szJlNP?L z(+4u4G{2)%c$oe9D>uauE^_=sv6uYALR_4&t?DAr!FyfS}LC}(@GcYeJ%u2q3X9}j|q zs?t?SD7+hs4hmcYn9P+j;DxVl2=^aPgtsZINB?(%0^^jsS5OWu%{BHIVX_bv2e3g` z5J?j^1#oG-!w#T;HV?jm2q{ol(qP}gO|1>d%7=5Kr z!@8A99?k#%$INaRciI;`uR)cGSpA~K|Cd}!Gy1E$S$3{X>)Yc)L4a6SdGaf}adCKP zEFg~d?)~8cgJI0h|Bl2V3s_Va10aaetvI_+a1E>H?>|%&gouE)EivBRPci&wyTOo8 z1u*~sLjo8AxroAD27B|HM1+WA2oLVnFY#4DD3H=kl2+CvCOfuCvEBq%< zWJ&U|edn)^lHRp1W6JMkd(9{Q2?>ejS$@9}F^I;{_5QEP?_Y?sV30R7S;O1m>29bq zdIoW(Fwz%GlG0yjgipUB3eFZ2T}rska}G4MyoST8c7y+8W3~wd(KF(_h#|3N_%4J{ zYGN;i!mh4vZTenK_-MlHl53De;~h}GB_KO$KA>VVr6h#-^#fRw5n%LdeB%2E^XO$e~_|FJbA z5jlzl89gYg5jh%3m@>{fv+l+0G~xqAJ63X@4;OnMu(c1?9|A=pQ37s{ZG&( zDaL3ZYRFednrX`~{-Mf4#BcX1W~blbE8pF(f=V&VSoHEOqI~%BM9mG zNQO-B^ZVm&tl6$Vp1w!O_@7?wUS2PFm`|-`Sib~)SJmNIVHM>_!bFPj`LoWxzIV`L zo_-u8hA0yw+m3=tN!9ze9nlBw@ur$Pha5NCm;d4>!91BSU3tp`FG7~hN^1(iXFh<> zbKML(?FD;Lw@VdYx(!EWYM1{*%?$%SWd)KN9gHfic<5kTDsr_H^ekFyXV_As8jh;y zq{44$euG*j(YY;hBK*JKih@^#j9ybKXu&WbJ@1U(JB!yorq0m>Ozv^tSEOfG*bem`sqmWUkhw=0ID5@4OfZkj<*0Hef6!Vz z9HpO+5;zY3sM0^(To%_V-Cm{c{1Df7yAyZKPuKEL5vBYR-yhD$ejAmG)T1%SMFanb z2*7Zif}_-AXZQbcLT+RwDs5nkIS3Cq5NH%?M_J{?&he`n16 z9bW!{JP~IlBu`HqG~5Hf*f6T|l8Ge|W8r`vGb!Fug7ds+Hh;#F<+ya?vx?SR2;j_}4t3k6k?=G3+PzHx^XsSPL&9ycz; z#BuXCQ>D1&_J)8e;);U^WWd?*r(FyL571FS^Z>HF00jpcj0Cg97s+9Sz}|yb2%Q;( z9t5$pu4&^?*X8wr+)5xorwwGk#qCo#EM54T80QQ5G%S7|Lywq!Q#>hf?yzhMr!Ki|O~hpM59h9M;sGp8^7 zm~6305YWxZU;B5v%MR_=m%8<-uDph|DIbEkacXytx#hRx<0M~~u7r2%-#A}AU9^_a z7^jy=KO9K0U&7S4+@VAxZM1QW`@3hC>-~KMuX+t@=r3(tg!tt;D&C_1eUSn&FQpgQ zd!A^0_heiNef+vm97Vrvv)tB&rU(pGjwO2w5dQ`_;2!XLnH3M)iFj^14lQww59?B) zv#OIzGc-H;(X4yG+$6iXXKffECSjbPWIDKM??^qS=&VweCk@Vb9-k083R|VTu8Us) zb~1*^xF8GN=Nl$f00`eWeUTvekAW}awKL>Kh&0aCEN?kj)`)oEq;BZz+a3K86rxAw z8d!ik5Yy6V19T3zvIt_^IN}k4_u&2621omcbaLIX6lIq~bk<9vDdyDHe*9R0a=$~IRIeoNHM$1b{Z1f) z%XCfe=gROj2CIvS_CU)m_2GK~pYpJmv+xf6w@rpVy4u-Rwen+ zfMd#MFWE|3KAoF_jM-ru5IeZ^7O)T>yS}C_9l!W}#?>EF_$-H0M!YQWUgg!qB4`zGs@7${Vzb(6tv&%&v3*!JM$zR`yjK11W?7-c9e}!n~nw2+kolOC(W%kRxYT&XH zHCefgb@#(p7n+~%JQYA|%MS`TdG9S5-xq|=5#8?Y?(X%4Ac#kaVU9h+dh9WzuOO~n zOE$Gu8G`b^GMawwLfbKyZ`GC{h2rr#acuri)Fhb%MipI{@48Cabne=_%jPvoLWK)= z5%Nt-X#PiHjYZ;46d8U)OF9S{kd65VhW#XK9azwfq6v`SyZslWFaNH)z9#IEzkhv@ zkG{cfs}+|vH28BiAffljgw>;OS|UKFirx2aUFpp|h$xruG#=#pPR;o~`jKm_I417$ zxh49;LIYB2L|Ts$>}$(c%j^0Gc3&-b1U|=eS?wrt!EBl1p76|`?i9O+IcZRL(wRZj zP0O~CnBguS(ctZkU6BF|m$n)>zn>qL#anRJUE5l0;rp`g?@Xi{h-h<>&*iquDm&IL zy(cB)^8KsSw_&2SO0n--U+4CT*JzzzR=Iq;L=cET_j}nj@3sj-Sua2NjZPkd7`UA* z`&yD0v=tLdftdmdhga8pXto~rY(owJ02X~gnlOwi1$F35S51gth_6Ma}y6 zf;b@aeh!wTFBimafvu*97{WZ7D5wNyShtlg$`9L*DBc`=NXFsb^4upS+$+F8f{eH6 z_NXp<-yQ>i>(l4rVU{-`EHZ_NL2!}&o3}yPyF?%`>>Gzn4g5vH=|lawwvD+Zdhhcx z6H-r03p{OxRHDsyC#YKDkyOZ#6;X(m$KsHgb z_p_jm4!~l@BjFKjRx33Zb25)5J}s3=rZQ}*qI{&>sFwPnMiL}#UCKNGT%6;APTxy* z$4nXg^N|M}3vZzEBe=$i3y~Mbfz@V>QZ9*;_F%cE3qb~I2L`MNS*?#z8jd2ppaaF9 zp((vDShM2CYz|5mw?>iXyIC8OsfyRU1{~^+^xMlfg^MuO{+QksDyamsW z)=aEN20Hk&K|R!{S{ur&xJ%i@h$3N-ArXa+yaDwz1KRR+Plz?v0@|71f0q$s^?t#V z8eR+mR0jYWn;-@)phTVyZ6r3tgwQ*{S5jbft`5B06KL?7 zTlgre-=aTF5q;IJUF7rs@4e)yhFWF}B z9DNI5KhAQbj`lp|O1Tg`V*d(2$fadX?dzFSzqpxbFbyyF!Y&cb9$=PW+|($^fDAP} zBNB=R2mg=Vr{M2Z=A2Poby9%wU08No04T4;a|!kD4{9OSd;}JTEG}&SP(R){V8o+X z^h*4EdO_c!D4O+fmnn)E@s-NohdyD(&4qCv-fE5T zHX&69QLT?*0096VBgTB_J*U9`6;U|AHJq{FhHG?C42_|w%4ioGpEa0_W{r-Q)osUK zfZcCw<&<>Qzg6gaQ5^ar`hvJX<4mCNQCQF&ek~f0OO6=Sg%wSPU-CN)6L7%?OE7g~ zNNs-*)I2owo~tb1jD&Kx^}z zaco1y$OzuK>fe07WPOGudjsG>rt#xUttvfUCl3um7n;CV(9@m1XP~SwH76j|cK`US zPBlIMv9lY0tpi&Qd)@ajY;1(VMub*xbj*zV;obEz$pUKsKz9|@wS2edCuTf4+DJVh zoE9pPWosdOYUZ$Iif;;!K1Xf%#w7#eRE_ARqpYJz5&PZV{j41gsFXI6V&c|Kn#DC@UUqK(Q;T8t674 z5}U_9yw5&9Y|sz{^)&e}G`Vme?Q-+q-+0;Zou(vJ&H>krr{LclL4P`<$12MD<^2wvB-gz|ytkTqio zV9rsE#zZwf748{TYNj-@?*^ab_b%vb3}6dgB^oy(#N$qzRy*WUxI^lS(D2s0VQbGK z3`jD9eTAH--cgH@+)9ip@IvmV`!A~oa^XnJZ=@TG2Np5F z;}#qK^suQInqg0M%GX%iaCzFeC`B`|le12#x^xSZ*a5At_L@XWCg$* zG}{AgZFperEeyv#NH7=sz4_s#j4itrr4~41VylL3F72GHjBYSC0bfS{^5TmbkB7-| zdJY+)2-VM1;4aS)fuHDR<2HGE7Kn{Mjl!et`j7v^u-r9zk4&UPYrfcTXZ{&QPeDzW z!qWO|ZsYie-4u!(JhMOl5LbHS$CvMV3z9o3f!<8Y^cML0UmZ=c#*k$ZH_zp(c))s? z*YiP}23CRg*Ld^IhPr3o{6Y%C1}^c-j7QjCxP=2;D(%uD-*xDheEwg*!?~zO>Ke;z zuss z_35F{%P_g&_&8tMTZCbKk_Uh=pD6ch`P(_}&p8fI})w z*cce73{avY0|dW-G&$6Nf9K804zi%6q3VfG)-^sKU~PncHWA=ImIxz~5}VjpfMZ%v zeQWaEtb9Ul3=UhfMk7s|GZ4S&I4~*mC2CK`mJxymg&BvC2vM5{bb7tzlSC?%h05Nl}CFv=8DXY&S1-s@6B4Z#kjR+g;vIsD z-}-`U9_(?PyQj;sM9E)%2mhh#hQOOpN!hz@tUOB1@#ophTR`ZDad06Qf}&MSt5J9! z3S#U+M!r`I_YV~~^)#tT5;7tv6gkKzg%lzQ|FuT?s663bijG4=IBs7-9{VXnbNCP4 z@>}b-|JzJxeSD=3kO<4oZk|PWQyRT;7h|QK2L!j*1iWh47z zs_xe>?G3FmvT@&^ zL@P0TPh$8UhL}%KNAn&{SlVOck5Qs-!)oWo_Szj$8UEv1;V_apG_Wi=r(AoT+60}` z`b+K0oWn_aBJB^JI3pd)m~vdVRT()bB*8Q^X4cO}C$8d2I(4}UHmi5%Lx#gtHYEC9 zf={VEoL5^8KawwB--8Fg*mu$Ku~tIap7U4o8>Qih@KDj5qr}46aw=!kljr|l;r~^F z7h4RJA0WE%%8ImzcxXSA5`bIRTlvXh#)f7vvd4zQm*7mB2E*t^vU{*ax`Nu2$6A!fd!@_c5m${Y zcS!QV7(JE4W)c$V*5bDtd;gemw)a|zwo*6fvjqb1;CNJ zh&^B`aM(l%>z^GY|4T*OSaMhYf(yr$V8S#S>Mj7y8XSqf58?54Ht6~M2fy`oIn=lO zpLg^K3}e{9lfbXH3Y}K@3LU4%{GBe|m+emd?~cP>`0ccA=3esuf;kjNp%r%IMH{vxgj_lc*sh5d zjqHiq?RQ{Ahp2XUFq>cG`%c=S#dq@Nd~d3H3*bMpai){_Hv0W`{LD=GKYmOS`dPAA z2yZigAZL*Pb*XH8Byy!Yi>%W9i{OBO&d@?^y-moIk>e+kkXXfb2*xF`x*xFhq5{2d z-R|Kd6UM2pk%?@KZF$Gh(A;dmJ>s15`UC_wb2s}mkb(O7|I8_d60GV78c`GP$?oik zxY^Ay;<*@|xc;8%QK#V(TnF=I7{U?-OhWblpge_CmayQ2T4r4M5B-pAS)byH%bku4 zJD+gie6Lyf2hDDYtj6z(+8&>V;rF>6he47DBhE%#ko6l!q5S9r;@xXtSw&0ft8LGM zA)w~&#aqzLs9zj4DwfC^R>jr(AT^;iRC1e-Q~qZ&u`iF(Ey(oA9`gECMKF4^JRx^R zzHbf;u`}y`!67unt)qsPZU0+Rjk^3LGr>VC|9NK)=X9(0k+!UhWl5@QOuK8EeQ79v zR0Z6c*mL^}&gNYw%;vkvRT}Z5;B*QUz^l|*$4FMeiZ#?dI?By;Yc~p;ySe;}$g0j} ze43vprdz46vy-l;MV_F8y+G?mf5ssd0 z+gGZS?EAbBU>G1dlm}JFK1&~L(7!m-fl*?$hOtm=F=~=w7tV@Z|3@7*OY+)y!c0wc(GJ4vp)7u<8^oj%;v*J*qviSMCC5g@ zzB@}=+^Y>u{*DqXUIwv~rE{y@S#LklnJizwT+qbD%-c)o7pqtgOh`+bD^ z4gNWCxvBcmF_kMTi7HI*^;S!KLZiMFg@z~c0!+X+;vf;o$dF0vi~~?2?+)y zvTn_%J}!MJpRY0&S$JZ9z21AL15j{XZh@zyV^@K|8FlLQEmR20X8B!{9%}c!|EZT0 zAfY_+G0{Kq&VT$j^oL>#YQ>C*9e?OM1Z@|a_VQ*!gUL3(1sq%su#ps=72X&r5KnX?e3*F=Ou?ri2im4|CqE|g4yAtjPO2Mb=cCV-cT zb!MG~snP{RNiD6S*)M!r?+#u%s@3J$PmBf~FrA0n$@kQ@6+HKE9nZn}QeU&UK~91d z7GEtSwy+g@pRrTYoW%qg$Sqmtb}K?+5qXH({iAKt*iglMt{zFykO)l{ON^4Ai#tEYcGlPCvxuoaHqfU$kEbqTV~a~ zUdk}Dvax+stR`r^ZdqxKG3M#rmHV@w z50d|03_G5O!TDal9+A51@KJ_b%a)2o{|st8Rr{~-Xd$!_gqY>sco zGJKRx_`T9*^V4Q{cGFRw^5fVr6!Kr{U7(U`UEVNhhk}W8n)Zjg8o;0|utD2RX$>{p zF&Z|u*gx3(yiLFSn)F(~MPP44dA({#SJ1WZttW;dTM2Jw2Ya7W?SIz$GwQl0--kqu zz4lJ|n(bZpCKY!0000TFL7FiPN(FzRId-m_*QLwm{_#&BQ91a!Q=8|?s5;#O5j2;Hc5 zD=ahlu$S0nbR>OyJk#&{e+P=rNK#HYhFHp}gq#wRvpH@d6orT}Y$fM&PAiI>62pkS z9cGq?jpJ}?nL5c{M_I5&wY0?@8W%IBbLVtFW=Wi zZZ<3znYc`yJl}l(wVR-H6MW3%m$ZkRKIUVyS`<#>R^CDrM|SzF)9vbKrEy@bMHymZ z8rBKkA}H(Q(N*K9#Kc(4%k1lHX=GR1sS7K%KlEXw2#m^eQCD>SNo^>k92l3F|qB z`v7C@NziY1&^Y~;Z)5Lv8Z?#T{Rj5$T8h#kS zy`t#(5tu0&5bp;Ww1%V(+?S9Gpa$FU4XJX=bzW|~NVwNo$7~`0Z6Qx6N3S|l`d~