From cbef5bae57f445f584216f93ac01241fe732b490 Mon Sep 17 00:00:00 2001 From: TheCharlatan Date: Sat, 25 Aug 2018 10:26:50 +0200 Subject: [PATCH 001/359] Disable Qt for windows Travis builds Compiling them from scratch takes far too long. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fd6aff5086..4ee6d17a60 100755 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ env: # 32-bit + dash - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib" DEP_OPTS="NO_QT=1" RUN_TESTS=false GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" # Win64 - - HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine1.6 xvfb" RUN_TESTS=false GOAL="" GRIDCOIN_CONFIG="--enable-reduce-exports" NEED_XVFB=1 + - HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine1.6 xvfb" DEP_OPTS="NO_QT=1" RUN_TESTS=false GOAL="" GRIDCOIN_CONFIG="--enable-reduce-exports" NEED_XVFB=1 # Cross-Mac - disabled for now, since we cannot compile QtSVG with the SDK #- HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" GRIDCOIN_CONFIG="--enable-gui --enable-reduce-exports" OSX_SDK=10.11 RUN_TESTS=false GOAL="deploy" From dcf242ea82bd1786c691f83350156484a9e7c2e3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 23 Oct 2018 09:51:12 -0400 Subject: [PATCH 002/359] Fix for corner case divide by zero error This fixes a corner case divide by zero error in stake splitting --- src/miner.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 8adbad90bc..3eb3ff7ca3 100755 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -801,24 +801,24 @@ unsigned int GetNumberOfStakeOutputs(int64_t &nValue, int64_t &nMinStakeSplitVal // Refer to page 5 for G. This link is a draft of an upcoming bluepaper section. const double G = 9942.2056; - // If the stake output provided to GetNumberofStakeOutputs is less than or equal to nMinStakeSplitValue then there will - // be only one output, so return(1) immediately. - if (nValue <= nMinStakeSplitValue) - return(1); - - // Set Desired UTXO size post stake based on passed in efficiency and difficulty, but do not allow to go below - // passed in MinStakeSplitValue. Note that we use GetAverageDifficulty over a 4 hour (160 block period) rather than - // StakeKernelDiff, because the block to block difficulty has too much scatter. Please refer to the above link, - // equation (27) on page 10 as a reference for the below formula. - nDesiredStakeOutputValue = G * GetAverageDifficulty(160) * (3.0 / 2.0) * (1 / dEfficiency - 1) * COIN; - nDesiredStakeOutputValue = max(nMinStakeSplitValue, nDesiredStakeOutputValue); + // If the stake output provided to GetNumberofStakeOutputs is not greater than nMinStakeSplitValue then there will + // be only one output, so skip calculations and return(nStakeOutputs) which is initialized to 1. + if (nValue > nMinStakeSplitValue) + { + // Set Desired UTXO size post stake based on passed in efficiency and difficulty, but do not allow to go below + // passed in MinStakeSplitValue. Note that we use GetAverageDifficulty over a 4 hour (160 block period) rather than + // StakeKernelDiff, because the block to block difficulty has too much scatter. Please refer to the above link, + // equation (27) on page 10 as a reference for the below formula. + nDesiredStakeOutputValue = G * GetAverageDifficulty(160) * (3.0 / 2.0) * (1 / dEfficiency - 1) * COIN; + nDesiredStakeOutputValue = max(nMinStakeSplitValue, nDesiredStakeOutputValue); - if (fDebug2) LogPrintf("GetNumberOfStakeOutputs: nDesiredStakeOutputValue = %f", CoinToDouble(nDesiredStakeOutputValue)); + if (fDebug2) LogPrintf("GetNumberOfStakeOutputs: nDesiredStakeOutputValue = %f", CoinToDouble(nDesiredStakeOutputValue)); - // Divide nValue by nDesiredStakeUTXOValue. We purposely want this to be integer division to round down. - nStakeOutputs = nValue / nDesiredStakeOutputValue; + // Divide nValue by nDesiredStakeUTXOValue. We purposely want this to be integer division to round down. + nStakeOutputs = max((int64_t) 1, nValue / nDesiredStakeOutputValue); - if (fDebug2) LogPrintf("GetNumberOfStakeOutputs: nStakeOutputs = %u", nStakeOutputs); + if (fDebug2) LogPrintf("GetNumberOfStakeOutputs: nStakeOutputs = %u", nStakeOutputs); + } return(nStakeOutputs); } From 81726e21b09adc8049d89a028a8a5a1b96ceee56 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 4 Nov 2018 00:39:06 -0400 Subject: [PATCH 003/359] Integration of Gridcoin C++ scraper into wallet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the first attempt at integrating ifoggz's scraper into the wallet. It has been threaded from net.cpp. I have done some tweaking to allow it to both be integrated and compiled standalone. You can compile standalone by going to the src/ScraperProxy and running the compile.sh command, which will generate a standalone executable. Note that the integrated version expects the existence of a Scraper subdirectory under the data directory to put the files, and the standalone version expects a Scraper subdirectoy under the CWD to put the files. I have not yet put the intelligence to create it if it doesn't exist. I have also changed the rpc calls in the scraper to use local function calls when it is running as part of the wallet, since if the scraper is running as a thread, it can skip the (loopback) rpc and call the functions directly. I don’t like the look of the code though and may refine it more. Further, you may have to mess around with the environment variables LIBS="-lcurl -ljsoncpp", because I haven't fully fixed autotools. Tweaks to compile.sh for Scraper standalone Added iostream to boost depends build Changes to condition rpc calls This makes changes to convert the rpc calls to native function calls when the scraper is running as part of the wallet. It also tweaks more with some includes/defines to keep the standalone compile working. --- build-aux/m4/m4_ax_boost_iostreams.m4 | 116 +++ configure.ac | 3 +- depends/packages/boost.mk | 2 +- src/Makefile.am | 2 + src/ScraperProxy/.gitignore | 7 + src/ScraperProxy/LICENSE | 21 + src/ScraperProxy/README.md | 41 + src/ScraperProxy/compile.sh | 2 + src/ScraperProxy/scraper-standalone.cpp | 55 ++ src/ScraperProxy/scraper.cpp | 1017 +++++++++++++++++++++++ src/ScraperProxy/scraper.h | 916 ++++++++++++++++++++ src/ScraperProxy/start.sh | 4 + src/init.cpp | 13 + src/net.cpp | 30 + 14 files changed, 2227 insertions(+), 2 deletions(-) create mode 100644 build-aux/m4/m4_ax_boost_iostreams.m4 create mode 100644 src/ScraperProxy/.gitignore create mode 100644 src/ScraperProxy/LICENSE create mode 100644 src/ScraperProxy/README.md create mode 100755 src/ScraperProxy/compile.sh create mode 100755 src/ScraperProxy/scraper-standalone.cpp create mode 100755 src/ScraperProxy/scraper.cpp create mode 100755 src/ScraperProxy/scraper.h create mode 100644 src/ScraperProxy/start.sh mode change 100644 => 100755 src/net.cpp diff --git a/build-aux/m4/m4_ax_boost_iostreams.m4 b/build-aux/m4/m4_ax_boost_iostreams.m4 new file mode 100644 index 0000000000..8f27f85456 --- /dev/null +++ b/build-aux/m4/m4_ax_boost_iostreams.m4 @@ -0,0 +1,116 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_boost_iostreams.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_IOSTREAMS +# +# DESCRIPTION +# +# Test for IOStreams library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_IOSTREAMS_LIB) +# +# And sets: +# +# HAVE_BOOST_IOSTREAMS +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 21 + +AC_DEFUN([AX_BOOST_IOSTREAMS], +[ + AC_ARG_WITH([boost-iostreams], + AS_HELP_STRING([--with-boost-iostreams@<:@=special-lib@:>@], + [use the IOStreams library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-iostreams=boost_iostreams-gcc-mt-d-1_33_1 ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_iostreams_lib="" + else + want_boost="yes" + ax_boost_user_iostreams_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::IOStreams library is available, + ax_cv_boost_iostreams, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include + @%:@include + ]], + [[std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0; + ]])], + ax_cv_boost_iostreams=yes, ax_cv_boost_iostreams=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_iostreams" = "xyes"; then + AC_DEFINE(HAVE_BOOST_IOSTREAMS,,[define if the Boost::IOStreams library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_iostreams_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_iostreams*.so* $BOOSTLIBDIR/libboost_iostream*.dylib* $BOOSTLIBDIR/libboost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_iostreams.*\)\.so.*$;\1;' -e 's;^lib\(boost_iostream.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + if test "x$link_iostreams" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_iostreams*.dll* $BOOSTLIBDIR/boost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_iostreams.*\)\.dll.*$;\1;' -e 's;^\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_iostreams_lib boost_iostreams-$ax_boost_user_iostreams_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_iostreams" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/configure.ac b/configure.ac index 2d2dbdceba..e914fed729 100755 --- a/configure.ac +++ b/configure.ac @@ -758,6 +758,7 @@ dnl Check for boost libs AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) AX_BOOST_SYSTEM AX_BOOST_FILESYSTEM +AX_BOOST_IOSTREAMS AX_BOOST_PROGRAM_OPTIONS AX_BOOST_THREAD AX_BOOST_CHRONO @@ -827,7 +828,7 @@ fi if test x$use_boost = xyes; then -BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB" +BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB" dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 2b3407c551..75fa75b85e 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -19,7 +19,7 @@ $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) $(package)_toolset_darwin=darwin $(package)_archiver_darwin=$($(package)_libtool) -$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test +$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test,iostreams $(package)_cxxflags=-std=c++11 -fvisibility=hidden $(package)_cxxflags_linux=-fPIC endef diff --git a/src/Makefile.am b/src/Makefile.am index b6c8539abd..50742d3bb1 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -95,6 +95,7 @@ GRIDCOIN_CORE_H = \ rpcclient.h \ rpcprotocol.h \ rpcserver.h \ + ScraperProxy/scraper.h \ script.h \ scrypt.h \ serialize.h \ @@ -150,6 +151,7 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ rpcserver.cpp \ rpcwallet.cpp \ rpcdataacq.cpp \ + ScraperProxy/scraper.cpp \ script.cpp \ scrypt.cpp \ sync.cpp \ diff --git a/src/ScraperProxy/.gitignore b/src/ScraperProxy/.gitignore new file mode 100644 index 0000000000..e10eea0bc6 --- /dev/null +++ b/src/ScraperProxy/.gitignore @@ -0,0 +1,7 @@ +userpass.dat +scraper.time +scraper.log +GridcoinScraper2.pro* +main.cpp +test +*.gz diff --git a/src/ScraperProxy/LICENSE b/src/ScraperProxy/LICENSE new file mode 100644 index 0000000000..48b12ad3de --- /dev/null +++ b/src/ScraperProxy/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Gridcoin Community + +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/src/ScraperProxy/README.md b/src/ScraperProxy/README.md new file mode 100644 index 0000000000..b9b17fb55f --- /dev/null +++ b/src/ScraperProxy/README.md @@ -0,0 +1,41 @@ +## Gridcoin Scraper + +This scraper is designed to communicate with the wallet and gather whitelist data. A wallet should be running locally with the scraper so if a whitelist entry is added or removed it can have up to date information. + +This scraper runs a loop and sleeps for 300 seconds before performing another loop. + +This scraper uses a userpass.dat file which contains credentials for Einstein, though it can contain future credentials for other projects as well. + +This scraper will not perform any tasks when a superblock is not needed with the exception that it will perform its project file sync up to 300 seconds before a superblock needed. + +This scraper keeps track of download bandwidth usage as well as the new upload size that neural network clients would be downloading. + + +How this works: + +1) Request whitelist data from wallet +2) HEAD request each project server for ETag of current team or RAC file +3a) If ETag file already exists skip this project team or RAC file based on which it is HEAD requesting for +3b) If does not exist goto 4 +4) Download new team or RAC file +5) If file size matches the file size reported in HEAD request we continue; else skip for now +5) Process the team or RAC file and make a gzip file stored as the ETag with only required data we need for neural network consensus. (reduces file sizes by ~99%) +6) Sleep for 300 seconds + +This scraper has a pretty verbal log file and time file as well. All aspects of curl usage and RPC as well as stats processing have logging. + +This scraper is actually quite fast with what it does. + +CURRENT g++ compile flags: + +-std=c++11 -lcurl -lboost_system -DBOOST_NO_CXX11_SCOPED_ENUMS -lboost_filesystem -lboost_iostreams -lz -ljsoncpp + +NOTE: -g for testing and the valgrinding I've done. + +OTHER: + +As I've mentioned the shrinking of the files by removing unused data we dont use and also making us more if not fully compliant with stats data. + +1535491750 [INFO]
: download size so far: 302543285 upload size so far: 1666554 + +As seen here it has downloaded 302,543,285 in gzip files and produced 1,666,554 in gzip files for download by neural network. That is a 99.4% decrease in file size which also results in a faster neural network sync. diff --git a/src/ScraperProxy/compile.sh b/src/ScraperProxy/compile.sh new file mode 100755 index 0000000000..947d427de3 --- /dev/null +++ b/src/ScraperProxy/compile.sh @@ -0,0 +1,2 @@ +#!/bin/bash +g++ -o gridcoinscraper scraper-standalone.cpp scraper.cpp ../appcache.cpp -std=c++11 -I.. -lcurl -lboost_system -DBOOST_NO_CXX11_SCOPED_ENUMS -DSCRAPER_STANDALONE -lboost_filesystem -lboost_iostreams -lz -ljsoncpp diff --git a/src/ScraperProxy/scraper-standalone.cpp b/src/ScraperProxy/scraper-standalone.cpp new file mode 100755 index 0000000000..e4b9b9f1cb --- /dev/null +++ b/src/ScraperProxy/scraper-standalone.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +//#include +//#include +#include +#include + +bool fShutdown = false; +bool fDebug = true; + +extern void Scraper(bool fStandalone); + +int main() +{ + Scraper(true); + + return 0; +} + +/**************************** +* Sanity for standlone mode * +*****************************/ + +std::vector split(const std::string& s, const std::string& delim) +{ + size_t pos = 0; + size_t end = 0; + std::vector elems; + + while((end = s.find(delim, pos)) != std::string::npos) + { + elems.push_back(s.substr(pos, end - pos)); + pos = end + delim.size(); + } + + elems.push_back(s.substr(pos, end - pos)); + + return elems; +} + +void MilliSleep(int64_t n) +{ + std::this_thread::sleep_for(std::chrono::milliseconds(n)); +} + +int64_t GetAdjustedTime() +{ + return time(NULL); +} + +bool Contains(const std::string& data, const std::string& instring) +{ + return data.find(instring) != std::string::npos; +} diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp new file mode 100755 index 0000000000..6fc5f8ae5c --- /dev/null +++ b/src/ScraperProxy/scraper.cpp @@ -0,0 +1,1017 @@ +#include "scraper.h" + +extern bool fShutdown; + +bool find(const std::string& s, const std::string& find); +std::string urlsanity(const std::string& s, const std::string& type); +std::string lowercase(std::string s); +std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); +std::vector vXMLData(const std::string& xmldata, int64_t teamid); +int64_t teamid(const std::string& xmldata); + +bool WhitelistPopulated(bool fScraperStandalone); +bool UserpassPopulated(); +bool DownloadProjectTeamFiles(bool fScraperStandalone); +int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag); +bool DownloadProjectRacFiles(bool fScraperStandalone); +bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid); +bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); +void AuthenticationETagClear(); + +// No header storage by day number gz +bool xDownloadProjectTeamFiles(); +int64_t xProcessProjectTeamFile(const fs::path& file); +bool xDownloadProjectRacFiles(); +bool xProcessProjectRacFile(const fs::path& file, int64_t teamid); +int GetDayOfYear(int64_t timestamp); + +void testdata(const std::string& etag); + +// Note these two are initialized here for standalone mode compile, but will be overwritten by +// the values from GetArg in init.cpp when compiled as part of the wallet. +unsigned int nScraperSleep = 60000; +boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; + +extern void MilliSleep(int64_t n); + +void Scraper(bool fScraperStandalone) +{ + while (fScraperStandalone || !fShutdown) + { + // Refresh the whitelist if its available + + gridcoinrpc data; + + int64_t sbage = data.sbage(fScraperStandalone); + + // Give 300 seconds before superblock needed before we sync + if (sbage <= 86100 && sbage >= 0) + _log(INFO, "main", "Superblock not needed. age=" + std::to_string(sbage)); + + else if (sbage <= -1) + _log(ERROR, "main", "RPC error occured, check logs"); + + else + { + if (!data.wlimport(fScraperStandalone)) + _log(WARNING, "main", "Refreshing of whitelist failed.. using old data"); + + else + _log(INFO, "main", "Refreshing of whitelist completed"); + + AuthenticationETagClear(); + + DownloadProjectTeamFiles(fScraperStandalone); + + DownloadProjectRacFiles(fScraperStandalone); + + } + + _nntester(INFO, "MAIN", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); + + _log(INFO, "MAIN", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + + MilliSleep(nScraperSleep); + } +} + +/********************** +* Sanity * +**********************/ + +bool find(const std::string& s, const std::string& find) +{ + size_t pos = s.find(find); + + if (pos == std::string::npos) + return false; + + else + return true; +} + +std::string urlsanity(const std::string& s, const std::string& type) +{ + stringbuilder url; + + if (find(s, "einstein")) + { + url.append(s.substr(0,4)); + url.append("s"); + url.append(s.substr(4, s.size())); + } + + else + url.append(s); + + url.append("stats/"); + url.append(type); + + if (find(s, "gorlaeus") || find(s, "worldcommunitygrid")) + url.append(".xml.gz"); + + else + url.append(".gz"); + + return url.value(); +} + +std::string lowercase(std::string s) +{ + std::transform(s.begin(), s.end(), s.begin(), ::tolower); + + return s; +} + +int64_t teamid(const std::string& xmldata) +{ + std::string sXML = xmldata; // copy so we can iterate this. + + while (!sXML.empty()) + { + size_t loca = sXML.find(""); + size_t locb = sXML.find(""); + + std::string substr = sXML.substr(loca, locb + 7); + + if (lowercase(ExtractXML(substr, "", "", ""); + + return std::stol(teamidstr); + } + + sXML = sXML.substr(locb + 7, sXML.size()); + } + + return 0; +} + +std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end) +{ + + std::string extraction = ""; + std::string::size_type loc = XMLdata.find( key, 0 ); + + if(loc != std::string::npos) + { + std::string::size_type loc_end = XMLdata.find(key_end, loc+3); + + if (loc_end != std::string::npos) + extraction = XMLdata.substr(loc+(key.length()),loc_end-loc-(key.length())); + } + + return extraction; +} + +/********************** +* Scraper Logger * +**********************/ + +void _log(logattribute eType, const std::string& sCall, const std::string& sMessage) +{ + std::string sType; + std::string sOut; + + try + { + switch (eType) + { + case INFO: sType = "INFO"; break; + case WARNING: sType = "WARNING"; break; + case ERROR: sType = "ERROR"; break; + case CRITICAL: sType = "CRITICAL"; break; + } + } + + catch (std::exception& ex) + { + printf("Logger : exception occured in _log function (%s)\n", ex.what()); + + return; + } + + stringbuilder string; + + string.append(std::to_string(time(NULL))); + string.append(" ["); + string.append(sType); + string.append("] <"); + string.append(sCall); + string.append("> : "); + string.append(sMessage); + sOut = string.value(); + + logger log; + + log.output(sOut); + + return; +} + +void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage) +{ + std::string sType; + std::string sOut; + + try + { + switch (eType) + { + case INFO: sType = "INFO"; break; + case WARNING: sType = "WARNING"; break; + case ERROR: sType = "ERROR"; break; + case CRITICAL: sType = "CRITICAL"; break; + } + } + + catch (std::exception& ex) + { + printf("Logger : exception occured in _log function (%s)\n", ex.what()); + + return; + } + + stringbuilder string; + + string.append(std::to_string(time(NULL))); + string.append(" ["); + string.append(sType); + string.append("] <"); + string.append(sCall); + string.append("> : "); + string.append(sMessage); + sOut = string.value(); + + nntester log; + + log.output(sOut); + + return; +} + +/********************** +* Populate Whitelist * +**********************/ + +bool WhitelistPopulated(bool fScraperStandalone) +{ + if (vwhitelist.empty()) + { + _log(INFO, "WhitelistPopulated", "Whitelist vector currently empty; populating"); + + gridcoinrpc data; + + if (data.wlimport(fScraperStandalone)) + _log(INFO, "WhitelistPopulated", "Successfully populated whitelist vector"); + + else + { + _log(CRITICAL, "WhitelistPopulated", "Failed to populate whitelist vector; keeping old whitelist data for time being"); + + return false; + } + } + + _log(INFO, "WhitelistPopulated", "Whitelist is populated; Contains " + std::to_string(vwhitelist.size()) + " projects"); + + return true; +} + +void AuthenticationETagClear() +{ + fs::path file = fs::current_path() / "auth.dat"; + + if (fs::exists(file)) + fs::remove(file); +} + +/********************** +* Populate UserPass * +**********************/ + +bool UserpassPopulated() +{ + if (vuserpass.empty()) + { + _log(INFO, "UserpassPopulated", "Userpass vector currently empty; populating"); + + userpass up; + + if (up.import()) + _log(INFO, "UserPassPopulated", "Successfully populated userpass vector"); + + else + { + _log(CRITICAL, "UserPassPopulated", "Failed to populate userpass vector"); + + return false; + } + } + + _log(INFO, "UserPassPopulated", "Userpass is populated; Contains " + std::to_string(vuserpass.size()) + " projects"); + + return true; +} + +/********************** +* Project Team Files * +**********************/ + +bool DownloadProjectTeamFiles(bool fScraperStandalone) +{ + vprojectteamids.clear(); + + if (!WhitelistPopulated(fScraperStandalone)) + { + _log(CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); + + return false; + } + + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectTeamFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectTeamFiles", "Downloading project file for " + prjs.first); + + std::vector vPrjUrl = split(prjs.second, "@"); + + std::string sUrl = urlsanity(vPrjUrl[0], "team"); + + std::string team_file_name = prjs.first + "-team.gz"; + + fs::path team_file = pathScraper / team_file_name.c_str(); + + // if (fs::exists(team_file)) +// fs::remove(team_file); + + // Grab ETag of team file + statscurl teametagcurl; + std::string sTeamETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) + { + buserpass = true; + + userpass = up.second; + + break; + } + } + + if (buserpass) + { + if (!teametagcurl.http_header(sUrl, sTeamETag, userpass)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + + continue; + } + } + + else + if (!teametagcurl.http_header(sUrl, sTeamETag)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + + // todo remove these files + continue; + } + + _log(INFO, "DownloadProjectTeamFiles", "Successfully pulled team header file for " + prjs.first); + + + if (buserpass) + { + authdata ad(lowercase(prjs.first)); + + ad.setoutputdata("team", prjs.first, sTeamETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectTeamFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } + + std::string chketagfile = sTeamETag + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); + + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + + _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + + continue; + } + + else + fs::remove(team_file); + + _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " does not exists"); + + statscurl teamcurl; + + if (buserpass) + { + if (!teamcurl.http_download(sUrl, team_file.string(), userpass)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); + + continue; + } + } + + else + if (!teamcurl.http_download(sUrl, team_file.string())) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); + + continue; + } + + int64_t teamid = ProcessProjectTeamFile(team_file.string(), sTeamETag); + + vprojectteamids.push_back(std::make_pair(prjs.first, teamid)); + } + + return true; +} + +int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.string() + ")"); + + return 0; + } + + _log(INFO, "ProcessProjectTeamFile", "Opening team file (" + file.string() + ")"); + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string gzetagfile = ""; + + // If einstein we store different + if (file.string().find("einstein") != std::string::npos) + gzetagfile = "einstein_team.gz"; + + else + gzetagfile = etag + ".gz"; + + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + + std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "ProccessProjectTeamFile", "Started processing " + file.string()); + + stringbuilder outdata; + outdata.nlappend(""); + outdata.nlappend(""); + stream << outdata.value(); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find teams block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder teamdata; + + teamdata.nlappend(line); + + while (std::getline(in, line)) + { + if (line.empty()) + { + _log(CRITICAL, "ProcessProjectTeamFile", "An empty line has been found in " + file.string() + ". This usually means file was incomplete when downloaded; Moving on"); + + bfileerror = true; + + break; + } + + if (line == "") + { + teamdata.nlappend(line); + + if (lowercase(ExtractXML(teamdata.value(), "", "")) == "gridcoin") + { + vXML.push_back(teamdata.value()); + + bcomplete = true; + + break; + } + + else + break; + } + + if (bcomplete) + break; + + teamdata.nlcleanappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + if (bfileerror) + { + _log(CRITICAL, "ProcessProjectTeamFile", "Error in data processing of " + file.string() + "; Aborted processing"); + + std::string efile = etag + ".gz"; + fs::path fsepfile = pathScraper / efile; + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + if (fs::exists(fsepfile)) + fs::remove(fsepfile); + + if (fs::exists(file)) + fs::remove(file); + + return false; + } + + _log(INFO, "ProccessProjectTeamFile", "Finished processing " + file.string()); + _log(INFO, "ProccessProjectTeamFile", "Started processing team data and stripping"); + + // Strip the team xml data to contain only what we need to be compressed from vector + // We Need: + // id, name + // We Don't need: + // type, userid, total_credit, expavg_credit, expavg_time, founder_name, url, name_html, description + // In reality we do not need those since NN does those calculations and does not use the extra data + // I've also opted to save 1 byte a line by not doing newlines since this a scraper + std::string steamid; + + for (auto const& vv : vXML) + { + std::string sid = ExtractXML(vv, "", ""); + std::string sname = ExtractXML(vv, "", ""); + stringbuilder xmlout; + + xmlout.nlappend(""); + xmlout.xmlappend("id", sid); + xmlout.xmlappend("name", sname); + xmlout.nlappend(""); + xmlout.append(""); + + stream << xmlout.value(); + + steamid = sid; + } + + _log(INFO, "ProccessProjectTeamFile", "Finished processing team rac data; stripping complete"); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "ProccessProjectTeamFile", "Complete Process"); + + try + { + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectTeamFile", "Processing new team file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; + } + + catch (fs::filesystem_error& e) + { + _log(INFO, "ProcessProjectTeamFile", "FS Error -> " + std::string(e.what())); + } + + if (fs::exists(file)) + fs::remove(file); + + if (!steamid.empty()) + return std::stol(steamid); + + _log(ERROR, "ProcessProjectTeamFile", "Unable to determine team ID"); + + return 0; +} + +/********************** +* Project RAC Files * +**********************/ + +bool DownloadProjectRacFiles(bool fScraperStandalone) +{ + if (!WhitelistPopulated(fScraperStandalone)) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); + + return false; + } + + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); + + std::vector vPrjUrl = split(prjs.second, "@"); + + std::string sUrl = urlsanity(vPrjUrl[0], "user"); + + std::string rac_file_name = prjs.first + +"-user.gz"; + + fs::path rac_file = pathScraper / rac_file_name.c_str(); + +// if (fs::exists(rac_file)) +// fs::remove(rac_file); + + // Grab ETag of team file + statscurl racetagcurl; + std::string sRacETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) + { + buserpass = true; + + userpass = up.second; + + break; + } + } + + if (buserpass) + { + if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + } + + else + if (!racetagcurl.http_header(sUrl, sRacETag)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + + if (sRacETag.empty()) + { + _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); + + continue; + } + + else + _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); + + if (buserpass) + { + authdata ad(lowercase(prjs.first)); + + ad.setoutputdata("user", prjs.first, sRacETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } + + std::string chketagfile = sRacETag + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); + + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + continue; + } + + else + fs::remove(chkfile); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + statscurl raccurl; + + if (buserpass) + { + if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } + } + + else + if (!raccurl.http_download(sUrl, rac_file.string())) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } + + int64_t team_id = 0; + + for (auto const& vprj : vprojectteamids) + { + if (vprj.first != prjs.first) + continue; + + else + team_id = vprj.second; + } + + if (team_id == 0) + { + _log(ERROR, "DownloadProjectRacFiles", "TEAM ID was not found for project " + prjs.first); + + continue; + } + ProcessProjectRacFile(rac_file.string(), sRacETag, team_id); + } + + return true; +} + +bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "ProcessProjectRacFile", "Failed to open rac gzip file (" + file.string() + ")"); + + return false; + } + + _log(INFO, "ProcessProjectRacFile", "Opening rac file (" + file.string() + ")"); + + boostio::filtering_istream in; + + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string gzetagfile = ""; + + // If einstein we store different + if (file.string().find("einstein") != std::string::npos) + gzetagfile = "einstein_user.gz"; + + else + gzetagfile = etag + ".gz"; + + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + + std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "ProccessProjectRacFile", "Started processing " + file.string()); + + stringbuilder outdata; + outdata.nlappend(""); + stream << outdata.value(); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find users block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder userdata; + + userdata.nlappend(line); + + while (std::getline(in, line)) + { + if (line == "") + { + userdata.nlappend(line); + + if (ExtractXML(userdata.value(), "", "") == std::to_string(teamid)) + vXML.push_back(userdata.value()); + + break; + } + + userdata.nlcleanappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + if (bfileerror) + { + _log(CRITICAL, "ProcessProjectRacFile", "Error in data processing of " + file.string() + "; Aborted processing"); + + std::string efile = etag + ".gz"; + fs::path fsepfile = pathScraper/ efile; + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + if (fs::exists(fsepfile)) + fs::remove(fsepfile); + + if (fs::exists(file)) + fs::remove(file); + + return false; + } + + _log(INFO, "ProccessProjectRacFile", "Finished processing " + file.string()); + _log(INFO, "ProccessProjectRacFile", "Started processing team rac data and stripping"); + + // Strip the team rac xml data to contain only why we need to be compressed from vector + // We Need: + // total_credit, expavg_time, expavg_credit, teamid, cpid + // We Don't need: + // id, country, name, url + // In reality we DO NOT need total_credit till TCD + // In reality we DO NOT need expavg_time but this will make nn compatible + // Also since we know teamid in this function we do not have to extract that data with ExtractXML + // I've also opted to save 1 byte a line by not doing newlines since this a scraper + + stringbuilder xmlout; + + xmlout.nlappend(""); + + for (auto const& vv : vXML) + { + std::string stotal_credit = ExtractXML(vv, "", ""); + std::string sexpavg_time = ExtractXML(vv, "", ""); + std::string sexpavg_credit = ExtractXML(vv, "", ""); + std::string scpid = ExtractXML(vv, "", ""); + + xmlout.nlappend(""); + xmlout.xmlappend("total_credit", stotal_credit); + xmlout.xmlappend("expavg_time", sexpavg_time); + xmlout.xmlappend("expavg_credit", sexpavg_credit); + xmlout.xmlappend("cpid", scpid); + xmlout.xmlappend("teamid", teamid); + xmlout.nlappend(""); + } + + xmlout.nlappend(""); + + stream << xmlout.value(); + + _log(INFO, "ProccessProjectRacFile", "Finished processing team rac data; stripping complete"); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + try + { + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectRacFile", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; + + } + + catch (fs::filesystem_error& e) + { + _log(INFO, "ProcessProjectRacFile", "FS Error -> " + std::string(e.what())); + } + + fs::remove(file); + + _log(INFO, "ProccessProjectRacFile", "Complete Process"); + + return true; +} + +void testdata(const std::string& etag) +{ + std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).c_str(), std::ios_base::in | std::ios_base::binary); + + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string line; + printf("size: %lu\n", in.size()); + while (std::getline(in, line)) + { + printf("data: %s\n", line.c_str()); + } + + +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h new file mode 100755 index 0000000000..d10f94de36 --- /dev/null +++ b/src/ScraperProxy/scraper.h @@ -0,0 +1,916 @@ +#ifndef SCRAPER_H +#define SCRAPER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +//#include +#include + +#include "appcache.h" + +#ifndef SCRAPER_STANDALONE +#include "util.h" +#else +extern int64_t GetAdjustedTime(); +extern bool Contains(const std::string& data, const std::string& instring); +#endif + +/********************* +* Scraper Namepsace * +*********************/ + +namespace fs = boost::filesystem; +namespace boostio = boost::iostreams; + +/********************* +* Scraper ENUMS * +*********************/ + +enum logattribute { + INFO, + WARNING, + ERROR, + CRITICAL +}; + +/********************* +* Functions * +*********************/ + +void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); +void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); +std::vector split(const std::string& s, const std::string& delim); +extern AppCacheSection ReadCacheSection(const std::string& section); + +/********************* +* Global Vars * +*********************/ + +extern bool fDebug; +std::vector> vwhitelist; +std::vector> vuserpass; +std::vector> vprojectteamids; +std::vector vauthenicationetags; +std::string rpcauth = "boinc:test"; +std::string rpcip = "http://127.0.0.1:9334/"; +int64_t ndownloadsize = 0; +int64_t nuploadsize = 0; +/********************* +* Scraper * +*********************/ + +class scraper +{ +public: + scraper(); +}; + +/******************** +* Scraper Curl * +********************/ + +class statscurl +{ +private: + + CURL* curl; + std::string buffer; + std::string buffertwo; + std::string header; + long http_code; + CURLcode res; + + static size_t writeheader(void* ptr, size_t size, size_t nmemb, void* userp) + { + ((std::string*)userp)->append((char*)ptr, size * nmemb); + + return size * nmemb; + } + + static size_t writetofile(void* ptr, size_t size, size_t nmemb, FILE* fp) + { + return fwrite(ptr, size, nmemb, fp); + } + + static size_t writestring(const char* in, size_t size, size_t nmemb, std::string* out) + { + const std::size_t totalBytes(size * nmemb); + + out->append(in, totalBytes); + + return totalBytes; + } + +public: + + statscurl() + : curl(curl_easy_init()) + { + } + + ~statscurl() + { + if (curl) + { + curl_easy_cleanup(curl); + curl_global_cleanup(); + } + } + + bool httpcode(const std::string& response, const std::string& url) + { + // Check code to make sure we have success as even a response is considered an OK + // We check only on head requests since they give us the information we need + // Codes we send back true and wait for other HTTP/ code is 301, 302, 307 and 308 since these are follows + if (response.empty()) + { + _log(ERROR, "httpcode", "Server returned an empty HTTP code "); + + return false; + } + + if (response == "200") + return true; + + else if (response == "400") + _log(ERROR, "httpcode", "Server returned a http code of Bad Request "); + + else if (response == "401") + _log(ERROR, "httpcode", "Server returned a http code of Unauthroized "); + + else if (response == "403") + _log(ERROR, "httpcode", "Server returned a http code of Forbidden "); + + else if (response == "404") + _log(ERROR, "httpcode", "Server returned a http code of Not Found "); + + else if (response == "301") + return true; + + else if (response == "302") + return true; + + else if (response == "307") + return true; + + else if (response == "308") + return true; + + else + _log(ERROR, "httpcode", "Server returned a http code "); + + return false; + } + + bool rpccall(const std::string& type, const std::string& params, std::string& reply) + { + std::string strdata; + + if (params.empty()) + strdata = "{\"jsonrpc\" : \"1.0\", \"id\" : \"" + type + "\", \"method\" : \"" + type + "\", \"params\" : []}"; + + else + strdata = "{\"jsonrpc\" : \"1.0\", \"id\" : \"" + type + "\", \"method\" : \"" + type + "\", \"params\" : [\"project\"]}"; + + const char* data = strdata.c_str(); + struct curl_slist* rpcheaders = NULL; + + rpcheaders = curl_slist_append(rpcheaders, "content-type: text/plain;"); + + curl_easy_setopt(curl, CURLOPT_URL, rpcip.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writestring); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffertwo); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, rpcheaders); + curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); + curl_easy_setopt(curl, CURLOPT_USERPWD, rpcauth.c_str()); + curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(data)); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); + + res = curl_easy_perform(curl); + + // Stop memory leak from headers + curl_slist_free_all(rpcheaders); + + if (res > 0) + { + _log(ERROR, "curl_rpccall", "Failed to receive reply from Gridcoin RPC (" + curl_easy_strerror(res) + ")"); + + return false; + } + + //curl_easy_reset(curl); + + std::istringstream ssinput(buffertwo); + + for (std::string line; std::getline(ssinput, line);) + reply.append(line); + + _log(INFO, "curl_rpccall", "Successful RPC call "); + + return true; + + } + + bool http_download(const std::string& url, const std::string& destination, const std::string& userpass) + { + try { + FILE* fp; + + fp = fopen(destination.c_str(), "wb"); + + if(!fp) + { + _log(ERROR, "url_http_download", "Failed to open file to download project data into "); + + return false; + } + + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writetofile); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); + curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); + + res = curl_easy_perform(curl); + fclose(fp); + + if (res > 0) + { + if (fp) + fclose(fp); + + _log(ERROR, "curl_http_download", "Failed to download file (" + curl_easy_strerror(res) + ")"); + + return false; + } + + return true; + + } + + catch (std::exception& ex) + { + _log(ERROR, "curl_http_download", "Std exception occured (" + std::string(ex.what()) + ")"); + + return false; + } + } + + bool http_header(const std::string& url, std::string& etag, const std::string& userpass) + { + struct curl_slist* headers = NULL; + + headers = curl_slist_append(headers, "Accept: */*"); + headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); + + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); + curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); + + res = curl_easy_perform(curl); + + // Stop memory leak from headers + curl_slist_free_all(headers); + + if (res > 0) + { + _log(ERROR, "curl_http_header", "Failed to capture header of file "); + + return false; + } + + std::istringstream ssinput(header); + + for (std::string line; std::getline(ssinput, line);) + { + if (line.find("HTTP/") != std::string::npos) + { + // Check the code response in header to make sure everything is as it should be + std::vector codevector = split(line, " "); + + if (!httpcode(codevector[1], url)) + return false; + } + + if (line.find("ETag: ") != std::string::npos) + { + size_t pos; + + std::string modstring = line; + + pos = modstring.find("ETag: "); + + etag = modstring.substr(pos+6, modstring.size()); + + etag = etag.substr(1, etag.size() - 3); + } + } + + if (etag.empty()) + { + _log(ERROR, "curl_http_header", "No ETag response from project url "); + + return false; + } + + if (fDebug) + _log(INFO, "curl_http_header", "Captured ETag for project url "); + + return true; + } + + bool http_download(const std::string& url, const std::string& destination) + { + try { + FILE* fp; + + fp = fopen(destination.c_str(), "wb"); + + if(!fp) + { + _log(ERROR, "url_http_download", "Failed to open file to download project data into "); + + return false; + } + + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writetofile); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + + res = curl_easy_perform(curl); + fclose(fp); + + if (res > 0) + { + if (fp) + fclose(fp); + + _log(ERROR, "curl_http_download", "Failed to download file (" + curl_easy_strerror(res) + ")"); + + return false; + } + + return true; + + } + + catch (std::exception& ex) + { + _log(ERROR, "curl_http_download", "Std exception occured (" + std::string(ex.what()) + ")"); + + return false; + } + } + + bool http_header(const std::string& url, std::string& etag) + { + struct curl_slist* headers = NULL; + + headers = curl_slist_append(headers, "Accept: */*"); + headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); + + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + + res = curl_easy_perform(curl); + + // Stop memory leak from headers + curl_slist_free_all(headers); + + if (res > 0) + { + _log(ERROR, "curl_http_header", "Failed to capture header of file "); + + return false; + } + + std::istringstream ssinput(header); + for (std::string line; std::getline(ssinput, line);) + { + if (line.find("HTTP/") != std::string::npos) + { + // Check the code response in header to make sure everything is as it should be + std::vector codevector = split(line, " "); + + if (!httpcode(codevector[1], url)) + return false; + } + + if (line.find("ETag: ") != std::string::npos) + { + size_t pos; + + std::string modstring = line; + + pos = modstring.find("ETag: "); + + etag = modstring.substr(pos+6, modstring.size()); + + etag = etag.substr(1, etag.size() - 3); + } + } + + if (etag.empty()) + { + _log(ERROR, "curl_http_header", "No ETag response from project url "); + + return false; + } + + if (fDebug) + _log(INFO, "curl_http_header", "Captured ETag for project url "); + + return true; + } + +}; + +/********************** +* Network Node Logger * +**********************/ + +class logger +{ +private: + + std::ofstream logfile; + +public: + + logger() + { + fs::path plogfile = fs::current_path() / "scraper.log"; + + logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); + + if (!logfile.is_open()) + printf("Logging : Failed to open logging file\n"); + } + + ~logger() + { + if (logfile.is_open()) + { + logfile.flush(); + logfile.close(); + } + } + + void output(const std::string& tofile) + { + if (logfile.is_open()) + logfile << tofile << std::endl; + + return; + } +}; + +/********************** +* String Builder EXP * +**********************/ + +class stringbuilder +{ +protected: + + std::stringstream builtstring; + +public: + + void append(const std::string &value) + { + builtstring << value; + } + + void append(double value) + { + builtstring << value; + } + + void append(int64_t value) + { + builtstring << value; + } + + void cleanappend(const std::string& value) + { + builtstring << value.substr(1, value.size()); + } + + void nlcleanappend(const std::string& value) + { + builtstring << value.substr(1, value.size()) << "\n"; + } + + void nlappend(const std::string& value) + { + builtstring << value << "\n"; + } + + void xmlappend(const std::string& xmlkey, const std::string& value) + { + builtstring << "<" << xmlkey << ">" << value << "\n"; + } + + void xmlappend(const std::string& xmlkey, int64_t value) + { + builtstring << "<" << xmlkey << ">" << value << "\n"; + } + + std::string value() + { + // Prevent a memory leak + const std::string& out = builtstring.str(); + + return out; + } + + size_t size() + { + const std::string& out = builtstring.str(); + return out.size(); + } + + void clear() + { + builtstring.clear(); + builtstring.str(std::string()); + } +}; + +/********************* +* Whitelist Data * +*********************/ + +class gridcoinrpc +{ +private: + + std::string whitelistrpcdata = ""; + std::string superblockage = ""; + +public: + + gridcoinrpc() + {} + + ~gridcoinrpc() + {} + + bool wlimport(bool fScraperStandalone) + { + if(fScraperStandalone) + { + whitelistrpcdata = ""; + Json::Value jsonvalue; + Json::Reader jsonreader; + Json::StreamWriterBuilder valuestring; + Json::Value::const_iterator jsondata; + // Call RPC for the data + statscurl wl; + + if (!wl.rpccall("listdata", "project", whitelistrpcdata)) + { + _log(ERROR, "whitelist_data_import", "Failed to receive RPC reply for whitelist data"); + + return false; + } + + if (whitelistrpcdata.find("\"result\":null") != std::string::npos) + { + _log(ERROR, "whitelist_data_import", "RPC replied with error (" + whitelistrpcdata + ")"); + + return false; + } + + // Try to parse json data. + + bool successparse = jsonreader.parse(whitelistrpcdata, jsonvalue); + + if (!successparse) + { + printf("Failed to parse\n"); + return false; + } + + const Json::Value whitelist = jsonvalue["result"]; + + // Populate the beacon report data into scraper since we got a reply of whitelist + vwhitelist.clear(); + + for (jsondata = whitelist.begin() ; jsondata != whitelist.end(); jsondata++) + { + + valuestring.settings_["indentation"] = ""; + std::string outurl = Json::writeString(valuestring, *jsondata); + + if (jsondata.key().asString() == "Key Type") + continue; + + vwhitelist.push_back(std::make_pair(jsondata.key().asString(), outurl.substr(1, (outurl.size() - 2)))); + } + + return true; + } + else + { + vwhitelist.clear(); + + for(const auto& item : ReadCacheSection("project")) + vwhitelist.push_back(std::make_pair(item.first, item.second.value)); + + return true; + } + } + + int64_t sbage(bool fScraperStandalone) + { + if (fScraperStandalone) + { + Json::Value jsonvalue; + Json::Reader jsonreader; + Json::StreamWriterBuilder valuestring; + Json::Value::const_iterator jsondata; + superblockage = ""; + // Call RPC for the data + statscurl age; + + if (!age.rpccall("superblockage", "", superblockage)) + { + _log(ERROR, "superblockage_data_import", "Failed to receive RPC reply for superblock data"); + + return -1; + } + + if (superblockage.find("\"result\":null") != std::string::npos) + { + _log(ERROR, "superblockage_data_import", "RPC replied with error (" + superblockage + ")"); + + return -2; + } + + // Try to parse json data. + + bool successparse = jsonreader.parse(superblockage, jsonvalue); + + if (!successparse) + { + printf("Failed to parse\n"); + return -3; + } + + try + { + const Json::Value superblockdata = jsonvalue["result"]; + + for (jsondata = superblockdata.begin() ; jsondata != superblockdata.end(); jsondata++) + { + + valuestring.settings_["indentation"] = ""; + std::string sSBage = Json::writeString(valuestring, *jsondata); + + if (jsondata.key().asString() == "Superblock Age") + { + printf("Outage is %s\n", sSBage.c_str()); + + return std::stoll(sSBage); + } + } + + return -4; + } + + catch (std::exception& ex) + { + _log(ERROR, "superblockage_data_import", "Exception occured (" + std::string(ex.what()) + ")"); + + return -5; + } + + return -6; + } + else + { + int64_t superblock_time = ReadCache("superblock", "magnitudes").timestamp; + int64_t nSBage = GetAdjustedTime() - superblock_time; + + return nSBage; + } + } +}; + +/********************* +* Userpass Data * +*********************/ + +class userpass +{ +private: + + std::ifstream userpassfile; + +public: + + userpass() + { + vuserpass.clear(); + + fs::path plistfile = fs::current_path() / "userpass.dat"; + + userpassfile.open(plistfile.c_str(), std::ios_base::in); + + if (!userpassfile.is_open()) + _log(CRITICAL, "userpass_data", "Failed to open userpass file"); + } + + ~userpass() + { + if (userpassfile.is_open()) + userpassfile.close(); + } + + bool import() + { + vuserpass.clear(); + std::string inputdata; + + try + { + while (std::getline(userpassfile, inputdata)) + { + std::vectorvlist = split(inputdata, ";"); + + vuserpass.push_back(std::make_pair(vlist[0], vlist[1])); + } + + _log(INFO, "userpass_data_import", "Userpass contains " + std::to_string(vuserpass.size()) + " projects"); + + return true; + } + + catch (std::exception& ex) + { + _log(CRITICAL, "userpass_data_import", "Failed to userpass import due to exception (" + std::string(ex.what()) + ")"); + + return false; + } + } +}; + +/********************* +* Auth Data * +*********************/ + +class authdata +{ +private: + + std::ofstream oauthdata; + stringbuilder outdata; + +public: + + authdata(const std::string& project) + { + std::string outfile = project + "_auth.dat"; + fs::path poutfile = fs::current_path() / outfile.c_str(); + + oauthdata.open(poutfile.c_str(), std::ios_base::out | std::ios_base::app); + + if (!oauthdata.is_open()) + _log(CRITICAL, "auth_data", "Failed to open auth data file"); + } + + ~authdata() + { + if (oauthdata.is_open()) + oauthdata.close(); + } + + void setoutputdata(const std::string& type, const std::string& name, const std::string& etag) + { + outdata.clear(); + outdata.append(""); + outdata.append(etag); + outdata.append(""); + outdata.append(""); + outdata.append(type); + outdata.nlappend(""); + } + + bool xport() + { + try + { + if (outdata.size() == 0) + { + _log(CRITICAL, "user_data_export", "No authentication etags to be exported!"); + + return false; + } + + oauthdata.write(outdata.value().c_str(), outdata.size()); + + _log(INFO, "auth_data_export", "Exported"); + + return true; + } + + catch (std::exception& ex) + { + _log(CRITICAL, "auth_data_export", "Failed to export auth data due to exception (" + std::string(ex.what()) + ")"); + + return false; + } + } +}; + +/********************** +* Network Node Tester * +**********************/ + +class nntester +{ +private: + + std::ofstream logfile; + +public: + + nntester() + { + fs::path plogfile = fs::current_path() / "scraper.time"; + + logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); + + if (!logfile.is_open()) + printf("Logging : Failed to open logging file\n"); + } + + ~nntester() + { + if (logfile.is_open()) + { + logfile.flush(); + logfile.close(); + } + } + + void output(const std::string& tofile) + { + if (logfile.is_open()) + logfile << tofile << std::endl; + + return; + } +}; + +#endif // SCRAPER_H diff --git a/src/ScraperProxy/start.sh b/src/ScraperProxy/start.sh new file mode 100644 index 0000000000..2b3ab69131 --- /dev/null +++ b/src/ScraperProxy/start.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +rm *.gz +./gridcoinscraper diff --git a/src/init.cpp b/src/init.cpp index f060f29f7f..f4b60f1463 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -48,7 +48,9 @@ extern bool fEnforceCanonical; extern unsigned int nNodeLifespan; extern unsigned int nDerivationMethodIndex; extern unsigned int nMinerSleep; +extern unsigned int nScraperSleep; extern bool fUseFastIndex; +extern boost::filesystem::path pathScraper; ////////////////////////////////////////////////////////////////////////////// // @@ -376,6 +378,8 @@ bool AppInit2(ThreadHandlerPtr threads) fUseFastIndex = GetBoolArg("-fastindex", false); nMinerSleep = GetArg("-minersleep", 8000); + nScraperSleep = GetArg("-scrapersleep", 60000); + nDerivationMethodIndex = 0; fTestNet = GetBoolArg("-testnet"); @@ -532,6 +536,15 @@ bool AppInit2(ThreadHandlerPtr threads) if (!lock.try_lock()) return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Gridcoin is probably already running."), strDataDir)); + if (GetBoolArg("-scraper")) + { + // If the scraper is going to be run, then set the scraper file staging directory. + boost::filesystem::path pathScraper = GetDataDir() / "Scraper"; + ; + } + + + #if !defined(WIN32) if (fDaemon) { diff --git a/src/net.cpp b/src/net.cpp old mode 100644 new mode 100755 index b7646f31ce..130d0ef377 --- a/src/net.cpp +++ b/src/net.cpp @@ -56,6 +56,7 @@ void ThreadMapPort2(void* parg); void ThreadDNSAddressSeed2(void* parg); bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); +extern void Scraper(bool fScraperStandalone); struct LocalServiceInfo { int nScore; @@ -1611,6 +1612,28 @@ void static ThreadStakeMiner(void* parg) LogPrintf("ThreadStakeMiner exited"); } +void static ThreadScraper(void* parg) +{ + if (fDebug10) LogPrintf("ThreadSraper starting"); + try + { + Scraper(false); + } + catch (std::exception& e) + { + PrintException(&e, "ThreadScraper()"); + } + catch(boost::thread_interrupted&) + { + LogPrintf("ThreadScraper exited (interrupt)"); + return; + } + catch (...) + { + PrintException(NULL, "ThreadScraper()"); + } + LogPrintf("ThreadScraper exited"); +} void CNode::RecordBytesRecv(uint64_t bytes) @@ -2187,6 +2210,13 @@ void StartNode(void* parg) else if (!netThreads->createThread(ThreadStakeMiner,pwalletMain,"ThreadStakeMiner")) LogPrintf("Error: createThread(ThreadStakeMiner) failed"); + + // Run the scraper + if (!GetBoolArg("-scraper")) + LogPrintf("Scraper disabled"); + else + if (!netThreads->createThread(ThreadScraper,NULL,"ThreadScraper")) + LogPrintf("Error: createThread(ThreadScraper) failed"); } bool StopNode() From 67e26998bc640dff499fb654d7fb0d1829379572 Mon Sep 17 00:00:00 2001 From: TheCharlatan Date: Wed, 7 Nov 2018 23:08:45 +0100 Subject: [PATCH 004/359] Add curl depends recipe back --- depends/packages/curl.mk | 22 ++++++++++++++++++++++ depends/packages/packages.mk | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 depends/packages/curl.mk diff --git a/depends/packages/curl.mk b/depends/packages/curl.mk new file mode 100644 index 0000000000..ba0e20a048 --- /dev/null +++ b/depends/packages/curl.mk @@ -0,0 +1,22 @@ +package=curl +$(package)_version=7.55.0 +$(package)_download_path=https://curl.haxx.se/download/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=dae1b1be34f5983e8d46917f2bdbb2335aecd0e57f777f4c32213da6a8050a80 +define $(package)_set_vars + $(package)_config_opts=--disable-shared + $(package)_config_opts+= --enable-static + $(package)_config_opts_release+=--disable-debug-mode + $(package)_config_opts_linux+=--with-pic +endef +define $(package)_config_cmds + $($(package)_autoconf) +endef +define $(package)_build_cmds + $(MAKE) +endef +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef +define $(package)_postprocess_cmds +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index fd47ff10a8..70f057fb46 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,4 +1,4 @@ -packages:=boost openssl +packages:=boost openssl curl native_packages := native_ccache qt_packages = qrencode zlib From b3b876ade014b27f72b557e422fb3d0cdabe678e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 8 Nov 2018 03:59:59 -0500 Subject: [PATCH 005/359] Some tweaks and impl of GetConsensusBeaconList() This changes the standalone flag to preprocessor macros to eliminate the reference to jsoncpp when compiled in the wallet, to avoid the jsoncpp dependency. This also is the first implementation of GetConsensusBeaconList(). It isn't used yet. --- src/ScraperProxy/scraper.cpp | 28 +++-- src/ScraperProxy/scraper.h | 200 +++++++++++++++++------------------ src/beacon.h | 10 ++ src/main.cpp | 36 +++++++ src/main.h | 1 + 5 files changed, 158 insertions(+), 117 deletions(-) mode change 100644 => 100755 src/beacon.h mode change 100644 => 100755 src/main.h diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 6fc5f8ae5c..e12ab9a5d4 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -9,11 +9,11 @@ std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); -bool WhitelistPopulated(bool fScraperStandalone); +bool WhitelistPopulated(); bool UserpassPopulated(); -bool DownloadProjectTeamFiles(bool fScraperStandalone); +bool DownloadProjectTeamFiles(); int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag); -bool DownloadProjectRacFiles(bool fScraperStandalone); +bool DownloadProjectRacFiles(); bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid); bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); void AuthenticationETagClear(); @@ -42,7 +42,7 @@ void Scraper(bool fScraperStandalone) gridcoinrpc data; - int64_t sbage = data.sbage(fScraperStandalone); + int64_t sbage = data.sbage(); // Give 300 seconds before superblock needed before we sync if (sbage <= 86100 && sbage >= 0) @@ -53,7 +53,7 @@ void Scraper(bool fScraperStandalone) else { - if (!data.wlimport(fScraperStandalone)) + if (!data.wlimport()) _log(WARNING, "main", "Refreshing of whitelist failed.. using old data"); else @@ -61,9 +61,9 @@ void Scraper(bool fScraperStandalone) AuthenticationETagClear(); - DownloadProjectTeamFiles(fScraperStandalone); + DownloadProjectTeamFiles(); - DownloadProjectRacFiles(fScraperStandalone); + DownloadProjectRacFiles(); } @@ -254,7 +254,7 @@ void _nntester(logattribute eType, const std::string& sCall, const std::string& * Populate Whitelist * **********************/ -bool WhitelistPopulated(bool fScraperStandalone) +bool WhitelistPopulated() { if (vwhitelist.empty()) { @@ -262,7 +262,7 @@ bool WhitelistPopulated(bool fScraperStandalone) gridcoinrpc data; - if (data.wlimport(fScraperStandalone)) + if (data.wlimport()) _log(INFO, "WhitelistPopulated", "Successfully populated whitelist vector"); else @@ -318,11 +318,11 @@ bool UserpassPopulated() * Project Team Files * **********************/ -bool DownloadProjectTeamFiles(bool fScraperStandalone) +bool DownloadProjectTeamFiles() { vprojectteamids.clear(); - if (!WhitelistPopulated(fScraperStandalone)) + if (!WhitelistPopulated()) { _log(CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); @@ -658,9 +658,9 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) * Project RAC Files * **********************/ -bool DownloadProjectRacFiles(bool fScraperStandalone) +bool DownloadProjectRacFiles() { - if (!WhitelistPopulated(fScraperStandalone)) + if (!WhitelistPopulated()) { _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); @@ -1012,6 +1012,4 @@ void testdata(const std::string& etag) { printf("data: %s\n", line.c_str()); } - - } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index d10f94de36..c999333680 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -21,14 +21,15 @@ //#include #include #include -//#include -#include #include "appcache.h" +#include "beacon.h" #ifndef SCRAPER_STANDALONE #include "util.h" #else +#include +//#include extern int64_t GetAdjustedTime(); extern bool Contains(const std::string& data, const std::string& instring); #endif @@ -73,6 +74,7 @@ std::string rpcauth = "boinc:test"; std::string rpcip = "http://127.0.0.1:9334/"; int64_t ndownloadsize = 0; int64_t nuploadsize = 0; + /********************* * Scraper * *********************/ @@ -605,145 +607,139 @@ class gridcoinrpc ~gridcoinrpc() {} - bool wlimport(bool fScraperStandalone) + bool wlimport() { - if(fScraperStandalone) - { - whitelistrpcdata = ""; - Json::Value jsonvalue; - Json::Reader jsonreader; - Json::StreamWriterBuilder valuestring; - Json::Value::const_iterator jsondata; - // Call RPC for the data - statscurl wl; - - if (!wl.rpccall("listdata", "project", whitelistrpcdata)) - { - _log(ERROR, "whitelist_data_import", "Failed to receive RPC reply for whitelist data"); +#ifdef SCRAPER_STANDALONE + whitelistrpcdata = ""; + Json::Value jsonvalue; + Json::Reader jsonreader; + Json::StreamWriterBuilder valuestring; + Json::Value::const_iterator jsondata; + // Call RPC for the data + statscurl wl; - return false; - } + if (!wl.rpccall("listdata", "project", whitelistrpcdata)) + { + _log(ERROR, "whitelist_data_import", "Failed to receive RPC reply for whitelist data"); - if (whitelistrpcdata.find("\"result\":null") != std::string::npos) - { - _log(ERROR, "whitelist_data_import", "RPC replied with error (" + whitelistrpcdata + ")"); + return false; + } - return false; - } + if (whitelistrpcdata.find("\"result\":null") != std::string::npos) + { + _log(ERROR, "whitelist_data_import", "RPC replied with error (" + whitelistrpcdata + ")"); - // Try to parse json data. + return false; + } - bool successparse = jsonreader.parse(whitelistrpcdata, jsonvalue); + // Try to parse json data. - if (!successparse) - { - printf("Failed to parse\n"); - return false; - } + bool successparse = jsonreader.parse(whitelistrpcdata, jsonvalue); - const Json::Value whitelist = jsonvalue["result"]; + if (!successparse) + { + printf("Failed to parse\n"); + return false; + } - // Populate the beacon report data into scraper since we got a reply of whitelist - vwhitelist.clear(); + const Json::Value whitelist = jsonvalue["result"]; - for (jsondata = whitelist.begin() ; jsondata != whitelist.end(); jsondata++) - { + // Populate the beacon report data into scraper since we got a reply of whitelist + vwhitelist.clear(); - valuestring.settings_["indentation"] = ""; - std::string outurl = Json::writeString(valuestring, *jsondata); + for (jsondata = whitelist.begin() ; jsondata != whitelist.end(); jsondata++) + { - if (jsondata.key().asString() == "Key Type") - continue; + valuestring.settings_["indentation"] = ""; + std::string outurl = Json::writeString(valuestring, *jsondata); - vwhitelist.push_back(std::make_pair(jsondata.key().asString(), outurl.substr(1, (outurl.size() - 2)))); - } + if (jsondata.key().asString() == "Key Type") + continue; - return true; + vwhitelist.push_back(std::make_pair(jsondata.key().asString(), outurl.substr(1, (outurl.size() - 2)))); } - else - { - vwhitelist.clear(); - for(const auto& item : ReadCacheSection("project")) - vwhitelist.push_back(std::make_pair(item.first, item.second.value)); + return true; +#else + vwhitelist.clear(); + + for(const auto& item : ReadCacheSection("project")) + vwhitelist.push_back(std::make_pair(item.first, item.second.value)); - return true; - } + return true; +#endif } - int64_t sbage(bool fScraperStandalone) + int64_t sbage() { - if (fScraperStandalone) +#ifdef SCRAPER_STANDALONE + Json::Value jsonvalue; + Json::Reader jsonreader; + Json::StreamWriterBuilder valuestring; + Json::Value::const_iterator jsondata; + superblockage = ""; + // Call RPC for the data + statscurl age; + + if (!age.rpccall("superblockage", "", superblockage)) { - Json::Value jsonvalue; - Json::Reader jsonreader; - Json::StreamWriterBuilder valuestring; - Json::Value::const_iterator jsondata; - superblockage = ""; - // Call RPC for the data - statscurl age; - - if (!age.rpccall("superblockage", "", superblockage)) - { - _log(ERROR, "superblockage_data_import", "Failed to receive RPC reply for superblock data"); + _log(ERROR, "superblockage_data_import", "Failed to receive RPC reply for superblock data"); - return -1; - } + return -1; + } - if (superblockage.find("\"result\":null") != std::string::npos) - { - _log(ERROR, "superblockage_data_import", "RPC replied with error (" + superblockage + ")"); + if (superblockage.find("\"result\":null") != std::string::npos) + { + _log(ERROR, "superblockage_data_import", "RPC replied with error (" + superblockage + ")"); - return -2; - } + return -2; + } - // Try to parse json data. + // Try to parse json data. - bool successparse = jsonreader.parse(superblockage, jsonvalue); + bool successparse = jsonreader.parse(superblockage, jsonvalue); - if (!successparse) - { - printf("Failed to parse\n"); - return -3; - } + if (!successparse) + { + printf("Failed to parse\n"); + return -3; + } - try - { - const Json::Value superblockdata = jsonvalue["result"]; + try + { + const Json::Value superblockdata = jsonvalue["result"]; - for (jsondata = superblockdata.begin() ; jsondata != superblockdata.end(); jsondata++) - { + for (jsondata = superblockdata.begin() ; jsondata != superblockdata.end(); jsondata++) + { - valuestring.settings_["indentation"] = ""; - std::string sSBage = Json::writeString(valuestring, *jsondata); + valuestring.settings_["indentation"] = ""; + std::string sSBage = Json::writeString(valuestring, *jsondata); - if (jsondata.key().asString() == "Superblock Age") - { - printf("Outage is %s\n", sSBage.c_str()); + if (jsondata.key().asString() == "Superblock Age") + { + printf("Outage is %s\n", sSBage.c_str()); - return std::stoll(sSBage); - } + return std::stoll(sSBage); } - - return -4; - } - - catch (std::exception& ex) - { - _log(ERROR, "superblockage_data_import", "Exception occured (" + std::string(ex.what()) + ")"); - - return -5; } - return -6; + return -4; } - else + + catch (std::exception& ex) { - int64_t superblock_time = ReadCache("superblock", "magnitudes").timestamp; - int64_t nSBage = GetAdjustedTime() - superblock_time; + _log(ERROR, "superblockage_data_import", "Exception occured (" + std::string(ex.what()) + ")"); - return nSBage; + return -5; } + + return -6; +#else + int64_t superblock_time = ReadCache("superblock", "magnitudes").timestamp; + int64_t nSBage = GetAdjustedTime() - superblock_time; + + return nSBage; +#endif } }; diff --git a/src/beacon.h b/src/beacon.h old mode 100644 new mode 100755 index 92e14d77b9..37d4844d00 --- a/src/beacon.h +++ b/src/beacon.h @@ -6,6 +6,7 @@ #include "fwd.h" #include +#include //! //! \brief Generate beacon key pair. @@ -59,3 +60,12 @@ bool VerifyBeaconContractTx(const CTransaction& tx); //! \return \c false on failure. //! bool ImportBeaconKeysFromConfig(const std::string& cpid, CWallet* wallet); + +// This is modelled after AppCacheEntry/Section but named separately. +struct BeaconEntry +{ + std::string value; //!< Value of entry. + int64_t timestamp; //!< Timestamp of entry. +}; + +typedef std::map BeaconMap; diff --git a/src/main.cpp b/src/main.cpp index 42ee39d04a..a9eac7c306 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -5216,6 +5216,42 @@ std::string getfilecontents(std::string filename) } + +BeaconMap GetConsensusBeaconList() +{ + BeaconMap mBeaconMap; + + BlockFinder MaxConsensusLadder; + + CBlockIndex* pMaxConsensusLadder = MaxConsensusLadder.FindByHeight((pindexBest->nHeight - CONSENSUS_LOOKBACK) + - (pindexBest->nHeight - CONSENSUS_LOOKBACK) % BLOCK_GRANULARITY); + const int64_t maxTime = pMaxConsensusLadder->nTime; + const int64_t minTime = maxTime - BEACON_LOOKBACK; + + for(const auto& item : ReadCacheSection("beacon")) + { + const std::string& key = item.first; + BeaconEntry beaconentry; + + beaconentry.timestamp = item.second.timestamp; + beaconentry.value = item.second.value; + + // Compare age restrictions if specified. + if((minTime && beaconentry.timestamp <= minTime) || + (maxTime && beaconentry.timestamp >= maxTime)) + continue; + + // Skip invalid beacons. + if (Contains("INVESTOR", beaconentry.value)) + continue; + + mBeaconMap[key] = beaconentry; + } + + return mBeaconMap; +} + + bool IsCPIDValidv3(std::string cpidv2, bool allow_investor) { // Used for checking the local cpid diff --git a/src/main.h b/src/main.h old mode 100644 new mode 100755 index 3f553aeb23..e7dc32cf9d --- a/src/main.h +++ b/src/main.h @@ -33,6 +33,7 @@ extern unsigned int WHITELISTED_PROJECTS; static const int CONSENSUS_LOOKBACK = 5; //Amount of blocks to go back from best block, to avoid counting forked blocks static const int BLOCK_GRANULARITY = 10; //Consensus block divisor static const int TALLY_GRANULARITY = BLOCK_GRANULARITY; +static const int64_t BEACON_LOOKBACK = 30 * 6 * 86400; // 180 days in seconds static const int64_t DEFAULT_CBR = 10 * COIN; static const double NeuralNetworkMultiplier = 115000; From d6141555321ce164f444bcd234481f5007eb055e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 10 Nov 2018 23:12:08 -0500 Subject: [PATCH 006/359] Implementation of filtering by beacon CPID This is the initial pass at doing the stats by active beacons in the 180 day window instead of by team. The beginnings of the hashing are also in here, although the hashes are just being sent to the log and not persisted to disk yet. I have also created a manifest structure, but not done anything with it yet. Note that the standalone compile is broken at the moment, because I have not written an rpc version of GetConsensusBeaconList(). --- src/ScraperProxy/scraper.cpp | 466 +++++++++++++++++++++++++++++++++-- src/ScraperProxy/scraper.h | 13 +- 2 files changed, 464 insertions(+), 15 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index e12ab9a5d4..3a71171f6f 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -8,13 +8,16 @@ std::string lowercase(std::string s); std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); +Manifest mManifest; bool WhitelistPopulated(); bool UserpassPopulated(); bool DownloadProjectTeamFiles(); int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag); bool DownloadProjectRacFiles(); +bool DownloadProjectRacFilesByCPID(); bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid); +bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag); bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); void AuthenticationETagClear(); @@ -33,6 +36,8 @@ unsigned int nScraperSleep = 60000; boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); +extern BeaconMap GetConsensusBeaconList(); + void Scraper(bool fScraperStandalone) { @@ -42,10 +47,13 @@ void Scraper(bool fScraperStandalone) gridcoinrpc data; + StoreBeaconList(pathScraper / "BeaconList.csv.gz"); + int64_t sbage = data.sbage(); // Give 300 seconds before superblock needed before we sync - if (sbage <= 86100 && sbage >= 0) + if (//sbage <= 86100 && sbage >= 0 + false) _log(INFO, "main", "Superblock not needed. age=" + std::to_string(sbage)); else if (sbage <= -1) @@ -61,9 +69,11 @@ void Scraper(bool fScraperStandalone) AuthenticationETagClear(); - DownloadProjectTeamFiles(); + //DownloadProjectTeamFiles(); + + //DownloadProjectRacFiles(); - DownloadProjectRacFiles(); + DownloadProjectRacFilesByCPID(); } @@ -250,6 +260,27 @@ void _nntester(logattribute eType, const std::string& sCall, const std::string& return; } + +// Insert entry into Manifest +bool InsertManifestEntry(ManifestEntry entry) +{ + // This less readable form is so we know whether the element already existed or not. + std::pair ret; + ret = mManifest.insert(std::make_pair(entry.hash, entry)); + + // True if insert was sucessful, false if entry with key (hash) already exists in map. + return ret.second; +} + +// Delete entry from Manifest +unsigned int DeleteManifestEntry(ManifestEntry entry) +{ + unsigned int ret = mManifest.erase(entry.hash); + + // Returns number of elements erased, either 0 or 1. + return ret; +} + /********************** * Populate Whitelist * **********************/ @@ -481,7 +512,7 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) out.push(boostio::gzip_compressor()); std::stringstream stream; - _log(INFO, "ProccessProjectTeamFile", "Started processing " + file.string()); + _log(INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); stringbuilder outdata; outdata.nlappend(""); @@ -587,8 +618,8 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) return false; } - _log(INFO, "ProccessProjectTeamFile", "Finished processing " + file.string()); - _log(INFO, "ProccessProjectTeamFile", "Started processing team data and stripping"); + _log(INFO, "ProcessProjectTeamFile", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectTeamFile", "Started processing team data and stripping"); // Strip the team xml data to contain only what we need to be compressed from vector // We Need: @@ -616,7 +647,7 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) steamid = sid; } - _log(INFO, "ProccessProjectTeamFile", "Finished processing team rac data; stripping complete"); + _log(INFO, "ProcessProjectTeamFile", "Finished processing team rac data; stripping complete"); out.push(stream); boost::iostreams::copy(out, outgzfile); @@ -624,7 +655,7 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) outgzfile.flush(); outgzfile.close(); - _log(INFO, "ProccessProjectTeamFile", "Complete Process"); + _log(INFO, "ProcessProjectTeamFile", "Complete Process"); try { @@ -689,7 +720,7 @@ bool DownloadProjectRacFiles() // if (fs::exists(rac_file)) // fs::remove(rac_file); - // Grab ETag of team file + // Grab ETag of rac file statscurl racetagcurl; std::string sRacETag; @@ -806,6 +837,158 @@ bool DownloadProjectRacFiles() return true; } + + +bool DownloadProjectRacFilesByCPID() +{ + if (!WhitelistPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); + + return false; + } + + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); + + std::vector vPrjUrl = split(prjs.second, "@"); + + std::string sUrl = urlsanity(vPrjUrl[0], "user"); + + std::string rac_file_name = prjs.first + +"-user.gz"; + + fs::path rac_file = pathScraper / rac_file_name.c_str(); + +// if (fs::exists(rac_file)) +// fs::remove(rac_file); + + // Grab ETag of rac file + statscurl racetagcurl; + std::string sRacETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) + { + buserpass = true; + + userpass = up.second; + + break; + } + } + + if (buserpass) + { + if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + } + + else + if (!racetagcurl.http_header(sUrl, sRacETag)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + + if (sRacETag.empty()) + { + _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); + + continue; + } + + else + _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); + + if (buserpass) + { + authdata ad(lowercase(prjs.first)); + + ad.setoutputdata("user", prjs.first, sRacETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } + + std::string chketagfile = prjs.first + "-" + sRacETag + "-ByCPID" + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); + + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + continue; + } + + else + fs::remove(chkfile); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + statscurl raccurl; + + if (buserpass) + { + if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } + } + + else + if (!raccurl.http_download(sUrl, rac_file.string())) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } +/* + int64_t team_id = 0; + + for (auto const& vprj : vprojectteamids) + { + if (vprj.first != prjs.first) + continue; + + else + team_id = vprj.second; + } + + if (team_id == 0) + { + _log(ERROR, "DownloadProjectRacFiles", "TEAM ID was not found for project " + prjs.first); + + continue; + } +*/ //ProcessProjectRacFile(rac_file.string(), sRacETag, team_id); + ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); + } + + return true; +} + + bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid) { std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); @@ -841,7 +1024,7 @@ bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_ out.push(boostio::gzip_compressor()); std::stringstream stream; - _log(INFO, "ProccessProjectRacFile", "Started processing " + file.string()); + _log(INFO, "ProcessProjectRacFile", "Started processing " + file.string()); stringbuilder outdata; outdata.nlappend(""); @@ -927,8 +1110,8 @@ bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_ return false; } - _log(INFO, "ProccessProjectRacFile", "Finished processing " + file.string()); - _log(INFO, "ProccessProjectRacFile", "Started processing team rac data and stripping"); + _log(INFO, "ProcessProjectRacFile", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectRacFile", "Started processing team rac data and stripping"); // Strip the team rac xml data to contain only why we need to be compressed from vector // We Need: @@ -964,7 +1147,7 @@ bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_ stream << xmlout.value(); - _log(INFO, "ProccessProjectRacFile", "Finished processing team rac data; stripping complete"); + _log(INFO, "ProcessProjectRacFile", "Finished processing team rac data; stripping complete"); out.push(stream); boost::iostreams::copy(out, outgzfile); @@ -992,11 +1175,220 @@ bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_ fs::remove(file); - _log(INFO, "ProccessProjectRacFile", "Complete Process"); + _log(INFO, "ProcessProjectRacFile", "Complete Process"); return true; } + +// This version uses a consensus beacon map rather than the teamid to filter statistics. +bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag) +{ + // Get a consensus map of Beacons. + BeaconMap mBeaconMap = GetConsensusBeaconList(); + + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "ProcessProjectRacFileByCPID", "Failed to open rac gzip file (" + file.string() + ")"); + + return false; + } + + _log(INFO, "ProcessProjectRacFileByCPID", "Opening rac file (" + file.string() + ")"); + + boostio::filtering_istream in; + + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string gzetagfile = ""; + + // If einstein we store different + if (file.string().find("einstein") != std::string::npos) + gzetagfile = "einstein_user.gz"; + + else + gzetagfile = project + "-" + etag + "-ByCPID" + ".gz"; + + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + + std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "ProcessProjectRacFileByCPID", "Started processing " + file.string()); + + stringbuilder outdata; + outdata.nlappend(""); + stream << outdata.value(); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find users block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder userdata; + + userdata.nlappend(line); + + while (std::getline(in, line)) + { + if (line == "") + { + userdata.nlappend(line); + + // This uses the beacon map rather than the teamid to select the statistics. + if (mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) + vXML.push_back(userdata.value()); + + break; + } + + userdata.nlcleanappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + if (bfileerror) + { + _log(CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); + + std::string efile = etag + ".gz"; + fs::path fsepfile = pathScraper/ efile; + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + if (fs::exists(fsepfile)) + fs::remove(fsepfile); + + if (fs::exists(file)) + fs::remove(file); + + return false; + } + + _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectRacFileByCPID", "Started processing CPID rac data and stripping"); + + // Strip the rac xml data to contain only why we need to be compressed from vector + // We Need: + // total_credit, expavg_time, expavg_credit, teamid, cpid + // We Don't need: + // id, country, name, url + // In reality we DO NOT need total_credit till TCD + // In reality we DO NOT need expavg_time but this will make nn compatible + // I've also opted to save 1 byte a line by not doing newlines since this a scraper + + stringbuilder xmlout; + + xmlout.nlappend(""); + + for (auto const& vv : vXML) + { + std::string stotal_credit = ExtractXML(vv, "", ""); + std::string sexpavg_time = ExtractXML(vv, "", ""); + std::string sexpavg_credit = ExtractXML(vv, "", ""); + std::string scpid = ExtractXML(vv, "", ""); + + xmlout.nlappend(""); + xmlout.xmlappend("total_credit", stotal_credit); + xmlout.xmlappend("expavg_time", sexpavg_time); + xmlout.xmlappend("expavg_credit", sexpavg_credit); + xmlout.xmlappend("cpid", scpid); + xmlout.nlappend(""); + } + + xmlout.nlappend(""); + + stream << xmlout.value(); + + _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing team rac data; stripping complete"); + + out.push(stream); + + std::string sHashCheck; + out >> sHashCheck; + + CHashWriter ss(0,0); + + ss << sHashCheck; + + uint256 nFileHash = ss.GetHash(); + + _log(INFO, "ProcessProjectRacFileByCPID", "FileHash " + nFileHash.ToString()); + + boost::iostreams::copy(out, outgzfile); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + try + { + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectRacFileByCPID", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; + + } + + catch (fs::filesystem_error& e) + { + _log(INFO, "ProcessProjectRacFileByCPID", "FS Error -> " + std::string(e.what())); + } + + fs::remove(file); + + _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); + + return true; +} + + + void testdata(const std::string& etag) { std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).c_str(), std::ios_base::in | std::ios_base::binary); @@ -1013,3 +1405,49 @@ void testdata(const std::string& etag) printf("data: %s\n", line.c_str()); } } + + +bool StoreBeaconList(const fs::path& file) +{ + if (fs::exists(file)) + fs::remove(file); + + std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + + if (!outgzfile) + { + _log(ERROR, "StoreBeaconList", "Failed to open beacon list gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "StoreBeaconList", "Started processing " + file.string()); + + stringbuilder outdata; + + BeaconMap mBeaconMap = GetConsensusBeaconList(); + + _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection("beacon").size())); + _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); + + for (auto const& entry : mBeaconMap) + { + std::string sBeaconEntry = entry.first + "," + std::to_string(entry.second.timestamp) + "," + entry.second.value + "\n"; + stream << sBeaconEntry; + } + + _log(INFO, "StoreBeaconList", "Finished processing beacon data from map."); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "StoreBeaconList", "Process Complete."); + + return true; +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index c999333680..50b22c84a9 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -58,6 +58,7 @@ enum logattribute { void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); +bool StoreBeaconList(const fs::path& file); std::vector split(const std::string& s, const std::string& delim); extern AppCacheSection ReadCacheSection(const std::string& section); @@ -75,6 +76,16 @@ std::string rpcip = "http://127.0.0.1:9334/"; int64_t ndownloadsize = 0; int64_t nuploadsize = 0; +struct ManifestEntry +{ + uint256 hash; // hash of file + std::string filename; // Filename + int64_t timestamp; +}; + +typedef std::map Manifest; + + /********************* * Scraper * *********************/ @@ -156,7 +167,7 @@ class statscurl _log(ERROR, "httpcode", "Server returned a http code of Bad Request "); else if (response == "401") - _log(ERROR, "httpcode", "Server returned a http code of Unauthroized "); + _log(ERROR, "httpcode", "Server returned a http code of Unauthorized "); else if (response == "403") _log(ERROR, "httpcode", "Server returned a http code of Forbidden "); From ba46e237a563898974c725233786d3cfae6eae00 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 12 Nov 2018 17:42:59 -0500 Subject: [PATCH 007/359] Initial implementation of manifest list This implements a manifest list and includes the file hashes. It is crude. It does not look for the existence of files already in the folder, etc. Will look to improve. I also implemented a separate GetFileHash() function for file hashing that is similar to the one in db.cpp for peers.dat. --- src/ScraperProxy/scraper.cpp | 165 +++++++++++++++++++++++++++++------ src/ScraperProxy/scraper.h | 4 + 2 files changed, 141 insertions(+), 28 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 3a71171f6f..d4ea18c9d8 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -41,31 +41,37 @@ extern BeaconMap GetConsensusBeaconList(); void Scraper(bool fScraperStandalone) { + + //uint256 nBeaconListHash, nPrevBeaconListHash; + //uint256 nManifestHash, nPreviousManifestHash; + while (fScraperStandalone || !fShutdown) { - // Refresh the whitelist if its available - gridcoinrpc data; - StoreBeaconList(pathScraper / "BeaconList.csv.gz"); + if(!StoreBeaconList(pathScraper / "BeaconList.csv.gz")) + _log(ERROR, "Scraper", "StoreBeaconList error occurred"); + else + _log(INFO, "Scraper", "Stored Beacon List"); int64_t sbage = data.sbage(); // Give 300 seconds before superblock needed before we sync if (//sbage <= 86100 && sbage >= 0 false) - _log(INFO, "main", "Superblock not needed. age=" + std::to_string(sbage)); + _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); else if (sbage <= -1) - _log(ERROR, "main", "RPC error occured, check logs"); + _log(ERROR, "Scraper", "RPC error occured, check logs"); else { + // Refresh the whitelist if its available if (!data.wlimport()) - _log(WARNING, "main", "Refreshing of whitelist failed.. using old data"); + _log(WARNING, "Scraper", "Refreshing of whitelist failed.. using old data"); else - _log(INFO, "main", "Refreshing of whitelist completed"); + _log(INFO, "Scraper", "Refreshing of whitelist completed"); AuthenticationETagClear(); @@ -74,12 +80,16 @@ void Scraper(bool fScraperStandalone) //DownloadProjectRacFiles(); DownloadProjectRacFilesByCPID(); - + + if(!StoreManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "StoreManifest error occurred"); + else + _log(INFO, "Scraper", "Stored Manifest"); } - _nntester(INFO, "MAIN", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); + _nntester(INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); - _log(INFO, "MAIN", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); MilliSleep(nScraperSleep); } @@ -1346,21 +1356,39 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil out.push(stream); - std::string sHashCheck; - out >> sHashCheck; + // Copy out to file. + boost::iostreams::copy(out, outgzfile); - CHashWriter ss(0,0); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); - ss << sHashCheck; + // Hash the file. - uint256 nFileHash = ss.GetHash(); + /* + std::ifstream strm(gzetagfile, std::ios::binary); - _log(INFO, "ProcessProjectRacFileByCPID", "FileHash " + nFileHash.ToString()); + std::ostringstream sstream; + sstream << strm.rdbuf(); + const std::string str(sstream.str()); + + strm.close(); + + // Verify the string is not messing things up. + //std::ofstream ostrm(gzetagfile + ".out", std::ios::binary); + //ostrm << str; + //ostrm.flush(); + //ostrm.close(); + + CHashWriter ss(0,0); + ss << str; + uint256 nFileHash = ss.GetHash(); + _log(INFO, "ProcessProjectRacFileByCPID", "FileHash by CHashWriter " + nFileHash2.ToString()); + */ + + uint256 nFileHash = GetFileHash(gzetagfile); + _log(INFO, "ProcessProjectRacFileByCPID", "FileHash by GetFileHash " + nFileHash.ToString()); - boost::iostreams::copy(out, outgzfile); - ingzfile.close(); - outgzfile.flush(); - outgzfile.close(); try { @@ -1382,6 +1410,17 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::remove(file); + ManifestEntry ManifestEntry; + + ManifestEntry.hash = nFileHash; + ManifestEntry.filename = gzetagfile; + ManifestEntry.timestamp = GetAdjustedTime(); + + if(!InsertManifestEntry(ManifestEntry)) + _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); + else + _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); + _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); return true; @@ -1389,6 +1428,37 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil + + +uint256 GetFileHash(const fs::path& inputfile) +{ + // open input file, and associate with CAutoFile + FILE *file = fopen(inputfile.string().c_str(), "rb"); + CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); + if (!filein) + return error("FileHash() : open failed"); + + // use file size to size memory buffer + int fileSize = boost::filesystem::file_size(inputfile); + int dataSize = fileSize - sizeof(uint256); + // Don't try to resize to a negative number if file is small + if ( dataSize < 0 ) dataSize = 0; + std::vector vchData; + vchData.resize(dataSize); + + filein.fclose(); + + CDataStream ssFile(vchData, SER_DISK, CLIENT_VERSION); + + uint256 nHash = Hash(ssFile.begin(), ssFile.end()); + + return nHash; +} + + + + + void testdata(const std::string& etag) { std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).c_str(), std::ios_base::in | std::ios_base::binary); @@ -1409,10 +1479,15 @@ void testdata(const std::string& etag) bool StoreBeaconList(const fs::path& file) { + BeaconMap mBeaconMap = GetConsensusBeaconList(); + + _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection("beacon").size())); + _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); + if (fs::exists(file)) fs::remove(file); - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -1427,13 +1502,6 @@ bool StoreBeaconList(const fs::path& file) _log(INFO, "StoreBeaconList", "Started processing " + file.string()); - stringbuilder outdata; - - BeaconMap mBeaconMap = GetConsensusBeaconList(); - - _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection("beacon").size())); - _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); - for (auto const& entry : mBeaconMap) { std::string sBeaconEntry = entry.first + "," + std::to_string(entry.second.timestamp) + "," + entry.second.value + "\n"; @@ -1451,3 +1519,44 @@ bool StoreBeaconList(const fs::path& file) return true; } + + +bool StoreManifest(const fs::path& file) +{ + if (fs::exists(file)) + fs::remove(file); + + std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + + if (!outgzfile) + { + _log(ERROR, "StoreManifest", "Failed to open manifest gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "StoreManifest", "Started processing " + file.string()); + + for (auto const& entry : mManifest) + { + uint256 nEntryHash = entry.first; + + std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.second.filename + "\n"; + stream << sManifestEntry; + } + + _log(INFO, "StoreManifest", "Finished processing manifest from map."); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "StoreManifest", "Process Complete."); + + return true; +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 50b22c84a9..f89db09c63 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -18,8 +18,10 @@ #include #include #include +#include //#include #include +#include #include #include "appcache.h" @@ -61,6 +63,8 @@ void _nntester(logattribute eType, const std::string& sCall, const std::string& bool StoreBeaconList(const fs::path& file); std::vector split(const std::string& s, const std::string& delim); extern AppCacheSection ReadCacheSection(const std::string& section); +uint256 GetFileHash(const fs::path& inputfile); +bool StoreManifest(const fs::path& file); /********************* * Global Vars * From f42ca7216f2197cac558b2fba2674538676985f7 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 14 Nov 2018 13:54:16 -0500 Subject: [PATCH 008/359] Implementation of Manifest persistence to disk. --- src/ScraperProxy/scraper.cpp | 71 ++++++++++++++++++++++++++++++++---- src/ScraperProxy/scraper.h | 1 + 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index d4ea18c9d8..b14773e918 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -42,8 +42,13 @@ extern BeaconMap GetConsensusBeaconList(); void Scraper(bool fScraperStandalone) { - //uint256 nBeaconListHash, nPrevBeaconListHash; - //uint256 nManifestHash, nPreviousManifestHash; + // This loads the manifest file from the Scraper directory for persistence. + + _log(INFO, "Scraper", "Loading Manifest"); + if(!LoadManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "Error occurred loading manifest"); + else + _log(INFO, "Scraper", "Loaded Manifest file into map."); while (fScraperStandalone || !fShutdown) { @@ -80,11 +85,6 @@ void Scraper(bool fScraperStandalone) //DownloadProjectRacFiles(); DownloadProjectRacFilesByCPID(); - - if(!StoreManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "StoreManifest error occurred"); - else - _log(INFO, "Scraper", "Stored Manifest"); } _nntester(INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); @@ -1421,6 +1421,16 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil else _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. I could + // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of + // sync if the wallet is ended during the middle of pulling the files. + _log(INFO, "Scraper", "Persisting manifest entry to disk."); + if(!StoreManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "StoreManifest error occurred"); + else + _log(INFO, "Scraper", "Stored Manifest"); + _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); return true; @@ -1560,3 +1570,50 @@ bool StoreManifest(const fs::path& file) return true; } + + +bool LoadManifest(const fs::path& file) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "LoadManifest", "Failed to open manifest gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string line; + + ManifestEntry LoadEntry; + + int64_t ntimestamp; + + while (std::getline(in, line)) + { + + std::vector vline = split(line, ","); + + //std::istringstream sshash(vline[0]); + //sshash >> nhash; + //LoadEntry.hash = nhash; + + uint256 nhash; + nhash.SetHex(vline[0].c_str()); + LoadEntry.hash = nhash; + + std::istringstream sstimestamp(vline[1]); + sstimestamp >> ntimestamp; + LoadEntry.timestamp = ntimestamp; + + LoadEntry.filename = vline[2]; + + InsertManifestEntry(LoadEntry); + } + + return true; +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index f89db09c63..524a8acfb9 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -65,6 +65,7 @@ std::vector split(const std::string& s, const std::string& delim); extern AppCacheSection ReadCacheSection(const std::string& section); uint256 GetFileHash(const fs::path& inputfile); bool StoreManifest(const fs::path& file); +bool LoadManifest(const fs::path& file); /********************* * Global Vars * From 1670676f02f236a2912814048ae05d70110e09ad Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 14 Nov 2018 16:08:12 -0500 Subject: [PATCH 009/359] Moving team functions to obsolete file Also remove local path from filename in manifest entries. --- src/ScraperProxy/scraper.cpp | 1223 +++++-------------------- src/ScraperProxy/scraper.h | 22 +- src/ScraperProxy/scraper_obsolete.cpp | 714 +++++++++++++++ 3 files changed, 971 insertions(+), 988 deletions(-) create mode 100755 src/ScraperProxy/scraper_obsolete.cpp diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index b14773e918..102897f4ff 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -12,20 +12,16 @@ Manifest mManifest; bool WhitelistPopulated(); bool UserpassPopulated(); -bool DownloadProjectTeamFiles(); -int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag); -bool DownloadProjectRacFiles(); bool DownloadProjectRacFilesByCPID(); -bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid); bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag); bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); void AuthenticationETagClear(); // No header storage by day number gz -bool xDownloadProjectTeamFiles(); -int64_t xProcessProjectTeamFile(const fs::path& file); -bool xDownloadProjectRacFiles(); -bool xProcessProjectRacFile(const fs::path& file, int64_t teamid); +// bool xDownloadProjectTeamFiles(); +// int64_t xProcessProjectTeamFile(const fs::path& file); +// bool xDownloadProjectRacFiles(); +// bool xProcessProjectRacFile(const fs::path& file, int64_t teamid); int GetDayOfYear(int64_t timestamp); void testdata(const std::string& etag); @@ -38,10 +34,9 @@ boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); extern BeaconMap GetConsensusBeaconList(); - +// This is the scraper thread... void Scraper(bool fScraperStandalone) { - // This loads the manifest file from the Scraper directory for persistence. _log(INFO, "Scraper", "Loading Manifest"); @@ -143,29 +138,6 @@ std::string lowercase(std::string s) return s; } -int64_t teamid(const std::string& xmldata) -{ - std::string sXML = xmldata; // copy so we can iterate this. - - while (!sXML.empty()) - { - size_t loca = sXML.find(""); - size_t locb = sXML.find(""); - - std::string substr = sXML.substr(loca, locb + 7); - - if (lowercase(ExtractXML(substr, "", "", ""); - - return std::stol(teamidstr); - } - - sXML = sXML.substr(locb + 7, sXML.size()); - } - - return 0; -} std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end) { @@ -271,26 +243,6 @@ void _nntester(logattribute eType, const std::string& sCall, const std::string& } -// Insert entry into Manifest -bool InsertManifestEntry(ManifestEntry entry) -{ - // This less readable form is so we know whether the element already existed or not. - std::pair ret; - ret = mManifest.insert(std::make_pair(entry.hash, entry)); - - // True if insert was sucessful, false if entry with key (hash) already exists in map. - return ret.second; -} - -// Delete entry from Manifest -unsigned int DeleteManifestEntry(ManifestEntry entry) -{ - unsigned int ret = mManifest.erase(entry.hash); - - // Returns number of elements erased, either 0 or 1. - return ret; -} - /********************** * Populate Whitelist * **********************/ @@ -355,153 +307,165 @@ bool UserpassPopulated() return true; } + + /********************** -* Project Team Files * +* Project RAC Files * **********************/ -bool DownloadProjectTeamFiles() +bool DownloadProjectRacFilesByCPID() { - vprojectteamids.clear(); - - if (!WhitelistPopulated()) - { - _log(CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); + if (!WhitelistPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); - return false; - } + return false; + } - if (!UserpassPopulated()) - { - _log(CRITICAL, "DownloadProjectTeamFiles", "Userpass is not populated"); + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); - return false; - } + return false; + } - for (const auto& prjs : vwhitelist) - { - _log(INFO, "DownloadProjectTeamFiles", "Downloading project file for " + prjs.first); + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); - std::vector vPrjUrl = split(prjs.second, "@"); + std::vector vPrjUrl = split(prjs.second, "@"); - std::string sUrl = urlsanity(vPrjUrl[0], "team"); + std::string sUrl = urlsanity(vPrjUrl[0], "user"); - std::string team_file_name = prjs.first + "-team.gz"; + std::string rac_file_name = prjs.first + +"-user.gz"; - fs::path team_file = pathScraper / team_file_name.c_str(); + fs::path rac_file = pathScraper / rac_file_name.c_str(); - // if (fs::exists(team_file)) -// fs::remove(team_file); +// if (fs::exists(rac_file)) +// fs::remove(rac_file); - // Grab ETag of team file - statscurl teametagcurl; - std::string sTeamETag; + // Grab ETag of rac file + statscurl racetagcurl; + std::string sRacETag; - bool buserpass = false; - std::string userpass; + bool buserpass = false; + std::string userpass; - for (const auto& up : vuserpass) + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) { - if (up.first == prjs.first) - { - buserpass = true; + buserpass = true; - userpass = up.second; + userpass = up.second; - break; - } + break; } + } - if (buserpass) + if (buserpass) + { + if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) { - if (!teametagcurl.http_header(sUrl, sTeamETag, userpass)) - { - _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - continue; - } + continue; } + } - else - if (!teametagcurl.http_header(sUrl, sTeamETag)) - { - _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + else + if (!racetagcurl.http_header(sUrl, sRacETag)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - // todo remove these files - continue; - } + continue; + } - _log(INFO, "DownloadProjectTeamFiles", "Successfully pulled team header file for " + prjs.first); + if (sRacETag.empty()) + { + _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); + continue; + } - if (buserpass) - { - authdata ad(lowercase(prjs.first)); + else + _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); - ad.setoutputdata("team", prjs.first, sTeamETag); + if (buserpass) + { + authdata ad(lowercase(prjs.first)); - if (!ad.xport()) - _log(CRITICAL, "DownloadProjectTeamFiles", "Failed to export etag for " + prjs.first + " to authentication file"); - } + ad.setoutputdata("user", prjs.first, sRacETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } - std::string chketagfile = sTeamETag + ".gz"; - fs::path chkfile = pathScraper / chketagfile.c_str(); + std::string chketagfile = prjs.first + "-" + sRacETag + "-ByCPID" + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); - if (fs::exists(chkfile)) - { - _log(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - continue; - } + continue; + } - else - fs::remove(team_file); + else + fs::remove(chkfile); - _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " does not exists"); + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - statscurl teamcurl; + statscurl raccurl; - if (buserpass) + if (buserpass) + { + if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) { - if (!teamcurl.http_download(sUrl, team_file.string(), userpass)) - { - _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - continue; - } + continue; } + } - else - if (!teamcurl.http_download(sUrl, team_file.string())) - { - _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); - - continue; - } + else + if (!raccurl.http_download(sUrl, rac_file.string())) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - int64_t teamid = ProcessProjectTeamFile(team_file.string(), sTeamETag); + continue; + } - vprojectteamids.push_back(std::make_pair(prjs.first, teamid)); - } + ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); + } return true; } -int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) + + + +// This version uses a consensus beacon map rather than the teamid to filter statistics. +bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag) { + // Get a consensus map of Beacons. + BeaconMap mBeaconMap = GetConsensusBeaconList(); + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { - _log(ERROR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.string() + ")"); + _log(ERROR, "ProcessProjectRacFileByCPID", "Failed to open rac gzip file (" + file.string() + ")"); - return 0; + return false; } - _log(INFO, "ProcessProjectTeamFile", "Opening team file (" + file.string() + ")"); + _log(INFO, "ProcessProjectRacFileByCPID", "Opening rac file (" + file.string() + ")"); boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); in.push(ingzfile); @@ -509,11 +473,13 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) // If einstein we store different if (file.string().find("einstein") != std::string::npos) - gzetagfile = "einstein_team.gz"; + gzetagfile = "einstein_user.gz"; else - gzetagfile = etag + ".gz"; + gzetagfile = project + "-" + etag + "-ByCPID" + ".gz"; + std::string gzetagfile_no_path = gzetagfile; + // Put path in. gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); @@ -522,11 +488,10 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) out.push(boostio::gzip_compressor()); std::stringstream stream; - _log(INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); + _log(INFO, "ProcessProjectRacFileByCPID", "Started processing " + file.string()); stringbuilder outdata; outdata.nlappend(""); - outdata.nlappend(""); stream << outdata.value(); bool bcomplete = false; @@ -535,18 +500,18 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) while (!bcomplete && !bfileerror) { - // Find teams block + // Find users block std::string line; while (std::getline(in, line)) { - if (line != "") + if (line != "") continue; else break; } - // block found + // block found // Lets vector the blocks while (std::getline(in, line)) @@ -554,51 +519,33 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) if (bcomplete) break; - if (line == "") + if (line == "") { bcomplete = true; break; } - if (line == "") + if (line == "") { - stringbuilder teamdata; + stringbuilder userdata; - teamdata.nlappend(line); + userdata.nlappend(line); while (std::getline(in, line)) { - if (line.empty()) + if (line == "") { - _log(CRITICAL, "ProcessProjectTeamFile", "An empty line has been found in " + file.string() + ". This usually means file was incomplete when downloaded; Moving on"); + userdata.nlappend(line); - bfileerror = true; + // This uses the beacon map rather than the teamid to select the statistics. + if (mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) + vXML.push_back(userdata.value()); break; } - if (line == "") - { - teamdata.nlappend(line); - - if (lowercase(ExtractXML(teamdata.value(), "", "")) == "gridcoin") - { - vXML.push_back(teamdata.value()); - - bcomplete = true; - - break; - } - - else - break; - } - - if (bcomplete) - break; - - teamdata.nlcleanappend(line); + userdata.nlcleanappend(line); } } } @@ -611,10 +558,10 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) if (bfileerror) { - _log(CRITICAL, "ProcessProjectTeamFile", "Error in data processing of " + file.string() + "; Aborted processing"); + _log(CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper / efile; + fs::path fsepfile = pathScraper/ efile; ingzfile.close(); outgzfile.flush(); outgzfile.close(); @@ -628,808 +575,99 @@ int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) return false; } - _log(INFO, "ProcessProjectTeamFile", "Finished processing " + file.string()); - _log(INFO, "ProcessProjectTeamFile", "Started processing team data and stripping"); + _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectRacFileByCPID", "Started processing CPID rac data and stripping"); - // Strip the team xml data to contain only what we need to be compressed from vector + // Strip the rac xml data to contain only why we need to be compressed from vector // We Need: - // id, name + // total_credit, expavg_time, expavg_credit, teamid, cpid // We Don't need: - // type, userid, total_credit, expavg_credit, expavg_time, founder_name, url, name_html, description - // In reality we do not need those since NN does those calculations and does not use the extra data + // id, country, name, url + // In reality we DO NOT need total_credit till TCD + // In reality we DO NOT need expavg_time but this will make nn compatible // I've also opted to save 1 byte a line by not doing newlines since this a scraper - std::string steamid; + + stringbuilder xmlout; + + xmlout.nlappend(""); for (auto const& vv : vXML) { - std::string sid = ExtractXML(vv, "", ""); - std::string sname = ExtractXML(vv, "", ""); - stringbuilder xmlout; + std::string stotal_credit = ExtractXML(vv, "", ""); + std::string sexpavg_time = ExtractXML(vv, "", ""); + std::string sexpavg_credit = ExtractXML(vv, "", ""); + std::string scpid = ExtractXML(vv, "", ""); - xmlout.nlappend(""); - xmlout.xmlappend("id", sid); - xmlout.xmlappend("name", sname); - xmlout.nlappend(""); - xmlout.append(""); + xmlout.nlappend(""); + xmlout.xmlappend("total_credit", stotal_credit); + xmlout.xmlappend("expavg_time", sexpavg_time); + xmlout.xmlappend("expavg_credit", sexpavg_credit); + xmlout.xmlappend("cpid", scpid); + xmlout.nlappend(""); + } - stream << xmlout.value(); + xmlout.nlappend(""); - steamid = sid; - } + stream << xmlout.value(); - _log(INFO, "ProcessProjectTeamFile", "Finished processing team rac data; stripping complete"); + _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing team rac data; stripping complete"); out.push(stream); + + // Copy out to file. boost::iostreams::copy(out, outgzfile); + ingzfile.close(); outgzfile.flush(); outgzfile.close(); - _log(INFO, "ProcessProjectTeamFile", "Complete Process"); + // Hash the file. + + uint256 nFileHash = GetFileHash(gzetagfile); + _log(INFO, "ProcessProjectRacFileByCPID", "FileHash by GetFileHash " + nFileHash.ToString()); + try { - size_t filea = fs::file_size(file); - fs::path temp = gzetagfile.c_str(); - size_t fileb = fs::file_size(temp); + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectRacFileByCPID", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); - _nntester(INFO, "ProcessProjectTeamFile", "Processing new team file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; - ndownloadsize += (int64_t)filea; - nuploadsize += (int64_t)fileb; } catch (fs::filesystem_error& e) { - _log(INFO, "ProcessProjectTeamFile", "FS Error -> " + std::string(e.what())); + _log(INFO, "ProcessProjectRacFileByCPID", "FS Error -> " + std::string(e.what())); } - if (fs::exists(file)) - fs::remove(file); + fs::remove(file); - if (!steamid.empty()) - return std::stol(steamid); + ManifestEntry ManifestEntry; - _log(ERROR, "ProcessProjectTeamFile", "Unable to determine team ID"); + ManifestEntry.hash = nFileHash; + // Don't include path in Manifest, because this is local node dependent. + ManifestEntry.filename = gzetagfile_no_path; + ManifestEntry.timestamp = GetAdjustedTime(); - return 0; -} + if(!InsertManifestEntry(ManifestEntry)) + _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); + else + _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); -/********************** -* Project RAC Files * -**********************/ - -bool DownloadProjectRacFiles() -{ - if (!WhitelistPopulated()) - { - _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); - - return false; - } - - if (!UserpassPopulated()) - { - _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); - - return false; - } - - for (const auto& prjs : vwhitelist) - { - _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); - - std::vector vPrjUrl = split(prjs.second, "@"); - - std::string sUrl = urlsanity(vPrjUrl[0], "user"); - - std::string rac_file_name = prjs.first + +"-user.gz"; - - fs::path rac_file = pathScraper / rac_file_name.c_str(); - -// if (fs::exists(rac_file)) -// fs::remove(rac_file); - - // Grab ETag of rac file - statscurl racetagcurl; - std::string sRacETag; - - bool buserpass = false; - std::string userpass; - - for (const auto& up : vuserpass) - { - if (up.first == prjs.first) - { - buserpass = true; - - userpass = up.second; - - break; - } - } - - if (buserpass) - { - if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - - continue; - } - } - - else - if (!racetagcurl.http_header(sUrl, sRacETag)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - - continue; - } - - if (sRacETag.empty()) - { - _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); - - continue; - } - - else - _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); - - if (buserpass) - { - authdata ad(lowercase(prjs.first)); - - ad.setoutputdata("user", prjs.first, sRacETag); - - if (!ad.xport()) - _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); - } - - std::string chketagfile = sRacETag + ".gz"; - fs::path chkfile = pathScraper / chketagfile.c_str(); - - if (fs::exists(chkfile)) - { - _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - continue; - } - - else - fs::remove(chkfile); - - _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - statscurl raccurl; - - if (buserpass) - { - if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - - continue; - } - } - - else - if (!raccurl.http_download(sUrl, rac_file.string())) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - - continue; - } - - int64_t team_id = 0; - - for (auto const& vprj : vprojectteamids) - { - if (vprj.first != prjs.first) - continue; - - else - team_id = vprj.second; - } - - if (team_id == 0) - { - _log(ERROR, "DownloadProjectRacFiles", "TEAM ID was not found for project " + prjs.first); - - continue; - } - ProcessProjectRacFile(rac_file.string(), sRacETag, team_id); - } - - return true; -} - - - -bool DownloadProjectRacFilesByCPID() -{ - if (!WhitelistPopulated()) - { - _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); - - return false; - } - - if (!UserpassPopulated()) - { - _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); - - return false; - } - - for (const auto& prjs : vwhitelist) - { - _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); - - std::vector vPrjUrl = split(prjs.second, "@"); - - std::string sUrl = urlsanity(vPrjUrl[0], "user"); - - std::string rac_file_name = prjs.first + +"-user.gz"; - - fs::path rac_file = pathScraper / rac_file_name.c_str(); - -// if (fs::exists(rac_file)) -// fs::remove(rac_file); - - // Grab ETag of rac file - statscurl racetagcurl; - std::string sRacETag; - - bool buserpass = false; - std::string userpass; - - for (const auto& up : vuserpass) - { - if (up.first == prjs.first) - { - buserpass = true; - - userpass = up.second; - - break; - } - } - - if (buserpass) - { - if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - - continue; - } - } - - else - if (!racetagcurl.http_header(sUrl, sRacETag)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); - - continue; - } - - if (sRacETag.empty()) - { - _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); - - continue; - } - - else - _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); - - if (buserpass) - { - authdata ad(lowercase(prjs.first)); - - ad.setoutputdata("user", prjs.first, sRacETag); - - if (!ad.xport()) - _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); - } - - std::string chketagfile = prjs.first + "-" + sRacETag + "-ByCPID" + ".gz"; - fs::path chkfile = pathScraper / chketagfile.c_str(); - - if (fs::exists(chkfile)) - { - _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - continue; - } - - else - fs::remove(chkfile); - - _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); - - statscurl raccurl; - - if (buserpass) - { - if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - - continue; - } - } - - else - if (!raccurl.http_download(sUrl, rac_file.string())) - { - _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); - - continue; - } -/* - int64_t team_id = 0; - - for (auto const& vprj : vprojectteamids) - { - if (vprj.first != prjs.first) - continue; - - else - team_id = vprj.second; - } - - if (team_id == 0) - { - _log(ERROR, "DownloadProjectRacFiles", "TEAM ID was not found for project " + prjs.first); - - continue; - } -*/ //ProcessProjectRacFile(rac_file.string(), sRacETag, team_id); - ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); - } - - return true; -} - - -bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid) -{ - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); - - if (!ingzfile) - { - _log(ERROR, "ProcessProjectRacFile", "Failed to open rac gzip file (" + file.string() + ")"); - - return false; - } - - _log(INFO, "ProcessProjectRacFile", "Opening rac file (" + file.string() + ")"); - - boostio::filtering_istream in; - - in.push(boostio::gzip_decompressor()); - in.push(ingzfile); - - std::string gzetagfile = ""; - - // If einstein we store different - if (file.string().find("einstein") != std::string::npos) - gzetagfile = "einstein_user.gz"; - - else - gzetagfile = etag + ".gz"; - - gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); - - std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); - - boostio::filtering_istream out; - out.push(boostio::gzip_compressor()); - std::stringstream stream; - - _log(INFO, "ProcessProjectRacFile", "Started processing " + file.string()); - - stringbuilder outdata; - outdata.nlappend(""); - stream << outdata.value(); - - bool bcomplete = false; - bool bfileerror = false; - std::vector vXML; - - while (!bcomplete && !bfileerror) - { - // Find users block - std::string line; - - while (std::getline(in, line)) - { - if (line != "") - continue; - - else - break; - } - // block found - // Lets vector the blocks - - while (std::getline(in, line)) - { - if (bcomplete) - break; - - if (line == "") - { - bcomplete = true; - - break; - } - - if (line == "") - { - stringbuilder userdata; - - userdata.nlappend(line); - - while (std::getline(in, line)) - { - if (line == "") - { - userdata.nlappend(line); - - if (ExtractXML(userdata.value(), "", "") == std::to_string(teamid)) - vXML.push_back(userdata.value()); - - break; - } - - userdata.nlcleanappend(line); - } - } - } - - // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. - // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! - if (!bcomplete) - bfileerror = true; - } - - if (bfileerror) - { - _log(CRITICAL, "ProcessProjectRacFile", "Error in data processing of " + file.string() + "; Aborted processing"); - - std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper/ efile; - ingzfile.close(); - outgzfile.flush(); - outgzfile.close(); - - if (fs::exists(fsepfile)) - fs::remove(fsepfile); - - if (fs::exists(file)) - fs::remove(file); - - return false; - } - - _log(INFO, "ProcessProjectRacFile", "Finished processing " + file.string()); - _log(INFO, "ProcessProjectRacFile", "Started processing team rac data and stripping"); - - // Strip the team rac xml data to contain only why we need to be compressed from vector - // We Need: - // total_credit, expavg_time, expavg_credit, teamid, cpid - // We Don't need: - // id, country, name, url - // In reality we DO NOT need total_credit till TCD - // In reality we DO NOT need expavg_time but this will make nn compatible - // Also since we know teamid in this function we do not have to extract that data with ExtractXML - // I've also opted to save 1 byte a line by not doing newlines since this a scraper - - stringbuilder xmlout; - - xmlout.nlappend(""); - - for (auto const& vv : vXML) - { - std::string stotal_credit = ExtractXML(vv, "", ""); - std::string sexpavg_time = ExtractXML(vv, "", ""); - std::string sexpavg_credit = ExtractXML(vv, "", ""); - std::string scpid = ExtractXML(vv, "", ""); - - xmlout.nlappend(""); - xmlout.xmlappend("total_credit", stotal_credit); - xmlout.xmlappend("expavg_time", sexpavg_time); - xmlout.xmlappend("expavg_credit", sexpavg_credit); - xmlout.xmlappend("cpid", scpid); - xmlout.xmlappend("teamid", teamid); - xmlout.nlappend(""); - } - - xmlout.nlappend(""); - - stream << xmlout.value(); - - _log(INFO, "ProcessProjectRacFile", "Finished processing team rac data; stripping complete"); - - out.push(stream); - boost::iostreams::copy(out, outgzfile); - ingzfile.close(); - outgzfile.flush(); - outgzfile.close(); - - try - { - size_t filea = fs::file_size(file); - fs::path temp = gzetagfile.c_str(); - size_t fileb = fs::file_size(temp); - - _nntester(INFO, "ProcessProjectRacFile", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); - - ndownloadsize += (int64_t)filea; - nuploadsize += (int64_t)fileb; - - } - - catch (fs::filesystem_error& e) - { - _log(INFO, "ProcessProjectRacFile", "FS Error -> " + std::string(e.what())); - } - - fs::remove(file); - - _log(INFO, "ProcessProjectRacFile", "Complete Process"); - - return true; -} - - -// This version uses a consensus beacon map rather than the teamid to filter statistics. -bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag) -{ - // Get a consensus map of Beacons. - BeaconMap mBeaconMap = GetConsensusBeaconList(); - - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); - - if (!ingzfile) - { - _log(ERROR, "ProcessProjectRacFileByCPID", "Failed to open rac gzip file (" + file.string() + ")"); - - return false; - } - - _log(INFO, "ProcessProjectRacFileByCPID", "Opening rac file (" + file.string() + ")"); - - boostio::filtering_istream in; - - in.push(boostio::gzip_decompressor()); - in.push(ingzfile); - - std::string gzetagfile = ""; - - // If einstein we store different - if (file.string().find("einstein") != std::string::npos) - gzetagfile = "einstein_user.gz"; - - else - gzetagfile = project + "-" + etag + "-ByCPID" + ".gz"; - - gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); - - std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); - - boostio::filtering_istream out; - out.push(boostio::gzip_compressor()); - std::stringstream stream; - - _log(INFO, "ProcessProjectRacFileByCPID", "Started processing " + file.string()); - - stringbuilder outdata; - outdata.nlappend(""); - stream << outdata.value(); - - bool bcomplete = false; - bool bfileerror = false; - std::vector vXML; - - while (!bcomplete && !bfileerror) - { - // Find users block - std::string line; - - while (std::getline(in, line)) - { - if (line != "") - continue; - - else - break; - } - // block found - // Lets vector the blocks - - while (std::getline(in, line)) - { - if (bcomplete) - break; - - if (line == "") - { - bcomplete = true; - - break; - } - - if (line == "") - { - stringbuilder userdata; - - userdata.nlappend(line); - - while (std::getline(in, line)) - { - if (line == "") - { - userdata.nlappend(line); - - // This uses the beacon map rather than the teamid to select the statistics. - if (mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) - vXML.push_back(userdata.value()); - - break; - } - - userdata.nlcleanappend(line); - } - } - } - - // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. - // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! - if (!bcomplete) - bfileerror = true; - } - - if (bfileerror) - { - _log(CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); - - std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper/ efile; - ingzfile.close(); - outgzfile.flush(); - outgzfile.close(); - - if (fs::exists(fsepfile)) - fs::remove(fsepfile); - - if (fs::exists(file)) - fs::remove(file); - - return false; - } - - _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); - _log(INFO, "ProcessProjectRacFileByCPID", "Started processing CPID rac data and stripping"); - - // Strip the rac xml data to contain only why we need to be compressed from vector - // We Need: - // total_credit, expavg_time, expavg_credit, teamid, cpid - // We Don't need: - // id, country, name, url - // In reality we DO NOT need total_credit till TCD - // In reality we DO NOT need expavg_time but this will make nn compatible - // I've also opted to save 1 byte a line by not doing newlines since this a scraper - - stringbuilder xmlout; - - xmlout.nlappend(""); - - for (auto const& vv : vXML) - { - std::string stotal_credit = ExtractXML(vv, "", ""); - std::string sexpavg_time = ExtractXML(vv, "", ""); - std::string sexpavg_credit = ExtractXML(vv, "", ""); - std::string scpid = ExtractXML(vv, "", ""); - - xmlout.nlappend(""); - xmlout.xmlappend("total_credit", stotal_credit); - xmlout.xmlappend("expavg_time", sexpavg_time); - xmlout.xmlappend("expavg_credit", sexpavg_credit); - xmlout.xmlappend("cpid", scpid); - xmlout.nlappend(""); - } - - xmlout.nlappend(""); - - stream << xmlout.value(); - - _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing team rac data; stripping complete"); - - out.push(stream); - - // Copy out to file. - boost::iostreams::copy(out, outgzfile); - - ingzfile.close(); - outgzfile.flush(); - outgzfile.close(); - - // Hash the file. - - /* - std::ifstream strm(gzetagfile, std::ios::binary); - - std::ostringstream sstream; - sstream << strm.rdbuf(); - const std::string str(sstream.str()); - - strm.close(); - - // Verify the string is not messing things up. - //std::ofstream ostrm(gzetagfile + ".out", std::ios::binary); - //ostrm << str; - //ostrm.flush(); - //ostrm.close(); - - CHashWriter ss(0,0); - ss << str; - uint256 nFileHash = ss.GetHash(); - _log(INFO, "ProcessProjectRacFileByCPID", "FileHash by CHashWriter " + nFileHash2.ToString()); - */ - - uint256 nFileHash = GetFileHash(gzetagfile); - _log(INFO, "ProcessProjectRacFileByCPID", "FileHash by GetFileHash " + nFileHash.ToString()); - - - try - { - size_t filea = fs::file_size(file); - fs::path temp = gzetagfile.c_str(); - size_t fileb = fs::file_size(temp); - - _nntester(INFO, "ProcessProjectRacFileByCPID", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); - - ndownloadsize += (int64_t)filea; - nuploadsize += (int64_t)fileb; - - } - - catch (fs::filesystem_error& e) - { - _log(INFO, "ProcessProjectRacFileByCPID", "FS Error -> " + std::string(e.what())); - } - - fs::remove(file); - - ManifestEntry ManifestEntry; - - ManifestEntry.hash = nFileHash; - ManifestEntry.filename = gzetagfile; - ManifestEntry.timestamp = GetAdjustedTime(); - - if(!InsertManifestEntry(ManifestEntry)) - _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); - else - _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); - - // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. - // The manifest file is actually very small though, and this primitive implementation will suffice. I could - // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of - // sync if the wallet is ended during the middle of pulling the files. - _log(INFO, "Scraper", "Persisting manifest entry to disk."); - if(!StoreManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "StoreManifest error occurred"); - else - _log(INFO, "Scraper", "Stored Manifest"); + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. I could + // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of + // sync if the wallet is ended during the middle of pulling the files. + _log(INFO, "Scraper", "Persisting manifest entry to disk."); + if(!StoreManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "StoreManifest error occurred"); + else + _log(INFO, "Scraper", "Stored Manifest"); _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -1531,47 +769,35 @@ bool StoreBeaconList(const fs::path& file) } -bool StoreManifest(const fs::path& file) -{ - if (fs::exists(file)) - fs::remove(file); - - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); - - if (!outgzfile) - { - _log(ERROR, "StoreManifest", "Failed to open manifest gzip file (" + file.string() + ")"); - - return false; - } - - boostio::filtering_istream out; - out.push(boostio::gzip_compressor()); - std::stringstream stream; - _log(INFO, "StoreManifest", "Started processing " + file.string()); - for (auto const& entry : mManifest) - { - uint256 nEntryHash = entry.first; +/*********************** +* Manifest persistance * +************************/ - std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.second.filename + "\n"; - stream << sManifestEntry; - } - _log(INFO, "StoreManifest", "Finished processing manifest from map."); +// Insert entry into Manifest +bool InsertManifestEntry(ManifestEntry entry) +{ + // This less readable form is so we know whether the element already existed or not. + std::pair ret; + ret = mManifest.insert(std::make_pair(entry.hash, entry)); - out.push(stream); - boost::iostreams::copy(out, outgzfile); - outgzfile.flush(); - outgzfile.close(); + // True if insert was sucessful, false if entry with key (hash) already exists in map. + return ret.second; +} - _log(INFO, "StoreManifest", "Process Complete."); +// Delete entry from Manifest +unsigned int DeleteManifestEntry(ManifestEntry entry) +{ + unsigned int ret = mManifest.erase(entry.hash); - return true; + // Returns number of elements erased, either 0 or 1. + return ret; } + bool LoadManifest(const fs::path& file) { std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); @@ -1617,3 +843,44 @@ bool LoadManifest(const fs::path& file) return true; } + + +bool StoreManifest(const fs::path& file) +{ + if (fs::exists(file)) + fs::remove(file); + + std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + + if (!outgzfile) + { + _log(ERROR, "StoreManifest", "Failed to open manifest gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "StoreManifest", "Started processing " + file.string()); + + for (auto const& entry : mManifest) + { + uint256 nEntryHash = entry.first; + + std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.second.filename + "\n"; + stream << sManifestEntry; + } + + _log(INFO, "StoreManifest", "Finished processing manifest from map."); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "StoreManifest", "Process Complete."); + + return true; +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 524a8acfb9..18326c3860 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -67,6 +67,18 @@ uint256 GetFileHash(const fs::path& inputfile); bool StoreManifest(const fs::path& file); bool LoadManifest(const fs::path& file); +struct ManifestEntry +{ + uint256 hash; // hash of file + std::string filename; // Filename + int64_t timestamp; +}; + +typedef std::map Manifest; + +bool InsertManifestEntry(ManifestEntry entry); +unsigned int DeleteManifestEntry(ManifestEntry entry); + /********************* * Global Vars * *********************/ @@ -81,16 +93,6 @@ std::string rpcip = "http://127.0.0.1:9334/"; int64_t ndownloadsize = 0; int64_t nuploadsize = 0; -struct ManifestEntry -{ - uint256 hash; // hash of file - std::string filename; // Filename - int64_t timestamp; -}; - -typedef std::map Manifest; - - /********************* * Scraper * *********************/ diff --git a/src/ScraperProxy/scraper_obsolete.cpp b/src/ScraperProxy/scraper_obsolete.cpp new file mode 100755 index 0000000000..15b3725bfa --- /dev/null +++ b/src/ScraperProxy/scraper_obsolete.cpp @@ -0,0 +1,714 @@ +bool DownloadProjectTeamFiles(); +int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag); +bool DownloadProjectRacFiles(); +bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid); + +int64_t teamid(const std::string& xmldata) +{ + std::string sXML = xmldata; // copy so we can iterate this. + + while (!sXML.empty()) + { + size_t loca = sXML.find(""); + size_t locb = sXML.find(""); + + std::string substr = sXML.substr(loca, locb + 7); + + if (lowercase(ExtractXML(substr, "", "", ""); + + return std::stol(teamidstr); + } + + sXML = sXML.substr(locb + 7, sXML.size()); + } + + return 0; +} + + + +/********************** +* Project Team Files * +**********************/ + +bool DownloadProjectTeamFiles() +{ + vprojectteamids.clear(); + + if (!WhitelistPopulated()) + { + _log(CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); + + return false; + } + + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectTeamFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectTeamFiles", "Downloading project file for " + prjs.first); + + std::vector vPrjUrl = split(prjs.second, "@"); + + std::string sUrl = urlsanity(vPrjUrl[0], "team"); + + std::string team_file_name = prjs.first + "-team.gz"; + + fs::path team_file = pathScraper / team_file_name.c_str(); + + // if (fs::exists(team_file)) +// fs::remove(team_file); + + // Grab ETag of team file + statscurl teametagcurl; + std::string sTeamETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) + { + buserpass = true; + + userpass = up.second; + + break; + } + } + + if (buserpass) + { + if (!teametagcurl.http_header(sUrl, sTeamETag, userpass)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + + continue; + } + } + + else + if (!teametagcurl.http_header(sUrl, sTeamETag)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.first); + + // todo remove these files + continue; + } + + _log(INFO, "DownloadProjectTeamFiles", "Successfully pulled team header file for " + prjs.first); + + + if (buserpass) + { + authdata ad(lowercase(prjs.first)); + + ad.setoutputdata("team", prjs.first, sTeamETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectTeamFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } + + std::string chketagfile = sTeamETag + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); + + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + + _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " already exists"); + + continue; + } + + else + fs::remove(team_file); + + _nntester(INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.first + " does not exists"); + + statscurl teamcurl; + + if (buserpass) + { + if (!teamcurl.http_download(sUrl, team_file.string(), userpass)) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); + + continue; + } + } + + else + if (!teamcurl.http_download(sUrl, team_file.string())) + { + _log(ERROR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.first); + + continue; + } + + int64_t teamid = ProcessProjectTeamFile(team_file.string(), sTeamETag); + + vprojectteamids.push_back(std::make_pair(prjs.first, teamid)); + } + + return true; +} + +int64_t ProcessProjectTeamFile(const fs::path& file, const std::string& etag) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.string() + ")"); + + return 0; + } + + _log(INFO, "ProcessProjectTeamFile", "Opening team file (" + file.string() + ")"); + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string gzetagfile = ""; + + // If einstein we store different + if (file.string().find("einstein") != std::string::npos) + gzetagfile = "einstein_team.gz"; + + else + gzetagfile = etag + ".gz"; + + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + + std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); + + stringbuilder outdata; + outdata.nlappend(""); + outdata.nlappend(""); + stream << outdata.value(); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find teams block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder teamdata; + + teamdata.nlappend(line); + + while (std::getline(in, line)) + { + if (line.empty()) + { + _log(CRITICAL, "ProcessProjectTeamFile", "An empty line has been found in " + file.string() + ". This usually means file was incomplete when downloaded; Moving on"); + + bfileerror = true; + + break; + } + + if (line == "") + { + teamdata.nlappend(line); + + if (lowercase(ExtractXML(teamdata.value(), "", "")) == "gridcoin") + { + vXML.push_back(teamdata.value()); + + bcomplete = true; + + break; + } + + else + break; + } + + if (bcomplete) + break; + + teamdata.nlcleanappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + if (bfileerror) + { + _log(CRITICAL, "ProcessProjectTeamFile", "Error in data processing of " + file.string() + "; Aborted processing"); + + std::string efile = etag + ".gz"; + fs::path fsepfile = pathScraper / efile; + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + if (fs::exists(fsepfile)) + fs::remove(fsepfile); + + if (fs::exists(file)) + fs::remove(file); + + return false; + } + + _log(INFO, "ProcessProjectTeamFile", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectTeamFile", "Started processing team data and stripping"); + + // Strip the team xml data to contain only what we need to be compressed from vector + // We Need: + // id, name + // We Don't need: + // type, userid, total_credit, expavg_credit, expavg_time, founder_name, url, name_html, description + // In reality we do not need those since NN does those calculations and does not use the extra data + // I've also opted to save 1 byte a line by not doing newlines since this a scraper + std::string steamid; + + for (auto const& vv : vXML) + { + std::string sid = ExtractXML(vv, "", ""); + std::string sname = ExtractXML(vv, "", ""); + stringbuilder xmlout; + + xmlout.nlappend(""); + xmlout.xmlappend("id", sid); + xmlout.xmlappend("name", sname); + xmlout.nlappend(""); + xmlout.append(""); + + stream << xmlout.value(); + + steamid = sid; + } + + _log(INFO, "ProcessProjectTeamFile", "Finished processing team rac data; stripping complete"); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "ProcessProjectTeamFile", "Complete Process"); + + try + { + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectTeamFile", "Processing new team file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; + } + + catch (fs::filesystem_error& e) + { + _log(INFO, "ProcessProjectTeamFile", "FS Error -> " + std::string(e.what())); + } + + if (fs::exists(file)) + fs::remove(file); + + if (!steamid.empty()) + return std::stol(steamid); + + _log(ERROR, "ProcessProjectTeamFile", "Unable to determine team ID"); + + return 0; +} + + + + +bool DownloadProjectRacFiles() +{ + if (!WhitelistPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Whitelist is not populated"); + + return false; + } + + if (!UserpassPopulated()) + { + _log(CRITICAL, "DownloadProjectRacFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : vwhitelist) + { + _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); + + std::vector vPrjUrl = split(prjs.second, "@"); + + std::string sUrl = urlsanity(vPrjUrl[0], "user"); + + std::string rac_file_name = prjs.first + +"-user.gz"; + + fs::path rac_file = pathScraper / rac_file_name.c_str(); + +// if (fs::exists(rac_file)) +// fs::remove(rac_file); + + // Grab ETag of rac file + statscurl racetagcurl; + std::string sRacETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.first) + { + buserpass = true; + + userpass = up.second; + + break; + } + } + + if (buserpass) + { + if (!racetagcurl.http_header(sUrl, sRacETag, userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + } + + else + if (!racetagcurl.http_header(sUrl, sRacETag)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to pull rac header file for " + prjs.first); + + continue; + } + + if (sRacETag.empty()) + { + _log(ERROR, "DownloadProjectRacFiles", "ETag for project is empty" + prjs.first); + + continue; + } + + else + _log(INFO, "DownloadProjectRacFiles", "Successfully pulled rac header file for " + prjs.first); + + if (buserpass) + { + authdata ad(lowercase(prjs.first)); + + ad.setoutputdata("user", prjs.first, sRacETag); + + if (!ad.xport()) + _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); + } + + std::string chketagfile = sRacETag + ".gz"; + fs::path chkfile = pathScraper / chketagfile.c_str(); + + if (fs::exists(chkfile)) + { + _log(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + continue; + } + + else + fs::remove(chkfile); + + _nntester(INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.first + " already exists"); + + statscurl raccurl; + + if (buserpass) + { + if (!raccurl.http_download(sUrl, rac_file.string(), userpass)) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } + } + + else + if (!raccurl.http_download(sUrl, rac_file.string())) + { + _log(ERROR, "DownloadProjectRacFiles", "Failed to download project rac file for " + prjs.first); + + continue; + } + + int64_t team_id = 0; + + for (auto const& vprj : vprojectteamids) + { + if (vprj.first != prjs.first) + continue; + + else + team_id = vprj.second; + } + + if (team_id == 0) + { + _log(ERROR, "DownloadProjectRacFiles", "TEAM ID was not found for project " + prjs.first); + + continue; + } + ProcessProjectRacFile(rac_file.string(), sRacETag, team_id); + } + + return true; +} + + + +bool ProcessProjectRacFile(const fs::path& file, const std::string& etag, int64_t teamid) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "ProcessProjectRacFile", "Failed to open rac gzip file (" + file.string() + ")"); + + return false; + } + + _log(INFO, "ProcessProjectRacFile", "Opening rac file (" + file.string() + ")"); + + boostio::filtering_istream in; + + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string gzetagfile = ""; + + // If einstein we store different + if (file.string().find("einstein") != std::string::npos) + gzetagfile = "einstein_user.gz"; + + else + gzetagfile = etag + ".gz"; + + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + + std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "ProcessProjectRacFile", "Started processing " + file.string()); + + stringbuilder outdata; + outdata.nlappend(""); + stream << outdata.value(); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find users block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder userdata; + + userdata.nlappend(line); + + while (std::getline(in, line)) + { + if (line == "") + { + userdata.nlappend(line); + + if (ExtractXML(userdata.value(), "", "") == std::to_string(teamid)) + vXML.push_back(userdata.value()); + + break; + } + + userdata.nlcleanappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + if (bfileerror) + { + _log(CRITICAL, "ProcessProjectRacFile", "Error in data processing of " + file.string() + "; Aborted processing"); + + std::string efile = etag + ".gz"; + fs::path fsepfile = pathScraper/ efile; + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + if (fs::exists(fsepfile)) + fs::remove(fsepfile); + + if (fs::exists(file)) + fs::remove(file); + + return false; + } + + _log(INFO, "ProcessProjectRacFile", "Finished processing " + file.string()); + _log(INFO, "ProcessProjectRacFile", "Started processing team rac data and stripping"); + + // Strip the team rac xml data to contain only why we need to be compressed from vector + // We Need: + // total_credit, expavg_time, expavg_credit, teamid, cpid + // We Don't need: + // id, country, name, url + // In reality we DO NOT need total_credit till TCD + // In reality we DO NOT need expavg_time but this will make nn compatible + // Also since we know teamid in this function we do not have to extract that data with ExtractXML + // I've also opted to save 1 byte a line by not doing newlines since this a scraper + + stringbuilder xmlout; + + xmlout.nlappend(""); + + for (auto const& vv : vXML) + { + std::string stotal_credit = ExtractXML(vv, "", ""); + std::string sexpavg_time = ExtractXML(vv, "", ""); + std::string sexpavg_credit = ExtractXML(vv, "", ""); + std::string scpid = ExtractXML(vv, "", ""); + + xmlout.nlappend(""); + xmlout.xmlappend("total_credit", stotal_credit); + xmlout.xmlappend("expavg_time", sexpavg_time); + xmlout.xmlappend("expavg_credit", sexpavg_credit); + xmlout.xmlappend("cpid", scpid); + xmlout.xmlappend("teamid", teamid); + xmlout.nlappend(""); + } + + xmlout.nlappend(""); + + stream << xmlout.value(); + + _log(INFO, "ProcessProjectRacFile", "Finished processing team rac data; stripping complete"); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + ingzfile.close(); + outgzfile.flush(); + outgzfile.close(); + + try + { + size_t filea = fs::file_size(file); + fs::path temp = gzetagfile.c_str(); + size_t fileb = fs::file_size(temp); + + _nntester(INFO, "ProcessProjectRacFile", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + + ndownloadsize += (int64_t)filea; + nuploadsize += (int64_t)fileb; + + } + + catch (fs::filesystem_error& e) + { + _log(INFO, "ProcessProjectRacFile", "FS Error -> " + std::string(e.what())); + } + + fs::remove(file); + + _log(INFO, "ProcessProjectRacFile", "Complete Process"); + + return true; +} From f4c014ca6cb15b02376ecd1e87d6860df11a3eaf Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 15 Nov 2018 00:31:14 -0500 Subject: [PATCH 010/359] Scraper directory sync with mManifest This commit puts in the logic to ensure that there is consistency between the files in the Scraper directory and the contents of the Manifest file. This is done at the start of the Scraper thread. I have also included sleep interval improvements, clamping to the default values of the GetArg parameters, and a new parameter, activebeforesb, which represents the number of seconds before 24 hours to wake up to begin scraping to prepare for SB formation. So there are now three parameters... -scraper (which defaults to false if not present, activates scraper thread) -scrapersleep (in seconds, defaults to 60, clamped to [30, 600]) -activebeforesb (in seconds, defaults to 300, clamped to [180, 600]) To do, cull superceded project files, and implement critical section (LOCK) around mManifest. --- src/ScraperProxy/scraper.cpp | 89 +++++++++++++++++++++++++++--------- src/ScraperProxy/scraper.h | 4 +- src/init.cpp | 6 ++- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 102897f4ff..bbabc46761 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -26,9 +26,10 @@ int GetDayOfYear(int64_t timestamp); void testdata(const std::string& etag); -// Note these two are initialized here for standalone mode compile, but will be overwritten by +// Note these three are initialized here for standalone mode compile, but will be overwritten by // the values from GetArg in init.cpp when compiled as part of the wallet. unsigned int nScraperSleep = 60000; +unsigned int nActiveBeforeSB = 300; boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); @@ -37,30 +38,73 @@ extern BeaconMap GetConsensusBeaconList(); // This is the scraper thread... void Scraper(bool fScraperStandalone) { - // This loads the manifest file from the Scraper directory for persistence. + // Check to see if the Scraper directory exists and is a directory. If not create it. + if(fs::exists(pathScraper)) + { + // If it is a normal file, this is not right. Remove the file and replace with the Scraper directory. + if(fs::is_regular_file(pathScraper)) + { + fs::remove(pathScraper); + fs::create_directory(pathScraper); + } + else + { + // Load the manifest file from the Scraper directory info mManifest. + + _log(INFO, "Scraper", "Loading Manifest"); + if (!LoadManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "Error occurred loading manifest"); + else + _log(INFO, "Scraper", "Loaded Manifest file into map."); - _log(INFO, "Scraper", "Loading Manifest"); - if(!LoadManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "Error occurred loading manifest"); + // Align the Scraper directory with the Manifest file. + // First remove orphan files with no Manifest entry. + for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) + { + // Check to see if the file exists in the manifest. If it doesn't + // remove it. + Manifest::iterator entry; + + if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "Beacon.csv.gz" && fs::is_regular_file(dir)) + { + entry = mManifest.find(dir.path().filename().c_str()); + if (entry == mManifest.end()) + fs::remove(dir.path()); + } + } + + // Now iterate through the Manifest map and remove Manifest entries with no file. + for (auto const& entry : mManifest) + { + if(!fs::exists(pathScraper / entry.first)) + mManifest.erase(entry.first); + } + } + } else - _log(INFO, "Scraper", "Loaded Manifest file into map."); + fs::create_directory(pathScraper); + + // The scraper thread loop... while (fScraperStandalone || !fShutdown) { gridcoinrpc data; - - if(!StoreBeaconList(pathScraper / "BeaconList.csv.gz")) - _log(ERROR, "Scraper", "StoreBeaconList error occurred"); - else - _log(INFO, "Scraper", "Stored Beacon List"); int64_t sbage = data.sbage(); - // Give 300 seconds before superblock needed before we sync - if (//sbage <= 86100 && sbage >= 0 - false) + // Give nActiveBeforeSB seconds before superblock needed before we sync + if (sbage <= (86400 - nActiveBeforeSB) && sbage >= 0) + { _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); + // Don't let nBeforeSBSleep go less than zero, which could happen without max if wallet + // started with sbage already older than 86400 - nActiveBeforeSB. + int64_t nBeforeSBSleep = std::max(86400 - nActiveBeforeSB - sbage, (int64_t) 0); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nBeforeSBSleep) + " seconds."); + + MilliSleep(nBeforeSBSleep * 1000); + } + else if (sbage <= -1) _log(ERROR, "Scraper", "RPC error occured, check logs"); @@ -75,9 +119,10 @@ void Scraper(bool fScraperStandalone) AuthenticationETagClear(); - //DownloadProjectTeamFiles(); - - //DownloadProjectRacFiles(); + if (!StoreBeaconList(pathScraper / "BeaconList.csv.gz")) + _log(ERROR, "Scraper", "StoreBeaconList error occurred"); + else + _log(INFO, "Scraper", "Stored Beacon List"); DownloadProjectRacFilesByCPID(); } @@ -649,9 +694,9 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil ManifestEntry ManifestEntry; - ManifestEntry.hash = nFileHash; // Don't include path in Manifest, because this is local node dependent. ManifestEntry.filename = gzetagfile_no_path; + ManifestEntry.hash = nFileHash; ManifestEntry.timestamp = GetAdjustedTime(); if(!InsertManifestEntry(ManifestEntry)) @@ -781,7 +826,7 @@ bool InsertManifestEntry(ManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. std::pair ret; - ret = mManifest.insert(std::make_pair(entry.hash, entry)); + ret = mManifest.insert(std::make_pair(entry.filename, entry)); // True if insert was sucessful, false if entry with key (hash) already exists in map. return ret.second; @@ -790,7 +835,7 @@ bool InsertManifestEntry(ManifestEntry entry) // Delete entry from Manifest unsigned int DeleteManifestEntry(ManifestEntry entry) { - unsigned int ret = mManifest.erase(entry.hash); + unsigned int ret = mManifest.erase(entry.filename); // Returns number of elements erased, either 0 or 1. return ret; @@ -867,9 +912,9 @@ bool StoreManifest(const fs::path& file) for (auto const& entry : mManifest) { - uint256 nEntryHash = entry.first; + uint256 nEntryHash = entry.second.hash; - std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.second.filename + "\n"; + std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.first + "\n"; stream << sManifestEntry; } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 18326c3860..cc71847606 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -69,12 +69,12 @@ bool LoadManifest(const fs::path& file); struct ManifestEntry { - uint256 hash; // hash of file std::string filename; // Filename + uint256 hash; // hash of file int64_t timestamp; }; -typedef std::map Manifest; +typedef std::map Manifest; bool InsertManifestEntry(ManifestEntry entry); unsigned int DeleteManifestEntry(ManifestEntry entry); diff --git a/src/init.cpp b/src/init.cpp index f4b60f1463..0d5b6f825d 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -49,6 +49,7 @@ extern unsigned int nNodeLifespan; extern unsigned int nDerivationMethodIndex; extern unsigned int nMinerSleep; extern unsigned int nScraperSleep; +extern unsigned int nActiveBeforeSB; extern bool fUseFastIndex; extern boost::filesystem::path pathScraper; @@ -378,7 +379,10 @@ bool AppInit2(ThreadHandlerPtr threads) fUseFastIndex = GetBoolArg("-fastindex", false); nMinerSleep = GetArg("-minersleep", 8000); - nScraperSleep = GetArg("-scrapersleep", 60000); + // Default to 60 sec, clamp to 30 minimum, 600 maximum - converted to milliseconds. + nScraperSleep = std::min(std::max(GetArg("-scrapersleep", 60), (int64_t) 30), (int64_t) 600) * 1000; + // Default to 300 sec, clamp to 180 minimum, 86400 maximum (meaning active all of the time). + nActiveBeforeSB = std::min(std::max(GetArg("-activebeforesb", 300), (int64_t) 180), (int64_t) 86400); nDerivationMethodIndex = 0; fTestNet = GetBoolArg("-testnet"); From 5eb3f6842da45ffa945891357fe79ed5ee73e695 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 15 Nov 2018 11:06:15 -0500 Subject: [PATCH 011/359] Add CCriticalSection (LOCK) mManifest ...and locking in appropriate places. --- src/ScraperProxy/scraper.cpp | 51 +++++++++++++++++++++++++----------- src/ScraperProxy/scraper.h | 1 + 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index bbabc46761..b7dcccdf25 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -10,6 +10,8 @@ std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); Manifest mManifest; +CCriticalSection cs_mManifest; + bool WhitelistPopulated(); bool UserpassPopulated(); bool DownloadProjectRacFilesByCPID(); @@ -59,17 +61,22 @@ void Scraper(bool fScraperStandalone) // Align the Scraper directory with the Manifest file. // First remove orphan files with no Manifest entry. - for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) + // Lock the manifest while it is being manipulated. { - // Check to see if the file exists in the manifest. If it doesn't - // remove it. - Manifest::iterator entry; - - if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "Beacon.csv.gz" && fs::is_regular_file(dir)) + LOCK(cs_mManifest); + + for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - entry = mManifest.find(dir.path().filename().c_str()); - if (entry == mManifest.end()) - fs::remove(dir.path()); + // Check to see if the file exists in the manifest. If it doesn't + // remove it. + Manifest::iterator entry; + + if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "Beacon.csv.gz" && fs::is_regular_file(dir)) + { + entry = mManifest.find(dir.path().filename().c_str()); + if (entry == mManifest.end()) + fs::remove(dir.path()); + } } } @@ -826,7 +833,11 @@ bool InsertManifestEntry(ManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. std::pair ret; - ret = mManifest.insert(std::make_pair(entry.filename, entry)); + { + LOCK(cs_mManifest); + + ret = mManifest.insert(std::make_pair(entry.filename, entry)); + } // True if insert was sucessful, false if entry with key (hash) already exists in map. return ret.second; @@ -835,7 +846,12 @@ bool InsertManifestEntry(ManifestEntry entry) // Delete entry from Manifest unsigned int DeleteManifestEntry(ManifestEntry entry) { - unsigned int ret = mManifest.erase(entry.filename); + unsigned int ret; + { + LOCK(cs_mManifest); + + ret = mManifest.erase(entry.filename); + } // Returns number of elements erased, either 0 or 1. return ret; @@ -910,12 +926,17 @@ bool StoreManifest(const fs::path& file) _log(INFO, "StoreManifest", "Started processing " + file.string()); - for (auto const& entry : mManifest) + //Lock mManifest during serialize to string. { - uint256 nEntryHash = entry.second.hash; + LOCK(cs_mManifest); + + for (auto const& entry : mManifest) + { + uint256 nEntryHash = entry.second.hash; - std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.first + "\n"; - stream << sManifestEntry; + std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.first + "\n"; + stream << sManifestEntry; + } } _log(INFO, "StoreManifest", "Finished processing manifest from map."); diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index cc71847606..1fb38f3160 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -24,6 +24,7 @@ #include #include +#include "sync.h" #include "appcache.h" #include "beacon.h" From 1e80e6bd647455824b5ae826162a000b5cc8cd7b Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 15 Nov 2018 17:35:39 -0500 Subject: [PATCH 012/359] Some changes to try and get the standalone compile working and additional refinements. --- src/ScraperProxy/scraper-standalone.cpp | 8 ++++++++ src/ScraperProxy/scraper.cpp | 21 +++++++++++++++++---- src/ScraperProxy/scraper.h | 9 +++++---- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ScraperProxy/scraper-standalone.cpp b/src/ScraperProxy/scraper-standalone.cpp index e4b9b9f1cb..3e60a3b1d4 100755 --- a/src/ScraperProxy/scraper-standalone.cpp +++ b/src/ScraperProxy/scraper-standalone.cpp @@ -6,6 +6,9 @@ #include #include +#include + + bool fShutdown = false; bool fDebug = true; @@ -53,3 +56,8 @@ bool Contains(const std::string& data, const std::string& instring) { return data.find(instring) != std::string::npos; } + +boost::filesystem::path GetDataDir() +{ + return boost::filesystem::current_path(); +} \ No newline at end of file diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index b7dcccdf25..4755602567 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -71,11 +71,18 @@ void Scraper(bool fScraperStandalone) // remove it. Manifest::iterator entry; - if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "Beacon.csv.gz" && fs::is_regular_file(dir)) + std::string filename = dir.path().filename().c_str(); + + if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "BeaconList.csv.gz" && fs::is_regular_file(dir)) { + _log(INFO, "Scraper", "Checking files in Scraper directory to see if in Manifest: " + filename); + entry = mManifest.find(dir.path().filename().c_str()); if (entry == mManifest.end()) + { fs::remove(dir.path()); + _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); + } } } } @@ -83,8 +90,14 @@ void Scraper(bool fScraperStandalone) // Now iterate through the Manifest map and remove Manifest entries with no file. for (auto const& entry : mManifest) { + _log(INFO, "Scraper", "Checking mManifest entries to see if corresponding file is present in Scraper directory: " + entry.first); + if(!fs::exists(pathScraper / entry.first)) + { + _log(WARNING, "Scraper", "Removing orphan mManifest entry: " + entry.first); + mManifest.erase(entry.first); + } } } } @@ -524,10 +537,10 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil std::string gzetagfile = ""; // If einstein we store different - if (file.string().find("einstein") != std::string::npos) - gzetagfile = "einstein_user.gz"; +// if (file.string().find("einstein") != std::string::npos) +// gzetagfile = "einstein_user-ByCPID.gz"; - else +// else gzetagfile = project + "-" + etag + "-ByCPID" + ".gz"; std::string gzetagfile_no_path = gzetagfile; diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 1fb38f3160..4896490f4e 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -33,6 +33,7 @@ #else #include //#include +#include "uint256.h" extern int64_t GetAdjustedTime(); extern bool Contains(const std::string& data, const std::string& instring); #endif @@ -508,7 +509,7 @@ class logger logger() { - fs::path plogfile = fs::current_path() / "scraper.log"; + fs::path plogfile = GetDataDir() / "scraper.log"; logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); @@ -778,7 +779,7 @@ class userpass { vuserpass.clear(); - fs::path plistfile = fs::current_path() / "userpass.dat"; + fs::path plistfile = GetDataDir() / "userpass.dat"; userpassfile.open(plistfile.c_str(), std::ios_base::in); @@ -836,7 +837,7 @@ class authdata authdata(const std::string& project) { std::string outfile = project + "_auth.dat"; - fs::path poutfile = fs::current_path() / outfile.c_str(); + fs::path poutfile = GetDataDir() / outfile.c_str(); oauthdata.open(poutfile.c_str(), std::ios_base::out | std::ios_base::app); @@ -902,7 +903,7 @@ class nntester nntester() { - fs::path plogfile = fs::current_path() / "scraper.time"; + fs::path plogfile = GetDataDir() / "scraper.time"; logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); From a9b42be260b463bea4c3061a745efc901255fcdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Fri, 16 Nov 2018 20:46:40 +0100 Subject: [PATCH 013/359] Split CDataStream into reader and read-writer class. --- src/serialize.h | 300 +++++++++++++++++++++++++++--------------------- 1 file changed, 172 insertions(+), 128 deletions(-) diff --git a/src/serialize.h b/src/serialize.h index e0531656c9..770f541678 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -736,75 +736,201 @@ class CSizeComputer } }; -/** Double ended buffer combining vector and stream-like interfaces. +/** Double ended buffer wrapper combining vector and stream-like interfaces. * - * >> and << read and write unformatted data using the above serialization templates. - * Fills with data in linear time; some stringstream implementations take N^2 time. + * Operator >> read unformatted data using the above serialization templates. + * Takes the buffer by reference which means it must reamin valid. */ -class CDataStream +class CReaderStream { -protected: + protected: typedef CSerializeData vector_type; - vector_type vch; + private: + const vector_type& vch; + protected: unsigned int nReadPos; short state; short exceptmask; -public: - int nType; - int nVersion; - typedef vector_type::allocator_type allocator_type; + public: + typedef vector_type::size_type size_type; typedef vector_type::difference_type difference_type; - typedef vector_type::reference reference; typedef vector_type::const_reference const_reference; typedef vector_type::value_type value_type; - typedef vector_type::iterator iterator; typedef vector_type::const_iterator const_iterator; - typedef vector_type::reverse_iterator reverse_iterator; - explicit CDataStream(int nTypeIn, int nVersionIn) + int nType; + int nVersion; + + CReaderStream(const CSerializeData& ivch, unsigned int iPos = 0, int iType = SER_NETWORK, int iVersion = 1) + :vch(ivch) + ,nReadPos(iPos) + ,state(0) + ,exceptmask(std::ios::badbit | std::ios::failbit) + ,nType(iType) + ,nVersion(iVersion) + {}; + + std::string str() const { - Init(nTypeIn, nVersionIn); + return (std::string(begin(), end())); } - CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn, int nVersionIn) : vch(pbegin, pend) + // + // Vector subset + // + const_iterator begin() const { return vch.begin() + nReadPos; } + const_iterator end() const { return vch.end(); } + size_type size() const { return vch.size() - nReadPos; } + bool empty() const { return vch.size() == nReadPos; } + + bool Rewind(size_type n) { - Init(nTypeIn, nVersionIn); + // Rewind by n characters if the buffer hasn't been compacted yet + if (n > nReadPos) + return false; + nReadPos -= n; + return true; } -#if !defined(_MSC_VER) || _MSC_VER >= 1300 - CDataStream(const char* pbegin, const char* pend, int nTypeIn, int nVersionIn) : vch(pbegin, pend) + + // + // Stream subset + // + void setstate(short bits, const char* psz) { - Init(nTypeIn, nVersionIn); + state |= bits; + if (state & exceptmask) + throw std::ios_base::failure(psz); } -#endif - CDataStream(const vector_type& vchIn, int nTypeIn, int nVersionIn) : vch(vchIn.begin(), vchIn.end()) + bool eof() const { return size() == 0; } + bool fail() const { return state & (std::ios::badbit | std::ios::failbit); } + bool good() const { return !eof() && (state == 0); } + void clear(short n) { state = n; } // name conflict with vector clear() + short exceptions() { return exceptmask; } + short exceptions(short mask) { short prev = exceptmask; exceptmask = mask; setstate(0, "CDataStream"); return prev; } + CReaderStream* rdbuf() { return this; } + + int in_avail() { return size(); } + void SetType(int n) { nType = n; } + int GetType() { return nType; } + void SetVersion(int n) { nVersion = n; } + int GetVersion() { return nVersion; } + void ReadVersion() { *this >> nVersion; } + + CReaderStream& read(char* pch, int nSize) { - Init(nTypeIn, nVersionIn); + // Read from the beginning of the buffer + assert(nSize >= 0); + unsigned int nReadPosNext = nReadPos + nSize; + if (nReadPosNext >= vch.size()) + { + if (nReadPosNext > vch.size()) + { + setstate(std::ios::failbit, "CDataStream::read() : end of data"); + memset(pch, 0, nSize); + nSize = vch.size() - nReadPos; + } + memcpy(pch, &vch[nReadPos], nSize); + /* FIXME: this was here in CDataStream, but now vch is const so we can not do this. + nReadPos = 0; + vch.clear(); + */ + return (*this); + } + memcpy(pch, &vch[nReadPos], nSize); + nReadPos = nReadPosNext; + return (*this); } - CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) : vch(vchIn.begin(), vchIn.end()) + CReaderStream& ignore(int nSize) { - Init(nTypeIn, nVersionIn); + // Ignore from the beginning of the buffer + assert(nSize >= 0); + unsigned int nReadPosNext = nReadPos + nSize; + if (nReadPosNext >= vch.size()) + { + if (nReadPosNext > vch.size()) + setstate(std::ios::failbit, "CDataStream::ignore() : end of data"); + /* FIXME: this was here in CDataStream, but now vch is const so we can not do this. + nReadPos = 0; + vch.clear(); + */ + return (*this); + } + nReadPos = nReadPosNext; + return (*this); } - CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) + template + void Serialize(Stream& s, int nType, int nVersion) const { - Init(nTypeIn, nVersionIn); + // Special case: stream << stream concatenates like stream += stream + if (!vch.empty()) + s.write((char*)&vch[0], vch.size() * sizeof(vch[0])); } - void Init(int nTypeIn, int nVersionIn) + template + CReaderStream& operator>>(T& obj) { - nReadPos = 0; - nType = nTypeIn; - nVersion = nVersionIn; - state = 0; - exceptmask = std::ios::badbit | std::ios::failbit; + // Unserialize from this stream + ::Unserialize(*this, obj, nType, nVersion); + return (*this); } - CDataStream& operator+=(const CDataStream& b) +}; + +/** Double ended buffer combining vector and stream-like interfaces. + * + * >> and << read and write unformatted data using the above serialization templates. + * Fills with data in linear time; some stringstream implementations take N^2 time. + */ +class CDataStream + :public CReaderStream +{ +protected: + vector_type vch; +public: + + typedef vector_type::allocator_type allocator_type; + typedef vector_type::reference reference; + typedef vector_type::iterator iterator; + typedef vector_type::reverse_iterator reverse_iterator; + + explicit CDataStream(int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + {} + + CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + ,vch(pbegin, pend) + {} + +#if !defined(_MSC_VER) || _MSC_VER >= 1300 + CDataStream(const char* pbegin, const char* pend, int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + ,vch(pbegin, pend) + {} +#endif + + CDataStream(const vector_type& vchIn, int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + ,vch(vchIn.begin(), vchIn.end()) + {} + + CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + ,vch(vchIn.begin(), vchIn.end()) + {} + + CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) + :CReaderStream(vch,0,nTypeIn,nVersionIn) + ,vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) + {} + + CDataStream& operator+=(const CReaderStream& b) { vch.insert(vch.end(), b.begin(), b.end()); return *this; @@ -817,21 +943,12 @@ class CDataStream return (ret); } - std::string str() const - { - return (std::string(begin(), end())); - } - // // Vector subset // - const_iterator begin() const { return vch.begin() + nReadPos; } iterator begin() { return vch.begin() + nReadPos; } - const_iterator end() const { return vch.end(); } iterator end() { return vch.end(); } - size_type size() const { return vch.size() - nReadPos; } - bool empty() const { return vch.size() == nReadPos; } void resize(size_type n, value_type c=0) { vch.resize(n + nReadPos, c); } void reserve(size_type n) { vch.reserve(n + nReadPos); } const_reference operator[](size_type pos) const { return vch[pos + nReadPos]; } @@ -911,82 +1028,13 @@ class CDataStream nReadPos = 0; } - bool Rewind(size_type n) - { - // Rewind by n characters if the buffer hasn't been compacted yet - if (n > nReadPos) - return false; - nReadPos -= n; - return true; - } - // // Stream subset // - void setstate(short bits, const char* psz) - { - state |= bits; - if (state & exceptmask) - throw std::ios_base::failure(psz); - } - - bool eof() const { return size() == 0; } - bool fail() const { return state & (std::ios::badbit | std::ios::failbit); } - bool good() const { return !eof() && (state == 0); } - void clear(short n) { state = n; } // name conflict with vector clear() - short exceptions() { return exceptmask; } - short exceptions(short mask) { short prev = exceptmask; exceptmask = mask; setstate(0, "CDataStream"); return prev; } - CDataStream* rdbuf() { return this; } - int in_avail() { return size(); } - void SetType(int n) { nType = n; } - int GetType() { return nType; } - void SetVersion(int n) { nVersion = n; } - int GetVersion() { return nVersion; } - void ReadVersion() { *this >> nVersion; } void WriteVersion() { *this << nVersion; } - CDataStream& read(char* pch, int nSize) - { - // Read from the beginning of the buffer - assert(nSize >= 0); - unsigned int nReadPosNext = nReadPos + nSize; - if (nReadPosNext >= vch.size()) - { - if (nReadPosNext > vch.size()) - { - setstate(std::ios::failbit, "CDataStream::read() : end of data"); - memset(pch, 0, nSize); - nSize = vch.size() - nReadPos; - } - memcpy(pch, &vch[nReadPos], nSize); - nReadPos = 0; - vch.clear(); - return (*this); - } - memcpy(pch, &vch[nReadPos], nSize); - nReadPos = nReadPosNext; - return (*this); - } - - CDataStream& ignore(int nSize) - { - // Ignore from the beginning of the buffer - assert(nSize >= 0); - unsigned int nReadPosNext = nReadPos + nSize; - if (nReadPosNext >= vch.size()) - { - if (nReadPosNext > vch.size()) - setstate(std::ios::failbit, "CDataStream::ignore() : end of data"); - nReadPos = 0; - vch.clear(); - return (*this); - } - nReadPos = nReadPosNext; - return (*this); - } - CDataStream& write(const char* pch, int nSize) { // Write to the end of the buffer @@ -995,14 +1043,6 @@ class CDataStream return (*this); } - template - void Serialize(Stream& s, int nType, int nVersion) const - { - // Special case: stream << stream concatenates like stream += stream - if (!vch.empty()) - s.write((char*)&vch[0], vch.size() * sizeof(vch[0])); - } - template unsigned int GetSerializeSize(const T& obj) { @@ -1018,18 +1058,22 @@ class CDataStream return (*this); } - template - CDataStream& operator>>(T& obj) - { - // Unserialize from this stream - ::Unserialize(*this, obj, nType, nVersion); - return (*this); - } - void GetAndClear(CSerializeData &data) { data.insert(data.end(), begin(), end()); clear(); } + + CDataStream& operator= (CDataStream&& s) { + /* c++ is being mean so I had to define this */ + vch= std::move(s.vch); + nReadPos= s.nReadPos; + state= s.state; + exceptmask= s.exceptmask; + nType= s.nType; + nVersion= s.nVersion; + return *this; + } + CDataStream (const CDataStream& s) = default; }; From c2e1183aa08b4a84b62ed8ded90c1537bb1addf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Fri, 16 Nov 2018 20:49:33 +0100 Subject: [PATCH 014/359] Add framework for scraper data propagation. --- src/Makefile.am | 2 + src/net.h | 2 + src/protocol.cpp | 2 + src/scraper_net.cpp | 206 ++++++++++++++++++++++++++++++++++++++++++++ src/scraper_net.h | 97 +++++++++++++++++++++ 5 files changed, 309 insertions(+) create mode 100644 src/scraper_net.cpp create mode 100644 src/scraper_net.h diff --git a/src/Makefile.am b/src/Makefile.am index b6c8539abd..e5478eff14 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -95,6 +95,7 @@ GRIDCOIN_CORE_H = \ rpcclient.h \ rpcprotocol.h \ rpcserver.h \ + scraper_net.h \ script.h \ scrypt.h \ serialize.h \ @@ -150,6 +151,7 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ rpcserver.cpp \ rpcwallet.cpp \ rpcdataacq.cpp \ + scraper_net.cpp \ script.cpp \ scrypt.cpp \ sync.cpp \ diff --git a/src/net.h b/src/net.h index 237cc7fdca..10fe44e25f 100644 --- a/src/net.h +++ b/src/net.h @@ -81,6 +81,8 @@ enum { MSG_TX = 1, MSG_BLOCK, + MSG_PART, + MSG_SCRAPERINDEX, }; diff --git a/src/protocol.cpp b/src/protocol.cpp index 490e3faa53..fa2faa93cd 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -16,6 +16,8 @@ static const char* ppszTypeName[] = "ERROR", "tx", "block", + "part", + "scraperindex0", }; CMessageHeader::CMessageHeader() diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp new file mode 100644 index 0000000000..c579e964c6 --- /dev/null +++ b/src/scraper_net.cpp @@ -0,0 +1,206 @@ +/* scraper_net.cpp */ +#include "net.h" +#include "scraper_net.h" + +//Globals +std::map CSplitBlob::mapParts; +std::map< uint256, CScraperManifest > CScraperManifest::mapManifest; + +bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) +{ + /* Part of larger hashed blob. Currently only used for scraper data sharing. + * retrive parent object from mapBlobParts + * notify object or ignore if no object found + * erase from mapAlreadyAskedFor + */ + auto& ss= vRecv; + uint256 hash(Hash(ss.begin(), ss.end())); + mapAlreadyAskedFor.erase(CInv(MSG_PART,hash)); + + auto ipart= mapParts.find(hash); + + if(ipart!=mapParts.end()) + { + CPart& part= ipart->second; + assert(vRecv.size()>0); + if(part.data.empty()) + { + part.data= CSerializeData(vRecv.begin(),vRecv.end()); //TODO: replace with move constructor + for( const auto& ref : part.refs ) + { + CSplitBlob& split= *ref.first; + ++split.cntPartsRcvd; + assert(split.cntPartsRcvd <= split.vParts.size()); + if( split.cntPartsRcvd == split.vParts.size() ) + { + split.Complete(); + } + } + return true; + } else { + return error("Duplicate part received!"); + } + } else { + pfrom->Misbehaving(10); + return error("Unknown part received!"); + } +} + +void CSplitBlob::addPart(const uint256& ihash) +{ + assert( ihash != Hash(vParts.end(),vParts.end()) ); + unsigned n= vParts.size(); + auto rc= mapParts.emplace(ihash,CPart(ihash)); + CPart& part= rc.first->second; + /* add to local vector */ + vParts.push_back(&part); + /* nature of set ensures no duplicates */ + part.refs.emplace(this, n); +} + +CSplitBlob::~CSplitBlob() +{ + for(unsigned n= 0; n(this,n)); + if(part.refs.empty()) + mapParts.erase(part.hash); + } +} + +void CSplitBlob::UseAsSource(CNode* pfrom) +{ + for ( const CPart* part : vParts ) + { + /*Actually request the part. Inventory system will prevent redundant requests.*/ + pfrom->AskFor(CInv(MSG_PART, part->hash)); + } +} + +bool CSplitBlob::SendPartTo(CNode* pto, const uint256& hash) +{ + auto ipart= mapParts.find(hash); + + if(ipart!=mapParts.end()) + { + pto->PushMessage("part",ipart->second.data); + return true; + } + else return false; +} + +bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) +{ + if( MSG_SCRAPERINDEX !=inv.type ) + { + /* For any other objects, just say that we do not need it: */ + return true; + } + + /* Inv-entory notification about scraper data index + * see if we already have it + * if yes, relay pfrom to Parts system as a fetch source and return true + * else return false + */ + auto found = mapManifest.find(inv.hash); + if( found!=mapManifest.end() ) + { + found->second.UseAsSource(pfrom); + return true; + } + else + { + return false; + } +} + +void CScraperManifest::PushInvTo(CNode* pto) +{ + /* send all keys from the index map as inventory */ + for (auto const& obj : mapManifest) + { + pto->PushInventory(CInv(MSG_SCRAPERINDEX, obj.first)); + } +} + + +bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) +{ + auto it= mapManifest.find(hash); + if(it==mapManifest.end()) + return false; + pto->PushMessage("scraperindex0", it->second); + return true; +} + + +void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const +{ + ss << testName; + for( const auto part : vParts ) + ss << part->data; +} + +void CScraperManifest::UnserializeCheck(CReaderStream& ss) +{ + uint256 rh; + ss >> testName; + ss >> rh; + addPart(rh); + if(0==1) + throw error("kek"); +} + +bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) +{ + /* Index object for scraper data. + * deserialize message + * hash + * see if we do not already have it + * validate the message + * populate the maps + * request parts + */ + /* hash the object */ + uint256 hash(Hash(vRecv.begin(), vRecv.end())); + /* see if we do not already have it */ + if( AlreadyHave(pfrom,CInv(MSG_SCRAPERINDEX, hash)) ) + { + return error("Already have this ScraperManifest"); + } + CScraperManifest& manifest = mapManifest[hash]; + try { + //void Unserialize(Stream& s, int nType, int nVersion) + manifest.UnserializeCheck(vRecv); + } catch(bool& e) { + mapManifest.erase(hash); + return false; + } catch(std::ios_base::failure& e) { + mapManifest.erase(hash); + return false; + } + manifest.UseAsSource(pfrom); + return true; +} + +void CScraperManifest::Complete() +{ + /* Do something */ + std::string bodystr; + CReaderStream(vParts[0]->data) >> bodystr; + printf("CScraperManifest::Complete(): %s %s\n",testName.c_str(),bodystr.c_str()); +} + +/* how? + * Should we only request objects that we need? + * Because nodes should only have valid data, download anuthing they send. + * They should only send what we requested, but we do not know what it is, + * until we have it, let it pass. + * There is 32MiB message size limit. There is a chance we could hit it, so + * splitting is necesssary. Index object with list of parts is needed. + * + * If inv about index is received, and we do not know about it yet, just + * getdata it. If it turns out useless, just ban the node. Then getdata the + * parts from the node. +*/ diff --git a/src/scraper_net.h b/src/scraper_net.h new file mode 100644 index 0000000000..195de3ca76 --- /dev/null +++ b/src/scraper_net.h @@ -0,0 +1,97 @@ +/* scraper_net.h */ + +/* Maybe the parts system will be usefull for other things so let's abstract + * that to parent class. Sice it will be all in one file there will not be any + * polymorfism. +*/ +/** Abstract class for blobs that are split into parts. */ +class CSplitBlob +{ + public: + + /** Parts of the Split object */ + struct CPart { + std::set> refs; + CSerializeData data; + uint256 hash; + CPart(const uint256& ihash) + :hash(ihash) + {} + }; + + /** Process a message containing Part of Blob. + * @return whether the data was useful + */ + static bool RecvPart(CNode* pfrom, CDataStream& vRecv); + + /** Notification that this Split object is fully received. */ + virtual void Complete() = 0; + + /** Use the node as download source for this Split object. */ + void UseAsSource(CNode* pnode); + + /** Forward requested Part of Blob. + * @returns whether something was sent + */ + static bool SendPartTo(CNode* pto, const uint256& hash); + + std::vector vParts; + + /** Add a part reference to vParts. Creates a CPart if necessary. */ + void addPart(const uint256& ihash); + + /** Unref all parts referenced by this. Removes parts with no references */ + ~CSplitBlob(); + + private: + /* We could store the parts in mapRelay and have getdata service for free. */ + /** map from part hash to scraper Index, so we can attach incoming Part in Index */ + static std::map mapParts; + unsigned cntPartsRcvd; + +}; + +/** A objects holding info about the scraper data file we have or are downloading. */ +class CScraperManifest + : CSplitBlob +{ + /** map from index hash to scraper Index, so we can process Inv messages */ + static std::map< uint256, CScraperManifest > mapManifest; + + public: /* static methods */ + + /** Process a message containing Index of Scraper Data. + * @returns whether the data was useful and valid + */ + static bool RecvManifest(CNode* pfrom, CDataStream& vRecv); + + /** Check if we already have this object. + * @returns false only if we need this object + * Additionally sender node is used as fetch source if needed + */ + static bool AlreadyHave(CNode* pfrom, const CInv& inv); + + /** Send Inv to that node about data files we have. + * Called when a node connects. + */ + static void PushInvTo(CNode* pto); + + /** Send a manifest of requested hash to node (from mapManifest). + * @returns whether something was sent + */ + static bool SendManifestTo(CNode* pfrom, const uint256& hash); + + public: /* fields */ + //uint256 hash; + std::string testName; + + public: /* public methods */ + + /** Hook called when all parts are available */ + virtual void Complete() override; + + /** Serialize this object for seding over the network. */ + void Serialize(CDataStream& s, int nType, int nVersion) const; + void UnserializeCheck(CReaderStream& s); + +}; From 9fb5e4c167fafa828fb8528c886722d6bf85fc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Fri, 16 Nov 2018 20:51:12 +0100 Subject: [PATCH 015/359] Hook scraper data propagation framework into main.cpp --- src/main.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 42ee39d04a..89405e97b3 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,6 +27,7 @@ #include "tally.h" #include "contract/contract.h" #include "contract/superblock.h" +#include "scraper_net.h" #include #include @@ -6482,6 +6483,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, item.second.RelayTo(pfrom); } + /* Notify the peer about statsscraper blobs we have */ + CScraperManifest::PushInvTo(pfrom); + pfrom->fSuccessfullyConnected = true; if (fDebug10) LogPrintf("receive version message: version %d, blocks=%d, us=%s, them=%s, peer=%s", pfrom->nVersion, @@ -6605,6 +6609,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->AddInventoryKnown(inv); bool fAlreadyHave = AlreadyHave(txdb, inv); + + /* Check also the scraper data propagation system to see if it needs + * this inventory object */ + fAlreadyHave = fAlreadyHave && CScraperManifest::AlreadyHave(pfrom, inv); + if (fDebug10) LogPrintf(" got inventory: %s %s", inv.ToString(), fAlreadyHave ? "have" : "new"); @@ -6698,6 +6707,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->PushMessage("tx", ss); } } + else if(!pushed && MSG_PART == inv.type ) { + CSplitBlob::SendPartTo(pfrom, inv.hash); + } + else if(!pushed && MSG_SCRAPERINDEX == inv.type ) { + CScraperManifest::SendManifestTo(pfrom, inv.hash); + } } // Track requests for our stuff @@ -7123,6 +7138,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } + else if (strCommand == "scraperindex0") + { + CScraperManifest::RecvManifest(pfrom,vRecv); + } + else if (strCommand == "part") + { + CSplitBlob::RecvPart(pfrom,vRecv); + } + else { @@ -8010,7 +8034,12 @@ bool SendMessages(CNode* pto, bool fSendTrickle) while (!pto->mapAskFor.empty() && (*pto->mapAskFor.begin()).first <= nNow) { const CInv& inv = (*pto->mapAskFor.begin()).second; - if (!AlreadyHave(txdb, inv)) + + // Brod: do not request stuff if it was already removed from this map + // TODO: check thread safety + const auto iaaf= mapAlreadyAskedFor.find(inv); + + if ( iaaf!=mapAlreadyAskedFor.end() && !AlreadyHave(txdb, inv) ) { if (fDebugNet) LogPrintf("sending getdata: %s", inv.ToString()); vGetData.push_back(inv); @@ -8019,7 +8048,8 @@ bool SendMessages(CNode* pto, bool fSendTrickle) pto->PushMessage("getdata", vGetData); vGetData.clear(); } - mapAlreadyAskedFor[inv] = nNow; + + // mapAlreadyAskedFor[inv] = nNow; //TODO: check why this was here } pto->mapAskFor.erase(pto->mapAskFor.begin()); } From f59e64216fac6b897960e7ebeacb5d5b2f50df5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Fri, 16 Nov 2018 20:51:42 +0100 Subject: [PATCH 016/359] Fix annoying warnings in main.cpp --- src/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 89405e97b3..690e90a93e 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -968,6 +968,8 @@ MiningCPID GetNextProject(bool bForce) LogPrintf("CPID INVALID (GetNextProject) %s, %s ",GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.cpidv2); continue; } +# else + (void)bResult; # endif @@ -5869,7 +5871,7 @@ bool TallyResearchAverages_retired(CBlockIndex* index) bNetAveragesLoaded = true; return true; } - catch (bad_alloc ba) + catch (bad_alloc& ba) { LogPrintf("Bad Alloc while tallying network averages. [1]"); bNetAveragesLoaded=true; @@ -6686,7 +6688,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } } - else if (inv.IsKnownType()) + else if (inv.IsKnownType()) { // Send stream from relay memory bool pushed = false; From dcb36ab954a6c2fe63074e7b1e44c5d97a547c72 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 16 Nov 2018 15:27:31 -0500 Subject: [PATCH 017/359] First part of file culling (obscelescence mgt). --- src/ScraperProxy/scraper.cpp | 113 ++++++++++++++++++++--------------- src/ScraperProxy/scraper.h | 2 + 2 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 4755602567..ff3f68483c 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -19,11 +19,6 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); void AuthenticationETagClear(); -// No header storage by day number gz -// bool xDownloadProjectTeamFiles(); -// int64_t xProcessProjectTeamFile(const fs::path& file); -// bool xDownloadProjectRacFiles(); -// bool xProcessProjectRacFile(const fs::path& file, int64_t teamid); int GetDayOfYear(int64_t timestamp); void testdata(const std::string& etag); @@ -64,11 +59,11 @@ void Scraper(bool fScraperStandalone) // Lock the manifest while it is being manipulated. { LOCK(cs_mManifest); - + + // Check to see if the file exists in the manifest. If it doesn't + // remove it. for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - // Check to see if the file exists in the manifest. If it doesn't - // remove it. Manifest::iterator entry; std::string filename = dir.path().filename().c_str(); @@ -85,22 +80,22 @@ void Scraper(bool fScraperStandalone) } } } - } - // Now iterate through the Manifest map and remove Manifest entries with no file. - for (auto const& entry : mManifest) - { - _log(INFO, "Scraper", "Checking mManifest entries to see if corresponding file is present in Scraper directory: " + entry.first); - - if(!fs::exists(pathScraper / entry.first)) + // Now iterate through the Manifest map and remove Manifest entries with no file. + for (auto const& entry : mManifest) { - _log(WARNING, "Scraper", "Removing orphan mManifest entry: " + entry.first); + _log(INFO, "Scraper", "Checking mManifest entries to see if corresponding file is present in Scraper directory: " + entry.first); - mManifest.erase(entry.first); + if(!fs::exists(pathScraper / entry.first)) + { + _log(WARNING, "Scraper", "Removing orphan mManifest entry: " + entry.first); + + mManifest.erase(entry.first); + } } } } - } + } else fs::create_directory(pathScraper); @@ -712,27 +707,47 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::remove(file); - ManifestEntry ManifestEntry; + ManifestEntry NewRecord; // Don't include path in Manifest, because this is local node dependent. - ManifestEntry.filename = gzetagfile_no_path; - ManifestEntry.hash = nFileHash; - ManifestEntry.timestamp = GetAdjustedTime(); + NewRecord.filename = gzetagfile_no_path; + NewRecord.project = project; + NewRecord.hash = nFileHash; + NewRecord.timestamp = GetAdjustedTime(); + // By definition the record we are about to insert is current. If a new file is downloaded for + // a given project, it has to be more up to date than any others. + NewRecord.current = true; + + // Code block to lock mManifest during record insertion and delete because we want this atomic. + { + LOCK(cs_mManifest); + + // Iterate mManifest to find any prior records for the same project and change current flag to false. + Manifest::iterator entry; + for (entry = mManifest.begin(); entry != mManifest.end(); ++entry) + { + if (entry->second.project == project) + { + _log(INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest entry as current = false."); + entry->second.current = false; + } + } - if(!InsertManifestEntry(ManifestEntry)) - _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); - else - _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); - - // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. - // The manifest file is actually very small though, and this primitive implementation will suffice. I could - // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of - // sync if the wallet is ended during the middle of pulling the files. - _log(INFO, "Scraper", "Persisting manifest entry to disk."); - if(!StoreManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "StoreManifest error occurred"); - else - _log(INFO, "Scraper", "Stored Manifest"); + if(!InsertManifestEntry(NewRecord)) + _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); + else + _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); + + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. I could + // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of + // sync if the wallet is ended during the middle of pulling the files. + _log(INFO, "Scraper", "Persisting manifest entry to disk."); + if(!StoreManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "StoreManifest error occurred"); + else + _log(INFO, "Scraper", "Stored Manifest"); + } _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -841,14 +856,12 @@ bool StoreBeaconList(const fs::path& file) ************************/ -// Insert entry into Manifest +// Insert entry into Manifest. Note that cs_mManifest needs to be taken before calling. bool InsertManifestEntry(ManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. std::pair ret; { - LOCK(cs_mManifest); - ret = mManifest.insert(std::make_pair(entry.filename, entry)); } @@ -856,13 +869,11 @@ bool InsertManifestEntry(ManifestEntry entry) return ret.second; } -// Delete entry from Manifest +// Delete entry from Manifest. Note that cs_mManifest needs to be taken before calling. unsigned int DeleteManifestEntry(ManifestEntry entry) { unsigned int ret; { - LOCK(cs_mManifest); - ret = mManifest.erase(entry.filename); } @@ -898,19 +909,19 @@ bool LoadManifest(const fs::path& file) std::vector vline = split(line, ","); - //std::istringstream sshash(vline[0]); - //sshash >> nhash; - //LoadEntry.hash = nhash; - uint256 nhash; nhash.SetHex(vline[0].c_str()); LoadEntry.hash = nhash; - std::istringstream sstimestamp(vline[1]); + LoadEntry.current = std::stoi(vline[1]); + + std::istringstream sstimestamp(vline[2]); sstimestamp >> ntimestamp; LoadEntry.timestamp = ntimestamp; + + LoadEntry.project = vline[3]; - LoadEntry.filename = vline[2]; + LoadEntry.filename = vline[4]; InsertManifestEntry(LoadEntry); } @@ -947,7 +958,11 @@ bool StoreManifest(const fs::path& file) { uint256 nEntryHash = entry.second.hash; - std::string sManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.timestamp) + "," + entry.first + "\n"; + std::string sManifestEntry = nEntryHash.GetHex() + "," + + std::to_string(entry.second.current) + "," + + std::to_string(entry.second.timestamp) + "," + + entry.second.project + "," + + entry.first + "\n"; stream << sManifestEntry; } } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 4896490f4e..d747116f27 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -72,8 +72,10 @@ bool LoadManifest(const fs::path& file); struct ManifestEntry { std::string filename; // Filename + std::string project; uint256 hash; // hash of file int64_t timestamp; + bool current; }; typedef std::map Manifest; From 26dabbfb32a5174fbd566acabb9f21f5fbfa6486 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 17 Nov 2018 00:25:42 -0500 Subject: [PATCH 018/359] 2nd part of file culling --- src/ScraperProxy/scraper.cpp | 60 ++++++++++++++++++++++++------------ src/ScraperProxy/scraper.h | 7 +++++ src/init.cpp | 3 ++ 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index ff3f68483c..209e8fdb0c 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -23,10 +23,11 @@ int GetDayOfYear(int64_t timestamp); void testdata(const std::string& etag); -// Note these three are initialized here for standalone mode compile, but will be overwritten by +// Note these four are initialized here for standalone mode compile, but will be overwritten by // the values from GetArg in init.cpp when compiled as part of the wallet. unsigned int nScraperSleep = 60000; unsigned int nActiveBeforeSB = 300; +bool fScraperRetainNonCurrentFiles = false; boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); @@ -62,16 +63,16 @@ void Scraper(bool fScraperStandalone) // Check to see if the file exists in the manifest. If it doesn't // remove it. + Manifest::iterator entry; + for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - Manifest::iterator entry; + std::string filename = dir.path().filename().c_str(); if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "BeaconList.csv.gz" && fs::is_regular_file(dir)) { - _log(INFO, "Scraper", "Checking files in Scraper directory to see if in Manifest: " + filename); - entry = mManifest.find(dir.path().filename().c_str()); if (entry == mManifest.end()) { @@ -81,16 +82,19 @@ void Scraper(bool fScraperStandalone) } } - // Now iterate through the Manifest map and remove Manifest entries with no file. - for (auto const& entry : mManifest) + // Now iterate through the Manifest map and remove entries with no file, or entries and files older than + // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time + //if fScraperRetainNonCurrentFiles is false. + for (entry = mManifest.begin(); entry != mManifest.end(); ) { - _log(INFO, "Scraper", "Checking mManifest entries to see if corresponding file is present in Scraper directory: " + entry.first); - - if(!fs::exists(pathScraper / entry.first)) + Manifest::iterator entry_copy = entry++; + + if (!fs::exists(pathScraper / entry_copy->first) + || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) + || (!fScraperRetainNonCurrentFiles && entry_copy->second.current == false)) { - _log(WARNING, "Scraper", "Removing orphan mManifest entry: " + entry.first); - - mManifest.erase(entry.first); + _log(WARNING, "Scraper", "Removing stale or orphan manifest entry: " + entry_copy->first); + DeleteManifestEntry(entry_copy->second); } } } @@ -722,14 +726,27 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil { LOCK(cs_mManifest); - // Iterate mManifest to find any prior records for the same project and change current flag to false. + // Iterate mManifest to find any prior records for the same project and change current flag to false, + // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles + // is false. + Manifest::iterator entry; - for (entry = mManifest.begin(); entry != mManifest.end(); ++entry) + for (entry = mManifest.begin(); entry != mManifest.end(); ) { - if (entry->second.project == project) + Manifest::iterator entry_copy = entry++; + + if (entry_copy->second.project == project && entry_copy->second.current == true) { _log(INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest entry as current = false."); - entry->second.current = false; + entry_copy->second.current = false; + } + + // If records are older than SCRAPER_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, + // delete all non-current records, including the one just marked non-current. + if (((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) + || (entry_copy->second.project == project && entry_copy->second.current == false && !fScraperRetainNonCurrentFiles)) + { + DeleteManifestEntry(entry_copy->second); } } @@ -869,13 +886,16 @@ bool InsertManifestEntry(ManifestEntry entry) return ret.second; } -// Delete entry from Manifest. Note that cs_mManifest needs to be taken before calling. +// Delete entry from Manifest and corresponding file if it exists. Note that cs_mManifest needs to be taken before calling. unsigned int DeleteManifestEntry(ManifestEntry entry) { unsigned int ret; - { - ret = mManifest.erase(entry.filename); - } + + // Delete corresponding file if it exists. + if(fs::exists(pathScraper / entry.filename)) + fs::remove(pathScraper /entry.filename); + + ret = mManifest.erase(entry.filename); // Returns number of elements erased, either 0 or 1. return ret; diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index d747116f27..ddc20e29c2 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -83,6 +83,13 @@ typedef std::map Manifest; bool InsertManifestEntry(ManifestEntry entry); unsigned int DeleteManifestEntry(ManifestEntry entry); +/********************* +* Global Constants * +*********************/ + +// Define 48 hour retention time for stats files, current or not... +static int64_t SCRAPER_FILE_RETENTION_TIME = 48 * 3600; + /********************* * Global Vars * *********************/ diff --git a/src/init.cpp b/src/init.cpp index 0d5b6f825d..af00de1b71 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -50,6 +50,7 @@ extern unsigned int nDerivationMethodIndex; extern unsigned int nMinerSleep; extern unsigned int nScraperSleep; extern unsigned int nActiveBeforeSB; +extern bool fScraperRetainNonCurrentFiles; extern bool fUseFastIndex; extern boost::filesystem::path pathScraper; @@ -383,6 +384,8 @@ bool AppInit2(ThreadHandlerPtr threads) nScraperSleep = std::min(std::max(GetArg("-scrapersleep", 60), (int64_t) 30), (int64_t) 600) * 1000; // Default to 300 sec, clamp to 180 minimum, 86400 maximum (meaning active all of the time). nActiveBeforeSB = std::min(std::max(GetArg("-activebeforesb", 300), (int64_t) 180), (int64_t) 86400); + // Boolean to direct scraper to retain non-current stats files. + fScraperRetainNonCurrentFiles = GetBoolArg("-ScraperRetainNonCurrentFiles"); nDerivationMethodIndex = 0; fTestNet = GetBoolArg("-testnet"); From 7befed6e8c64f0f08023d037430cb4600a57ed5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 09:35:29 +0100 Subject: [PATCH 019/359] Add CURL to build system --- configure.ac | 4 ++++ src/Makefile.am | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e914fed729..383d6f1e6f 100755 --- a/configure.ac +++ b/configure.ac @@ -926,6 +926,7 @@ if test x$use_pkgconfig = xyes; then [ PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)]) PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)]) + PKG_CHECK_MODULES([libcurl], [libcurl],,[AC_MSG_ERROR(libcurl not found.)]) if test x$use_qr != xno; then BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) fi @@ -938,6 +939,9 @@ else AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),) AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing)) + AC_CHECK_HEADER([curl/curl.h],, AC_MSG_ERROR(libcurl headers missing),) + AC_CHECK_LIB([curl], [main],, AC_MSG_ERROR(libcurl missing)) + if test x$use_qr != xno; then BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)]) BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])]) diff --git a/src/Makefile.am b/src/Makefile.am index 32807494d0..414c02ad0f 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,9 +4,9 @@ DIST_SUBDIRS = univalue -AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) +AM_LDFLAGS = ${libcurl_LIBS} $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) -AM_CPPFLAGS = $(HARDENED_CPPFLAGS) -DSTATICLIB -DMINIUPNP_STATICLIB +AM_CPPFLAGS = ${libcurl_CFLAGS} $(HARDENED_CPPFLAGS) -DSTATICLIB -DMINIUPNP_STATICLIB EXTRA_LIBRARIES = if EMBEDDED_UNIVALUE From 418ac09b8daffbda514d41e39ba77f29604dec8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 09:37:59 +0100 Subject: [PATCH 020/359] Fix crashy pointer issues in serialize.h --- src/serialize.h | 90 +++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/serialize.h b/src/serialize.h index 770f541678..6729a914c1 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -745,8 +745,7 @@ class CReaderStream { protected: typedef CSerializeData vector_type; - private: - const vector_type& vch; + const vector_type* vchro; protected: unsigned int nReadPos; short state; @@ -763,8 +762,8 @@ class CReaderStream int nType; int nVersion; - CReaderStream(const CSerializeData& ivch, unsigned int iPos = 0, int iType = SER_NETWORK, int iVersion = 1) - :vch(ivch) + CReaderStream(const CSerializeData* ivch, unsigned int iPos = 0, int iType = SER_NETWORK, int iVersion = 1) + :vchro(ivch) ,nReadPos(iPos) ,state(0) ,exceptmask(std::ios::badbit | std::ios::failbit) @@ -780,10 +779,10 @@ class CReaderStream // // Vector subset // - const_iterator begin() const { return vch.begin() + nReadPos; } - const_iterator end() const { return vch.end(); } - size_type size() const { return vch.size() - nReadPos; } - bool empty() const { return vch.size() == nReadPos; } + const_iterator begin() const { return vchro->begin() + nReadPos; } + const_iterator end() const { return vchro->end(); } + size_type size() const { return vchro->size() - nReadPos; } + bool empty() const { return vchro->size() == nReadPos; } bool Rewind(size_type n) { @@ -825,22 +824,15 @@ class CReaderStream // Read from the beginning of the buffer assert(nSize >= 0); unsigned int nReadPosNext = nReadPos + nSize; - if (nReadPosNext >= vch.size()) + if (nReadPosNext > vchro->size()) { - if (nReadPosNext > vch.size()) - { - setstate(std::ios::failbit, "CDataStream::read() : end of data"); - memset(pch, 0, nSize); - nSize = vch.size() - nReadPos; - } - memcpy(pch, &vch[nReadPos], nSize); - /* FIXME: this was here in CDataStream, but now vch is const so we can not do this. - nReadPos = 0; - vch.clear(); - */ - return (*this); + setstate(std::ios::failbit, "CDataStream::read() : end of data"); + memset(pch, 0, nSize); + if (vchro->size() > nReadPos) + nSize = vchro->size() - nReadPos; + else nSize= 0; } - memcpy(pch, &vch[nReadPos], nSize); + memcpy(pch, &(*vchro)[nReadPos], nSize); nReadPos = nReadPosNext; return (*this); } @@ -850,13 +842,13 @@ class CReaderStream // Ignore from the beginning of the buffer assert(nSize >= 0); unsigned int nReadPosNext = nReadPos + nSize; - if (nReadPosNext >= vch.size()) + if (nReadPosNext >= vchro->size()) { - if (nReadPosNext > vch.size()) + if (nReadPosNext > vchro->size()) setstate(std::ios::failbit, "CDataStream::ignore() : end of data"); - /* FIXME: this was here in CDataStream, but now vch is const so we can not do this. + /* FIXME: this was here in CDataStream, but now vchro is const so we can not do this. nReadPos = 0; - vch.clear(); + vchro->clear(); */ return (*this); } @@ -868,8 +860,8 @@ class CReaderStream void Serialize(Stream& s, int nType, int nVersion) const { // Special case: stream << stream concatenates like stream += stream - if (!vch.empty()) - s.write((char*)&vch[0], vch.size() * sizeof(vch[0])); + if (!vchro->empty()) + s.write((char*)&(*vchro)[0], vchro->size() * sizeof((*vchro)[0])); } template @@ -900,35 +892,35 @@ class CDataStream typedef vector_type::reverse_iterator reverse_iterator; explicit CDataStream(int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) - {} + :CReaderStream(&vch,0,nTypeIn,nVersionIn) + {assert(&vch==vchro);} CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) + :CReaderStream(&vch,0,nTypeIn,nVersionIn) ,vch(pbegin, pend) - {} + {assert(&vch==vchro);} #if !defined(_MSC_VER) || _MSC_VER >= 1300 CDataStream(const char* pbegin, const char* pend, int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) + :CReaderStream(&vch,0,nTypeIn,nVersionIn) ,vch(pbegin, pend) - {} + {assert(&vch==vchro);} #endif CDataStream(const vector_type& vchIn, int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) + :CReaderStream(&vch,0,nTypeIn,nVersionIn) ,vch(vchIn.begin(), vchIn.end()) - {} + {assert(&vch==vchro);} CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) + :CReaderStream(&vch,0,nTypeIn,nVersionIn) ,vch(vchIn.begin(), vchIn.end()) - {} + {assert(&vch==vchro);} CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) - :CReaderStream(vch,0,nTypeIn,nVersionIn) + :CReaderStream(&vch,0,nTypeIn,nVersionIn) ,vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) - {} + {assert(&vch==vchro);} CDataStream& operator+=(const CReaderStream& b) { @@ -1063,9 +1055,11 @@ class CDataStream clear(); } + CDataStream& operator= (CDataStream&& s) { /* c++ is being mean so I had to define this */ vch= std::move(s.vch); + vchro = &vch; nReadPos= s.nReadPos; state= s.state; exceptmask= s.exceptmask; @@ -1073,7 +1067,21 @@ class CDataStream nVersion= s.nVersion; return *this; } - CDataStream (const CDataStream& s) = default; + + CDataStream (const CDataStream& s) + :CReaderStream(&vch,s.nType,s.nVersion) + { + /* c++ is being mean so I had to define this */ + vch= s.vch; + vchro = &vch; + nReadPos= s.nReadPos; + state= s.state; + exceptmask= s.exceptmask; + nType= s.nType; + nVersion= s.nVersion; + } + CDataStream (const CDataStream&& s) = delete; + CDataStream& operator= (CDataStream& s) = delete; }; From 49c5584f76a0ccceffe189c8c6cc6fb764d0daae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 09:39:52 +0100 Subject: [PATCH 021/359] Fix crashy pointer issues part2 --- src/scraper_net.cpp | 2 +- src/scraper_net.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index c579e964c6..305042864e 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -188,7 +188,7 @@ void CScraperManifest::Complete() { /* Do something */ std::string bodystr; - CReaderStream(vParts[0]->data) >> bodystr; + vParts[0]->getReader() >> bodystr; printf("CScraperManifest::Complete(): %s %s\n",testName.c_str(),bodystr.c_str()); } diff --git a/src/scraper_net.h b/src/scraper_net.h index 195de3ca76..0cb78ea88e 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -17,6 +17,8 @@ class CSplitBlob CPart(const uint256& ihash) :hash(ihash) {} + CReaderStream getReader() const { return CReaderStream(&data); } + bool present() const {return !this->data.empty();} }; /** Process a message containing Part of Blob. From e7fafe1966a5131f81d7e53bef346662b619f9bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 09:42:42 +0100 Subject: [PATCH 022/359] Work on scraper_net --- src/scraper_net.cpp | 114 +++++++++++++++++++++++++++++++++++++------- src/scraper_net.h | 22 +++++---- 2 files changed, 112 insertions(+), 24 deletions(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 305042864e..6f8bbd4521 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -1,10 +1,11 @@ /* scraper_net.cpp */ +#include #include "net.h" #include "scraper_net.h" //Globals std::map CSplitBlob::mapParts; -std::map< uint256, CScraperManifest > CScraperManifest::mapManifest; +std::map< uint256, std::unique_ptr > CScraperManifest::mapManifest; bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) { @@ -23,7 +24,7 @@ bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) { CPart& part= ipart->second; assert(vRecv.size()>0); - if(part.data.empty()) + if(!part.present()) { part.data= CSerializeData(vRecv.begin(),vRecv.end()); //TODO: replace with move constructor for( const auto& ref : part.refs ) @@ -54,10 +55,39 @@ void CSplitBlob::addPart(const uint256& ihash) CPart& part= rc.first->second; /* add to local vector */ vParts.push_back(&part); + if(part.present()) + cntPartsRcvd++; /* nature of set ensures no duplicates */ part.refs.emplace(this, n); } +bool CSplitBlob::addPartData(CDataStream&& vData) +{ + uint256 hash(Hash(vData.begin(), vData.end())); + + //maybe? mapAlreadyAskedFor.erase(CInv(MSG_PART,hash)); + + auto it= mapParts.emplace(hash,CPart(hash)); + + /* common part */ + CPart& part= it.first->second; + unsigned n= vParts.size(); + vParts.push_back(&part); + part.refs.emplace(this, n); + + /* check if the part already has data */ + if(!part.present()) + { + /* missing data; use the supplied data */ + /* prevent calling the Complete callback FIXME: make this look better */ + cntPartsRcvd--; + bool rc= CSplitBlob::RecvPart(0, vData); + cntPartsRcvd++; + return rc; + } + else return false; +} + CSplitBlob::~CSplitBlob() { for(unsigned n= 0; nAskFor(CInv(MSG_PART, part->hash)); + for ( const CPart* part : vParts ) + { + if(!part->present()) + { + /*Actually request the part. Inventory system will prevent redundant requests.*/ + pfrom->AskFor(CInv(MSG_PART, part->hash)); + } + } } } @@ -84,10 +120,13 @@ bool CSplitBlob::SendPartTo(CNode* pto, const uint256& hash) if(ipart!=mapParts.end()) { - pto->PushMessage("part",ipart->second.data); - return true; + if(ipart->second.present()) + { + pto->PushMessage("part",ipart->second.data); + return true; + } } - else return false; + return false; } bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) @@ -106,7 +145,7 @@ bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) auto found = mapManifest.find(inv.hash); if( found!=mapManifest.end() ) { - found->second.UseAsSource(pfrom); + found->second->UseAsSource(pfrom); return true; } else @@ -118,6 +157,7 @@ bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) void CScraperManifest::PushInvTo(CNode* pto) { /* send all keys from the index map as inventory */ + /* FIXME: advertise only completed manifests */ for (auto const& obj : mapManifest) { pto->PushInventory(CInv(MSG_SCRAPERINDEX, obj.first)); @@ -130,7 +170,7 @@ bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) auto it= mapManifest.find(hash); if(it==mapManifest.end()) return false; - pto->PushMessage("scraperindex0", it->second); + pto->PushMessage("scraperindex0", *it->second); return true; } @@ -138,8 +178,8 @@ bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const { ss << testName; - for( const auto part : vParts ) - ss << part->data; + for( const CPart* part : vParts ) + ss << part->hash; } void CScraperManifest::UnserializeCheck(CReaderStream& ss) @@ -169,7 +209,9 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) { return error("Already have this ScraperManifest"); } - CScraperManifest& manifest = mapManifest[hash]; + const auto it = mapManifest.emplace(hash,std::unique_ptr(new CScraperManifest())); + CScraperManifest& manifest = *it.first->second; + manifest.phash= &it.first->first; try { //void Unserialize(Stream& s, int nType, int nVersion) manifest.UnserializeCheck(vRecv); @@ -180,13 +222,52 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) mapManifest.erase(hash); return false; } - manifest.UseAsSource(pfrom); + if( manifest.cntPartsRcvd == manifest.vParts.size() ) + { + /* If we already got all the parts in memory, signal completition */ + manifest.Complete(); + } else { + /* else request missing parts from the sender */ + manifest.UseAsSource(pfrom); + } + return true; +} + +bool CScraperManifest::addManifest(std::unique_ptr&& m) +{ + /* serialize and hash the object */ + CDataStream ss(SER_NETWORK,1); + ss << *m; +#if 1 + /* at this point it is easier to pretent like it was received from network */ + return CScraperManifest::RecvManifest(0, ss); +#else + uint256 hash(Hash(ss.begin(),ss.end())); + /* try inserting into map */ + const auto it = mapManifest.emplace(hash,m); + /* Already exists, do nothing */ + if(it.second==false) + return false; + + CScraperManifest& manifest = *it.first->second; + /* set the hash pointer inside */ + manifest.phash= &it.first->first; + + /* TODO: call Complete or PushInventory, which is better? */ return true; +#endif } void CScraperManifest::Complete() { - /* Do something */ + /* Notify peers that we have a new manifest */ + { + LOCK(cs_vNodes); + for (auto const& pnode : vNodes) + pnode->PushInventory(CInv{MSG_SCRAPERINDEX, *phash}); + } + + /* Do something with the complete manifest */ std::string bodystr; vParts[0]->getReader() >> bodystr; printf("CScraperManifest::Complete(): %s %s\n",testName.c_str(),bodystr.c_str()); @@ -194,7 +275,7 @@ void CScraperManifest::Complete() /* how? * Should we only request objects that we need? - * Because nodes should only have valid data, download anuthing they send. + * Because nodes should only have valid data, download anything they send. * They should only send what we requested, but we do not know what it is, * until we have it, let it pass. * There is 32MiB message size limit. There is a chance we could hit it, so @@ -204,3 +285,4 @@ void CScraperManifest::Complete() * getdata it. If it turns out useless, just ban the node. Then getdata the * parts from the node. */ + diff --git a/src/scraper_net.h b/src/scraper_net.h index 0cb78ea88e..cf172fe3c8 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -42,26 +42,28 @@ class CSplitBlob /** Add a part reference to vParts. Creates a CPart if necessary. */ void addPart(const uint256& ihash); + /** Create a part from specified data and add reference to it into vParts. */ + bool addPartData(CDataStream&& vData); + /** Unref all parts referenced by this. Removes parts with no references */ ~CSplitBlob(); - private: /* We could store the parts in mapRelay and have getdata service for free. */ /** map from part hash to scraper Index, so we can attach incoming Part in Index */ static std::map mapParts; - unsigned cntPartsRcvd; + unsigned cntPartsRcvd =0; }; /** A objects holding info about the scraper data file we have or are downloading. */ class CScraperManifest - : CSplitBlob + : public CSplitBlob { - /** map from index hash to scraper Index, so we can process Inv messages */ - static std::map< uint256, CScraperManifest > mapManifest; - public: /* static methods */ + /** map from index hash to scraper Index, so we can process Inv messages */ + static std::map< uint256, std::unique_ptr > mapManifest; + /** Process a message containing Index of Scraper Data. * @returns whether the data was useful and valid */ @@ -83,8 +85,12 @@ class CScraperManifest */ static bool SendManifestTo(CNode* pfrom, const uint256& hash); - public: /* fields */ - //uint256 hash; + /** Add new manifest object into list of known manifests */ + static bool addManifest(std::unique_ptr&& m); + + public: /*==== fields ====*/ + + const uint256* phash; std::string testName; public: /* public methods */ From 93e05e779c6c51a7edfffd6c88c9394c94a5e39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 09:43:26 +0100 Subject: [PATCH 023/359] Add RPC commands for scraper_net inspection --- src/rpcserver.cpp | 4 ++++ src/rpcserver.h | 5 ++++ src/scraper_net.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++ src/scraper_net.h | 1 + 4 files changed, 68 insertions(+) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 8ba7a86a7f..a3a3c68fc5 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -401,6 +401,10 @@ static const CRPCCommand vRPCCommands[] = { "versionreport", &versionreport, false, cat_developer }, { "writedata", &writedata, false, cat_developer }, + { "listmanifests", &listmanifests, false, cat_developer }, + { "getmpart", &getmpart, false, cat_developer }, + { "sendmanifest", &sendmanifest, false, cat_developer }, + // Network commands { "addnode", &addnode, false, cat_network }, { "addpoll", &addpoll, false, cat_network }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 402fb83aa9..cbd68fd7a0 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -221,6 +221,11 @@ extern UniValue updatequorumdata(const UniValue& params, bool fHelp); extern UniValue versionreport(const UniValue& params, bool fhelp); extern UniValue writedata(const UniValue& params, bool fHelp); +extern UniValue listmanifests(const UniValue& params, bool fHelp); +extern UniValue getmanifest(const UniValue& params, bool fHelp); +extern UniValue getmpart(const UniValue& params, bool fHelp); +extern UniValue sendmanifest(const UniValue& params, bool fHelp); + // Network extern UniValue addnode(const UniValue& params, bool fHelp); extern UniValue addpoll(const UniValue& params, bool fHelp); diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 6f8bbd4521..9927a0db40 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -1,6 +1,8 @@ /* scraper_net.cpp */ #include #include "net.h" +#include "rpcserver.h" +#include "rpcprotocol.h" #include "scraper_net.h" //Globals @@ -286,3 +288,59 @@ void CScraperManifest::Complete() * parts from the node. */ +UniValue CScraperManifest::ToJson() const +{ + UniValue result(UniValue::VOBJ); + result.pushKV("testName",testName); + UniValue parts(UniValue::VARR); + for( const CPart* part : vParts ) + parts.push_back(part->hash.GetHex()); + result.pushKV("parts",parts); + return result; +} + +UniValue listmanifests(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 0 ) + throw std::runtime_error( + "listmanifests\n" + "Show detailed list of known ScraperManifest objects.\n" + ); + UniValue result1(UniValue::VOBJ); + for(const auto& pair : CScraperManifest::mapManifest) + { + const uint256& hash= pair.first; + const CScraperManifest& manifest= *pair.second; + result1.pushKV(hash.GetHex(),manifest.ToJson()); + } + return result1; +} + +UniValue getmpart(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 1 ) + throw std::runtime_error( + "getmpart \n" + "Show content of CPart object.\n" + ); + auto ipart= CSplitBlob::mapParts.find(uint256(params[0].get_str())); + if(ipart == CSplitBlob::mapParts.end()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Object not found"); + return UniValue(std::string(ipart->second.data.begin(),ipart->second.data.end())); +} + +UniValue sendmanifest(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 1 ) + throw std::runtime_error( + "sendmanifest \n" + "Send a new CScraperManifest object.\n" + ); + auto manifest= std::unique_ptr(new CScraperManifest()); + manifest->testName= params[0].get_str(); + CDataStream part(SER_NETWORK,1); + part << std::string("SampleText") << rand(); + manifest->addPartData(std::move(part)); + CScraperManifest::addManifest(std::move(manifest)); + return UniValue(true); +} diff --git a/src/scraper_net.h b/src/scraper_net.h index cf172fe3c8..c5f2328b98 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -101,5 +101,6 @@ class CScraperManifest /** Serialize this object for seding over the network. */ void Serialize(CDataStream& s, int nType, int nVersion) const; void UnserializeCheck(CReaderStream& s); + UniValue ToJson() const; }; From c1a9e607ed9fb7b88df821cf8c0d49adb3704105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 17:20:52 +0100 Subject: [PATCH 024/359] fixup! Fix crashy pointer issues in serialize.h --- src/serialize.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/serialize.h b/src/serialize.h index 6729a914c1..d7c3a2f211 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -831,6 +831,8 @@ class CReaderStream if (vchro->size() > nReadPos) nSize = vchro->size() - nReadPos; else nSize= 0; + assert((nReadPos + nSize) == vchro->size()); + nReadPosNext= nReadPos + nSize; } memcpy(pch, &(*vchro)[nReadPos], nSize); nReadPos = nReadPosNext; From 9649e57be1f827918a611dc4f2cd25acc9055761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 17:32:00 +0100 Subject: [PATCH 025/359] This may not even be needed. Another impl of CDataStream::Operator+ hopefuly works on older compiler. --- src/serialize.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/serialize.h b/src/serialize.h index d7c3a2f211..774ef2a389 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -930,13 +930,6 @@ class CDataStream return *this; } - friend CDataStream operator+(const CDataStream& a, const CDataStream& b) - { - CDataStream ret = a; - ret += b; - return (ret); - } - // // Vector subset From 8bae85c27cbd0db9adbac54043ee496a6068c77f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 17:58:34 +0100 Subject: [PATCH 026/359] Add zlib to travis non-depends build. TODO: add zlib to depends. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fd6aff5086..143a3aabaa 100755 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ env: # Win32 - HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-i686 wine1.6" RUN_TESTS=false GOAL="" GRIDCOIN_CONFIG="--enable-reduce-exports" # Qt5 & system libs - - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.1++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" + - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.1++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb zlib1g-dev" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" # 32-bit + dash - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib" DEP_OPTS="NO_QT=1" RUN_TESTS=false GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" # Win64 From f5d70daf9ff1d54576d15bca78c46eb183aa9c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Mon, 19 Nov 2018 19:11:30 +0100 Subject: [PATCH 027/359] Basically fix issues found in testing the propagator. Change scraperindex0 to just scraperindex. We will change it later to something non-index. --- src/main.cpp | 10 ++++++++-- src/protocol.cpp | 2 +- src/scraper_net.cpp | 9 +++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9f633a4bfb..a1c237bf1c 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -7176,7 +7176,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - else if (strCommand == "scraperindex0") + else if (strCommand == "scraperindex") { CScraperManifest::RecvManifest(pfrom,vRecv); } @@ -8077,7 +8077,13 @@ bool SendMessages(CNode* pto, bool fSendTrickle) // TODO: check thread safety const auto iaaf= mapAlreadyAskedFor.find(inv); - if ( iaaf!=mapAlreadyAskedFor.end() && !AlreadyHave(txdb, inv) ) + bool fAlreadyHave = AlreadyHave(txdb, inv); + + /* Check also the scraper data propagation system to see if it needs + * this inventory object */ + fAlreadyHave = fAlreadyHave && CScraperManifest::AlreadyHave(0, inv); + + if ( iaaf!=mapAlreadyAskedFor.end() && !fAlreadyHave ) { if (fDebugNet) LogPrintf("sending getdata: %s", inv.ToString()); vGetData.push_back(inv); diff --git a/src/protocol.cpp b/src/protocol.cpp index fa2faa93cd..e06c7f0e81 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -17,7 +17,7 @@ static const char* ppszTypeName[] = "tx", "block", "part", - "scraperindex0", + "scraperindex", }; CMessageHeader::CMessageHeader() diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 9927a0db40..dda8213078 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -124,7 +124,7 @@ bool CSplitBlob::SendPartTo(CNode* pto, const uint256& hash) { if(ipart->second.present()) { - pto->PushMessage("part",ipart->second.data); + pto->PushMessage("part",ipart->second.getReader()); return true; } } @@ -133,6 +133,11 @@ bool CSplitBlob::SendPartTo(CNode* pto, const uint256& hash) bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) { + if( MSG_PART ==inv.type ) + { + //TODO: move + return false; + } if( MSG_SCRAPERINDEX !=inv.type ) { /* For any other objects, just say that we do not need it: */ @@ -172,7 +177,7 @@ bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) auto it= mapManifest.find(hash); if(it==mapManifest.end()) return false; - pto->PushMessage("scraperindex0", *it->second); + pto->PushMessage("scraperindex", *it->second); return true; } From 6163120e0d1032955721fa8cd4f840f1e3659ab7 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 18 Nov 2018 01:16:33 -0500 Subject: [PATCH 028/359] Implementation of stats generation This commit contains the initial impleementation of stats generation by the Scraper. GetScraperStatsByConsensusBeaconList is responsible for generating a map of network wide statistics, which contains statistics by CPID by Project (the most granular), by Project, by CPID, and then a final network wide entry. It uses the helper function LoadProjectFileToStatsByCPID, which does a single project. I have also implemented a StoreStats function to store the map on disk as a csv file. This work will be useful for implementing the C++ NN. --- src/ScraperProxy/scraper.cpp | 521 +++++++++++++++++++++++++++++++---- src/ScraperProxy/scraper.h | 101 +++++-- 2 files changed, 546 insertions(+), 76 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 209e8fdb0c..48d93e5383 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -8,9 +8,9 @@ std::string lowercase(std::string s); std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); -Manifest mManifest; +ScraperFileManifest mScraperFileManifest; -CCriticalSection cs_mManifest; +CCriticalSection cs_mScraperFileManifest; bool WhitelistPopulated(); bool UserpassPopulated(); @@ -47,10 +47,10 @@ void Scraper(bool fScraperStandalone) } else { - // Load the manifest file from the Scraper directory info mManifest. + // Load the manifest file from the Scraper directory info mScraperFileManifest. _log(INFO, "Scraper", "Loading Manifest"); - if (!LoadManifest(pathScraper / "Manifest.csv.gz")) + if (!LoadScraperFileManifest(pathScraper / "Manifest.csv.gz")) _log(ERROR, "Scraper", "Error occurred loading manifest"); else _log(INFO, "Scraper", "Loaded Manifest file into map."); @@ -59,22 +59,23 @@ void Scraper(bool fScraperStandalone) // First remove orphan files with no Manifest entry. // Lock the manifest while it is being manipulated. { - LOCK(cs_mManifest); + LOCK(cs_mScraperFileManifest); // Check to see if the file exists in the manifest. If it doesn't // remove it. - Manifest::iterator entry; + ScraperFileManifest::iterator entry; for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - - std::string filename = dir.path().filename().c_str(); - if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "BeaconList.csv.gz" && fs::is_regular_file(dir)) + if(dir.path().filename() != "Manifest.csv.gz" + && dir.path().filename() != "BeaconList.csv.gz" + && dir.path().filename() != "Stats.csv.gz" + && fs::is_regular_file(dir)) { - entry = mManifest.find(dir.path().filename().c_str()); - if (entry == mManifest.end()) + entry = mScraperFileManifest.find(dir.path().filename().c_str()); + if (entry == mScraperFileManifest.end()) { fs::remove(dir.path()); _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); @@ -85,16 +86,16 @@ void Scraper(bool fScraperStandalone) // Now iterate through the Manifest map and remove entries with no file, or entries and files older than // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time //if fScraperRetainNonCurrentFiles is false. - for (entry = mManifest.begin(); entry != mManifest.end(); ) + for (entry = mScraperFileManifest.begin(); entry != mScraperFileManifest.end(); ) { - Manifest::iterator entry_copy = entry++; + ScraperFileManifest::iterator entry_copy = entry++; if (!fs::exists(pathScraper / entry_copy->first) || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) || (!fScraperRetainNonCurrentFiles && entry_copy->second.current == false)) { _log(WARNING, "Scraper", "Removing stale or orphan manifest entry: " + entry_copy->first); - DeleteManifestEntry(entry_copy->second); + DeleteScraperFileManifestEntry(entry_copy->second); } } } @@ -148,6 +149,12 @@ void Scraper(bool fScraperStandalone) _nntester(INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); + ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); + + _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperStats.size())); + + StoreStats(pathScraper / "Stats.csv.gz", mScraperStats); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); MilliSleep(nScraperSleep); @@ -711,7 +718,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::remove(file); - ManifestEntry NewRecord; + ScraperFileManifestEntry NewRecord; // Don't include path in Manifest, because this is local node dependent. NewRecord.filename = gzetagfile_no_path; @@ -722,18 +729,18 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // a given project, it has to be more up to date than any others. NewRecord.current = true; - // Code block to lock mManifest during record insertion and delete because we want this atomic. + // Code block to lock mScraperFileManifest during record insertion and delete because we want this atomic. { - LOCK(cs_mManifest); + LOCK(cs_mScraperFileManifest); - // Iterate mManifest to find any prior records for the same project and change current flag to false, + // Iterate mScraperFileManifest to find any prior records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles // is false. - Manifest::iterator entry; - for (entry = mManifest.begin(); entry != mManifest.end(); ) + ScraperFileManifest::iterator entry; + for (entry = mScraperFileManifest.begin(); entry != mScraperFileManifest.end(); ) { - Manifest::iterator entry_copy = entry++; + ScraperFileManifest::iterator entry_copy = entry++; if (entry_copy->second.project == project && entry_copy->second.current == true) { @@ -746,11 +753,11 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil if (((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) || (entry_copy->second.project == project && entry_copy->second.current == false && !fScraperRetainNonCurrentFiles)) { - DeleteManifestEntry(entry_copy->second); + DeleteScraperFileManifestEntry(entry_copy->second); } } - if(!InsertManifestEntry(NewRecord)) + if(!InsertScraperFileManifestEntry(NewRecord)) _log(WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); else _log(INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); @@ -759,11 +766,11 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // The manifest file is actually very small though, and this primitive implementation will suffice. I could // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of // sync if the wallet is ended during the middle of pulling the files. - _log(INFO, "Scraper", "Persisting manifest entry to disk."); - if(!StoreManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "StoreManifest error occurred"); + _log(INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); + if(!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); else - _log(INFO, "Scraper", "Stored Manifest"); + _log(INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); } _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -822,6 +829,53 @@ void testdata(const std::string& etag) } + + +/*********************** +* Persistance * +************************/ + +bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "LoadBeaconList", "Failed to open beacon gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + std::string line; + + int64_t ntimestamp; + + while (std::getline(in, line)) + { + BeaconEntry LoadEntry; + std::string key; + + std::vector vline = split(line, ","); + + key = vline[0]; + + std::istringstream sstimestamp(vline[1]); + sstimestamp >> ntimestamp; + LoadEntry.timestamp = ntimestamp; + + LoadEntry.value = vline[2]; + + mBeaconMap[key] = LoadEntry; + } + + return true; +} + + bool StoreBeaconList(const fs::path& file) { BeaconMap mBeaconMap = GetConsensusBeaconList(); @@ -868,26 +922,21 @@ bool StoreBeaconList(const fs::path& file) -/*********************** -* Manifest persistance * -************************/ - - -// Insert entry into Manifest. Note that cs_mManifest needs to be taken before calling. -bool InsertManifestEntry(ManifestEntry entry) +// Insert entry into Manifest. Note that cs_mScraperFileManifest needs to be taken before calling. +bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. - std::pair ret; + std::pair ret; { - ret = mManifest.insert(std::make_pair(entry.filename, entry)); + ret = mScraperFileManifest.insert(std::make_pair(entry.filename, entry)); } // True if insert was sucessful, false if entry with key (hash) already exists in map. return ret.second; } -// Delete entry from Manifest and corresponding file if it exists. Note that cs_mManifest needs to be taken before calling. -unsigned int DeleteManifestEntry(ManifestEntry entry) +// Delete entry from Manifest and corresponding file if it exists. Note that cs_mScraperFileManifest needs to be taken before calling. +unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) { unsigned int ret; @@ -895,7 +944,7 @@ unsigned int DeleteManifestEntry(ManifestEntry entry) if(fs::exists(pathScraper / entry.filename)) fs::remove(pathScraper /entry.filename); - ret = mManifest.erase(entry.filename); + ret = mScraperFileManifest.erase(entry.filename); // Returns number of elements erased, either 0 or 1. return ret; @@ -903,13 +952,13 @@ unsigned int DeleteManifestEntry(ManifestEntry entry) -bool LoadManifest(const fs::path& file) +bool LoadScraperFileManifest(const fs::path& file) { std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { - _log(ERROR, "LoadManifest", "Failed to open manifest gzip file (" + file.string() + ")"); + _log(ERROR, "LoadScraperFileManifest", "Failed to open manifest gzip file (" + file.string() + ")"); return false; } @@ -920,7 +969,7 @@ bool LoadManifest(const fs::path& file) std::string line; - ManifestEntry LoadEntry; + ScraperFileManifestEntry LoadEntry; int64_t ntimestamp; @@ -943,14 +992,14 @@ bool LoadManifest(const fs::path& file) LoadEntry.filename = vline[4]; - InsertManifestEntry(LoadEntry); + InsertScraperFileManifestEntry(LoadEntry); } return true; } -bool StoreManifest(const fs::path& file) +bool StoreScraperFileManifest(const fs::path& file) { if (fs::exists(file)) fs::remove(file); @@ -959,7 +1008,7 @@ bool StoreManifest(const fs::path& file) if (!outgzfile) { - _log(ERROR, "StoreManifest", "Failed to open manifest gzip file (" + file.string() + ")"); + _log(ERROR, "StoreScraperFileManifest", "Failed to open manifest gzip file (" + file.string() + ")"); return false; } @@ -968,33 +1017,399 @@ bool StoreManifest(const fs::path& file) out.push(boostio::gzip_compressor()); std::stringstream stream; - _log(INFO, "StoreManifest", "Started processing " + file.string()); + _log(INFO, "StoreScraperFileManifest", "Started processing " + file.string()); - //Lock mManifest during serialize to string. + //Lock mScraperFileManifest during serialize to string. { - LOCK(cs_mManifest); + LOCK(cs_mScraperFileManifest); - for (auto const& entry : mManifest) + for (auto const& entry : mScraperFileManifest) { uint256 nEntryHash = entry.second.hash; - std::string sManifestEntry = nEntryHash.GetHex() + "," + std::string sScraperFileManifestEntry = nEntryHash.GetHex() + "," + std::to_string(entry.second.current) + "," + std::to_string(entry.second.timestamp) + "," + entry.second.project + "," + entry.first + "\n"; - stream << sManifestEntry; + stream << sScraperFileManifestEntry; } } - _log(INFO, "StoreManifest", "Finished processing manifest from map."); + _log(INFO, "StoreScraperFileManifest", "Finished processing manifest from map."); out.push(stream); boost::iostreams::copy(out, outgzfile); outgzfile.flush(); outgzfile.close(); - _log(INFO, "StoreManifest", "Process Complete."); + _log(INFO, "StoreScraperFileManifest", "Process Complete."); + + return true; +} + + + +bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats) +{ + if (fs::exists(file)) + fs::remove(file); + + std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + + if (!outgzfile) + { + _log(ERROR, "StoreStats", "Failed to open stats gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream out; + out.push(boostio::gzip_compressor()); + std::stringstream stream; + + _log(INFO, "StoreStats", "Started processing " + file.string()); + + // Header. + stream << "StatsType," << "Project," << "CPID," << "TC," << "RAT," << "RAC," << "Mag\n"; + + for (auto const& entry : mScraperStats) + { + // This nonsense is to align the key to the columns of the csv. + std::string sobjectIDforcsv; + + switch(entry.first.objecttype) + { + case statsobjecttype::byCPIDbyProject: + { + sobjectIDforcsv = entry.first.objectID; + break; + } + case statsobjecttype::byProject: + { + sobjectIDforcsv = entry.first.objectID + ","; + break; + } + case statsobjecttype::byCPID: + { + sobjectIDforcsv = "," + entry.first.objectID; + break; + } + case statsobjecttype::NetworkWide: + { + sobjectIDforcsv = ","; + break; + } + } + + std::string sScraperStatsEntry = GetTextForstatsobjecttype(entry.first.objecttype) + "," + + sobjectIDforcsv + "," + + std::to_string(entry.second.statsvalue.dTC) + "," + + std::to_string(entry.second.statsvalue.dRAT) + "," + + std::to_string(entry.second.statsvalue.dRAC) + "," + + std::to_string(entry.second.statsvalue.dMag) + "," + + "\n"; + stream << sScraperStatsEntry; + } + + _log(INFO, "StoreStats", "Finished processing stats from map."); + + out.push(stream); + boost::iostreams::copy(out, outgzfile); + outgzfile.flush(); + outgzfile.close(); + + _log(INFO, "StoreStats", "Process Complete."); + + return true; +} + +/*********************** +* Stats Computations * +************************/ + + + +bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats) +{ + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!ingzfile) + { + _log(ERROR, "LoadProjectFileToStatsByCPID", "Failed to open project user stats gzip file (" + file.string() + ")"); + + return false; + } + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzfile); + + //_log(INFO, "LoadProjectFileToStatsByCPID", "mBeaconMap entries: " + std::to_string(mBeaconMap.size())); + + bool bcomplete = false; + bool bfileerror = false; + std::vector vXML; + + while (!bcomplete && !bfileerror) + { + // Find users block + std::string line; + + while (std::getline(in, line)) + { + if (line != "") + continue; + + else + break; + } + // block found + // Lets vector the blocks + + while (std::getline(in, line)) + { + if (bcomplete) + break; + + if (line == "") + { + bcomplete = true; + + break; + } + + if (line == "") + { + stringbuilder userdata; + + userdata.nlappend(line); + + //_log(INFO, "\nLoadProjectFileToStatsByCPID", "Line: " + line); + + while (std::getline(in, line)) + { + //_log(INFO, "LoadProjectFileToStatsByCPID", "Line: " + line); + + if (line == "") + { + userdata.nlappend(line); + + //_log(INFO, "LoadProjectFileToStatsByCPID", "userdata: \n" + userdata.value()); + + std::string sCPID = ExtractXML(userdata.value(), "", ""); + + //_log(INFO, "LoadProjectFileToStatsByCPID", "CPID: " + sCPID); + + // This uses the passed in beacon map to refilter the statistics. + if (mBeaconMap.count(sCPID) >= 1) + vXML.push_back(userdata.value()); + + break; + } + + userdata.nlappend(line); + } + } + } + + // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. + // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! + if (!bcomplete) + bfileerror = true; + } + + ingzfile.close(); + + if (bfileerror) + { + _log(CRITICAL, "LoadProjectFileToStatsByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); + return false; + } + + // Iterate through vector elements and populate map for byCPIDbyProject statistics. Compute project totals at the same time, because + // we will need it next to compute magnitudes. + double dProjectTC = 0.0; + double dProjectRAT = 0.0; + double dProjectRAC = 0.0; + for (auto const& vv : vXML) + { + ScraperObjectStats statsentry; + + statsentry.statsvalue.dTC = 0.0; + statsentry.statsvalue.dRAT = 0.0; + statsentry.statsvalue.dRAC = 0.0; + statsentry.statsvalue.dMag = 0.0; + + std::string sTC = ExtractXML(vv, "", ""); + std::string sRAT = ExtractXML(vv, "", ""); + std::string sRAC = ExtractXML(vv, "", ""); + + // Replace blank strings with zeros. + statsentry.statsvalue.dTC = (sTC == "") ? 0.0 : std::stod(sTC); + statsentry.statsvalue.dRAT = (sRAT == "") ? 0.0 : std::stod(sRAT); + statsentry.statsvalue.dRAC = (sRAC == "") ? 0.0 : std::stod(sRAC); + // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. + + statsentry.statskey.objecttype = byCPIDbyProject; + statsentry.statskey.objectID = project + "," + ExtractXML(vv, "", ""); + + // Insert stats entry into map by the key. + mScraperStats[statsentry.statskey] = statsentry; + + // Increment project + dProjectTC += statsentry.statsvalue.dTC; + dProjectRAT += statsentry.statsvalue.dRAT; + dProjectRAC += statsentry.statsvalue.dRAC; + } + + _log(INFO, "LoadProjectFileToStatsByCPID", "There are " + std::to_string(mScraperStats.size()) + " CPID entries for " + project); + + // The mScraperStats here is scoped to only this project so we do not need project filtering here. + ScraperStats::iterator entry; + + for (auto const& entry : mScraperStats) + { + ScraperObjectStats statsentry; + + statsentry.statskey = entry.first; + statsentry.statsvalue.dTC = entry.second.statsvalue.dTC; + statsentry.statsvalue.dRAT = entry.second.statsvalue.dRAT; + statsentry.statsvalue.dRAC = entry.second.statsvalue.dRAC; + statsentry.statsvalue.dMag = MagRound(entry.second.statsvalue.dRAC / dProjectRAC * projectmag); + + // Update map entry with the magnitude. + mScraperStats[statsentry.statskey] = statsentry; + } + + // Due to rounding to MAG_ROUND, the actual total project magnitude will not be exactly projectmag, + // but it should be very close. Roll up project statstics. + ScraperObjectStats ProjectStatsEntry; + + ProjectStatsEntry.statskey.objecttype = byProject; + ProjectStatsEntry.statskey.objectID = project; + ProjectStatsEntry.statsvalue.dTC = 0.0; + ProjectStatsEntry.statsvalue.dRAT = 0.0; + ProjectStatsEntry.statsvalue.dRAC = 0.0; + ProjectStatsEntry.statsvalue.dMag = 0.0; + + for (auto const& entry : mScraperStats) + { + ProjectStatsEntry.statsvalue.dTC += entry.second.statsvalue.dTC; + ProjectStatsEntry.statsvalue.dRAT += entry.second.statsvalue.dRAT; + ProjectStatsEntry.statsvalue.dRAC += entry.second.statsvalue.dRAC; + ProjectStatsEntry.statsvalue.dMag += entry.second.statsvalue.dMag; + } + + // Insert project level map entry. + mScraperStats[ProjectStatsEntry.statskey] = ProjectStatsEntry; return true; } + + + + + + +ScraperStats GetScraperStatsByConsensusBeaconList() +{ + _log(INFO, "GetScraperStatsByConsensusBeaconList", "Beginning stats processing."); + + // Enumerate the count of active projects from the file manifest. Since the manifest is + // constructed starting with the whitelist, and then using only the current files, this + // will always be less than or equal to the whitelist count from vwhitelist. + unsigned int nActiveProjects = 0; + for (auto const& entry : mScraperFileManifest) + { + if (entry.second.current) + nActiveProjects++; + } + + double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; + + //Get the Consensus Beacon map and initialize mScraperStats. + BeaconMap mBeaconMap = GetConsensusBeaconList(); + ScraperStats mScraperStats; + + for (auto const& entry : mScraperFileManifest) + { + + if (entry.second.current) + { + std::string project = entry.first; + fs::path file = pathScraper / entry.second.filename; + ScraperStats mProjectScraperStats; + + _log(INFO, "GetScraperStatsByConsensusBeaconList", "Processing stats for project: " + project); + + LoadProjectFileToStatsByCPID(project, file, dMagnitudePerProject, mBeaconMap, mProjectScraperStats); + + // Insert into overall map. + for (auto const& entry : mProjectScraperStats) + { + mScraperStats[entry.first] = entry.second; + } + } + } + + // Now are are going to cut across projects and group by CPID. + + //Also track the network wide rollup. + ScraperObjectStats NetworkWideStatsEntry; + + NetworkWideStatsEntry.statskey.objecttype = NetworkWide; + // ObjectID is blank string for network-wide. + NetworkWideStatsEntry.statskey.objectID = ""; + NetworkWideStatsEntry.statsvalue.dTC = 0.0; + NetworkWideStatsEntry.statsvalue.dRAT = 0.0; + NetworkWideStatsEntry.statsvalue.dRAC = 0.0; + NetworkWideStatsEntry.statsvalue.dMag = 0.0; + + for (auto const& beaconentry : mBeaconMap) + { + ScraperObjectStats CPIDStatsEntry; + + CPIDStatsEntry.statskey.objecttype = byCPID; + CPIDStatsEntry.statskey.objectID = beaconentry.first; + CPIDStatsEntry.statsvalue.dTC = 0.0; + CPIDStatsEntry.statsvalue.dRAT = 0.0; + CPIDStatsEntry.statsvalue.dRAC = 0.0; + CPIDStatsEntry.statsvalue.dMag = 0.0; + + for (auto const& innerentry : mScraperStats) + { + // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, + // otherwise dimension mixing will result. + + std::string objectID = innerentry.first.objectID; + + std::size_t found = objectID.find(CPIDStatsEntry.statskey.objectID); + + if (innerentry.first.objecttype == byCPIDbyProject && found!=std::string::npos) + { + CPIDStatsEntry.statsvalue.dTC += innerentry.second.statsvalue.dTC; + CPIDStatsEntry.statsvalue.dRAT += innerentry.second.statsvalue.dRAT; + CPIDStatsEntry.statsvalue.dRAC += innerentry.second.statsvalue.dRAC; + CPIDStatsEntry.statsvalue.dMag += innerentry.second.statsvalue.dMag; + } + } + + // Insert the byCPID entry into the overall map. + mScraperStats[CPIDStatsEntry.statskey] = CPIDStatsEntry; + + // Increement the network wide stats. + NetworkWideStatsEntry.statsvalue.dTC += CPIDStatsEntry.statsvalue.dTC; + NetworkWideStatsEntry.statsvalue.dRAT += CPIDStatsEntry.statsvalue.dRAT; + NetworkWideStatsEntry.statsvalue.dRAC += CPIDStatsEntry.statsvalue.dRAC; + NetworkWideStatsEntry.statsvalue.dMag += CPIDStatsEntry.statsvalue.dMag; + } + + // Insert the (single) network-wide entry into the overall map. + mScraperStats[NetworkWideStatsEntry.statskey] = NetworkWideStatsEntry; + + _log(INFO, "GetScraperStatsByConsensusBeaconList", "Completed stats processing"); + + return mScraperStats; +} + diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index ddc20e29c2..d5ac9653c4 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -56,20 +57,35 @@ enum logattribute { CRITICAL }; +enum statsobjecttype { + NetworkWide, + byCPID, + byProject, + byCPIDbyProject +}; + +static std::vector vstatsobjecttypestrings = { "NetWorkWide", "byCPID", "byProject", "byCPIDbyProject" }; + +const std::string GetTextForstatsobjecttype(int EnumValue) +{ + return vstatsobjecttypestrings[EnumValue]; +} + /********************* -* Functions * +* Global Vars * *********************/ -void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); -void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); -bool StoreBeaconList(const fs::path& file); -std::vector split(const std::string& s, const std::string& delim); -extern AppCacheSection ReadCacheSection(const std::string& section); -uint256 GetFileHash(const fs::path& inputfile); -bool StoreManifest(const fs::path& file); -bool LoadManifest(const fs::path& file); +extern bool fDebug; +std::vector> vwhitelist; +std::vector> vuserpass; +std::vector> vprojectteamids; +std::vector vauthenicationetags; +std::string rpcauth = "boinc:test"; +std::string rpcip = "http://127.0.0.1:9334/"; +int64_t ndownloadsize = 0; +int64_t nuploadsize = 0; -struct ManifestEntry +struct ScraperFileManifestEntry { std::string filename; // Filename std::string project; @@ -78,10 +94,37 @@ struct ManifestEntry bool current; }; -typedef std::map Manifest; +typedef std::map ScraperFileManifest; + +struct ScraperObjectStatsKey +{ + statsobjecttype objecttype; + std::string objectID; +}; + +struct ScraperObjectStatsValue +{ + double dTC; + double dRAT; + double dRAC; + double dMag; +}; + +struct ScraperObjectStats +{ + ScraperObjectStatsKey statskey; + ScraperObjectStatsValue statsvalue; +}; + +struct ScraperObjectStatsKeyComp +{ + bool operator() ( ScraperObjectStatsKey a, ScraperObjectStatsKey b ) const + { + return std::make_pair(a.objecttype, a.objectID) < std::make_pair(b.objecttype, b.objectID); + } +}; -bool InsertManifestEntry(ManifestEntry entry); -unsigned int DeleteManifestEntry(ManifestEntry entry); +typedef std::map ScraperStats; /********************* * Global Constants * @@ -89,20 +132,32 @@ unsigned int DeleteManifestEntry(ManifestEntry entry); // Define 48 hour retention time for stats files, current or not... static int64_t SCRAPER_FILE_RETENTION_TIME = 48 * 3600; +static const double MAG_ROUND = 0.01; +static const double NEURALNETWORKMULTIPLIER = 115000; /********************* -* Global Vars * +* Functions * *********************/ -extern bool fDebug; -std::vector> vwhitelist; -std::vector> vuserpass; -std::vector> vprojectteamids; -std::vector vauthenicationetags; -std::string rpcauth = "boinc:test"; -std::string rpcip = "http://127.0.0.1:9334/"; -int64_t ndownloadsize = 0; -int64_t nuploadsize = 0; +void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); +void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); +bool StoreBeaconList(const fs::path& file); +bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap); +std::vector split(const std::string& s, const std::string& delim); +extern AppCacheSection ReadCacheSection(const std::string& section); +uint256 GetFileHash(const fs::path& inputfile); +bool StoreScraperFileManifest(const fs::path& file); +bool LoadScraperFileManifest(const fs::path& file); +bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry); +unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry); +ScraperStats GetScraperStatsByConsensusBeaconList(); +bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); +bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); + +double MagRound(double dMag) +{ + return round(dMag / MAG_ROUND) * MAG_ROUND; +} /********************* * Scraper * From e458172b80cbc31658f9aa11b2ba70286b73955b Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 18 Nov 2018 03:02:57 -0500 Subject: [PATCH 029/359] A little cleanup... --- src/ScraperProxy/scraper.cpp | 38 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 48d93e5383..f431f9ad81 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -153,7 +153,10 @@ void Scraper(bool fScraperStandalone) _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperStats.size())); - StoreStats(pathScraper / "Stats.csv.gz", mScraperStats); + if (!StoreStats(pathScraper / "Stats.csv.gz", mScraperStats)) + _log(ERROR, "Scraper", "StoreStats error occurred"); + else + _log(INFO, "Scraper", "Stored stats."); _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -1234,21 +1237,16 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi double dProjectRAC = 0.0; for (auto const& vv : vXML) { - ScraperObjectStats statsentry; - - statsentry.statsvalue.dTC = 0.0; - statsentry.statsvalue.dRAT = 0.0; - statsentry.statsvalue.dRAC = 0.0; - statsentry.statsvalue.dMag = 0.0; + ScraperObjectStats statsentry = {}; std::string sTC = ExtractXML(vv, "", ""); std::string sRAT = ExtractXML(vv, "", ""); std::string sRAC = ExtractXML(vv, "", ""); // Replace blank strings with zeros. - statsentry.statsvalue.dTC = (sTC == "") ? 0.0 : std::stod(sTC); - statsentry.statsvalue.dRAT = (sRAT == "") ? 0.0 : std::stod(sRAT); - statsentry.statsvalue.dRAC = (sRAC == "") ? 0.0 : std::stod(sRAC); + statsentry.statsvalue.dTC = (sTC.empty()) ? 0.0 : std::stod(sTC); + statsentry.statsvalue.dRAT = (sRAT.empty()) ? 0.0 : std::stod(sRAT); + statsentry.statsvalue.dRAC = (sRAC.empty()) ? 0.0 : std::stod(sRAC); // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. statsentry.statskey.objecttype = byCPIDbyProject; @@ -1283,15 +1281,11 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi } // Due to rounding to MAG_ROUND, the actual total project magnitude will not be exactly projectmag, - // but it should be very close. Roll up project statstics. - ScraperObjectStats ProjectStatsEntry; + // but it should be very close. Roll up project statistics. + ScraperObjectStats ProjectStatsEntry = {}; ProjectStatsEntry.statskey.objecttype = byProject; ProjectStatsEntry.statskey.objectID = project; - ProjectStatsEntry.statsvalue.dTC = 0.0; - ProjectStatsEntry.statsvalue.dRAT = 0.0; - ProjectStatsEntry.statsvalue.dRAC = 0.0; - ProjectStatsEntry.statsvalue.dMag = 0.0; for (auto const& entry : mScraperStats) { @@ -1356,26 +1350,18 @@ ScraperStats GetScraperStatsByConsensusBeaconList() // Now are are going to cut across projects and group by CPID. //Also track the network wide rollup. - ScraperObjectStats NetworkWideStatsEntry; + ScraperObjectStats NetworkWideStatsEntry = {}; NetworkWideStatsEntry.statskey.objecttype = NetworkWide; // ObjectID is blank string for network-wide. NetworkWideStatsEntry.statskey.objectID = ""; - NetworkWideStatsEntry.statsvalue.dTC = 0.0; - NetworkWideStatsEntry.statsvalue.dRAT = 0.0; - NetworkWideStatsEntry.statsvalue.dRAC = 0.0; - NetworkWideStatsEntry.statsvalue.dMag = 0.0; for (auto const& beaconentry : mBeaconMap) { - ScraperObjectStats CPIDStatsEntry; + ScraperObjectStats CPIDStatsEntry = {}; CPIDStatsEntry.statskey.objecttype = byCPID; CPIDStatsEntry.statskey.objectID = beaconentry.first; - CPIDStatsEntry.statsvalue.dTC = 0.0; - CPIDStatsEntry.statsvalue.dRAT = 0.0; - CPIDStatsEntry.statsvalue.dRAC = 0.0; - CPIDStatsEntry.statsvalue.dMag = 0.0; for (auto const& innerentry : mScraperStats) { From 964cc92a803a4a9d922e9bbf05dceb459a089d20 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 18 Nov 2018 11:45:50 -0500 Subject: [PATCH 030/359] Fix to hash function --- src/ScraperProxy/scraper.cpp | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index f431f9ad81..272201ef05 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -784,35 +784,63 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil - +///* uint256 GetFileHash(const fs::path& inputfile) { // open input file, and associate with CAutoFile FILE *file = fopen(inputfile.string().c_str(), "rb"); CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); + uint256 nHash = 0; + if (!filein) - return error("FileHash() : open failed"); + return nHash; // use file size to size memory buffer - int fileSize = boost::filesystem::file_size(inputfile); - int dataSize = fileSize - sizeof(uint256); - // Don't try to resize to a negative number if file is small - if ( dataSize < 0 ) dataSize = 0; + int dataSize = boost::filesystem::file_size(inputfile); std::vector vchData; vchData.resize(dataSize); + // read data and checksum from file + try + { + filein.read((char *)&vchData[0], dataSize); + } + catch (std::exception &e) + { + return nHash; + } + filein.fclose(); CDataStream ssFile(vchData, SER_DISK, CLIENT_VERSION); - uint256 nHash = Hash(ssFile.begin(), ssFile.end()); + nHash = Hash(ssFile.begin(), ssFile.end()); return nHash; } +//*/ + +/* +uint256 GetFileHash(const fs::path& inputfile) +{ + std::ifstream infile(inputfile.string().c_str(), std::ios_base::in | std::ios_base::binary); + + if (!infile) + { + _log(ERROR, "ProcessProjectRacFileByCPID", "Failed to open rac gzip file (" + inputfile.string() + ")"); + + return false; + } + CDataStream ssFile(0, 0); + ssFile << infile; + uint256 nHash = Hash(ssFile.begin(), ssFile.end()); + return nHash; +} +*/ void testdata(const std::string& etag) { From 7a1d50866f25d1163eef7886bfd59ff8de795ed5 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 18 Nov 2018 19:49:51 -0500 Subject: [PATCH 031/359] Put a hash check in the manifest check At scraper startup, check the file hashes against the manifest file --- src/ScraperProxy/scraper.cpp | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 272201ef05..f00ef18636 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -61,7 +61,7 @@ void Scraper(bool fScraperStandalone) { LOCK(cs_mScraperFileManifest); - // Check to see if the file exists in the manifest. If it doesn't + // Check to see if the file exists in the manifest and if the hash matches. If it doesn't // remove it. ScraperFileManifest::iterator entry; @@ -79,6 +79,13 @@ void Scraper(bool fScraperStandalone) { fs::remove(dir.path()); _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); + continue; + } + + if (entry->second.hash != GetFileHash(dir)) + { + _log(INFO, "Scraper", "File failed hash check. Removing file."); + fs::remove(dir.path()); } } } @@ -818,29 +825,7 @@ uint256 GetFileHash(const fs::path& inputfile) return nHash; } -//*/ - -/* -uint256 GetFileHash(const fs::path& inputfile) -{ - std::ifstream infile(inputfile.string().c_str(), std::ios_base::in | std::ios_base::binary); - - if (!infile) - { - _log(ERROR, "ProcessProjectRacFileByCPID", "Failed to open rac gzip file (" + inputfile.string() + ")"); - return false; - } - - CDataStream ssFile(0, 0); - - ssFile << infile; - - uint256 nHash = Hash(ssFile.begin(), ssFile.end()); - - return nHash; -} -*/ void testdata(const std::string& etag) { From 194c33fdb3e33f9cba9126fc748839bc07e10242 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 15 Nov 2018 11:14:13 +0100 Subject: [PATCH 032/359] Remove unnecessary boost includes. --- src/walletdb.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/walletdb.cpp b/src/walletdb.cpp index c4fbe81d92..a1075bd368 100755 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -6,8 +6,6 @@ #include "walletdb.h" #include "wallet.h" #include "init.h" -#include -#include #include using namespace std; From bb639038969dab152670b450eb7de83470d41fdd Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 15 Nov 2018 12:52:29 +0100 Subject: [PATCH 033/359] Reduce util.h inclusion. --- src/cpid.cpp | 4 +++- src/cpid.h | 5 ++++- src/rpcserver.h | 1 - src/wallet.h | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cpid.cpp b/src/cpid.cpp index c99d64ab4b..371c7bbb59 100644 --- a/src/cpid.cpp +++ b/src/cpid.cpp @@ -1,8 +1,10 @@ - #include "cpid.h" +#include "util.h" + #include #include #include +#include #define S11 (0x9e5+1366-0xf34) #define S12 (0x161b+3182-0x227d) diff --git a/src/cpid.h b/src/cpid.h index 9b32124c92..b7058e72ee 100644 --- a/src/cpid.h +++ b/src/cpid.h @@ -1,7 +1,10 @@ #pragma once +#include "uint256.h" + #include -#include "util.h" +#include +#include class CPID { diff --git a/src/rpcserver.h b/src/rpcserver.h index cbd68fd7a0..4f9c4c21fa 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -15,7 +15,6 @@ class CBlockIndex; #include "global_objects_noui.hpp" #include "checkpoints.h" -#include "util.h" void StartRPCThreads(); void StopRPCThreads(); diff --git a/src/wallet.h b/src/wallet.h index afe1663d61..c2df3c8358 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -4,6 +4,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_WALLET_H #define BITCOIN_WALLET_H + #include #include #include @@ -13,7 +14,6 @@ #include "script.h" #include "ui_interface.h" #include "walletdb.h" -#include "util.h" extern bool fWalletUnlockStakingOnly; extern bool fConfChange; From 23a8c5c482c78a1fd32cf433c98fd6b04eaf516f Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 15 Nov 2018 13:01:39 +0100 Subject: [PATCH 034/359] Remove unneeded serialize.h include. --- src/util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util.h b/src/util.h index 8ee2076307..75bf76b819 100644 --- a/src/util.h +++ b/src/util.h @@ -25,8 +25,8 @@ #include #include + #include "fwd.h" -#include "serialize.h" #include "tinyformat.h" #ifndef WIN32 From e36f47eefc76c461d933d2c2db4f8a973f8ba3ab Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 19 Nov 2018 12:05:13 -0500 Subject: [PATCH 035/359] Fix error in pathScraper variable assignment --- src/init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index af00de1b71..c035d0dd19 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -546,7 +546,7 @@ bool AppInit2(ThreadHandlerPtr threads) if (GetBoolArg("-scraper")) { // If the scraper is going to be run, then set the scraper file staging directory. - boost::filesystem::path pathScraper = GetDataDir() / "Scraper"; + pathScraper = GetDataDir() / "Scraper"; ; } From 76b3327a7e47582468a42c9415313bfb82a8d8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Tue, 20 Nov 2018 10:56:18 +0100 Subject: [PATCH 036/359] Added logging to propagation. -debug=manifest --- src/scraper_net.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index dda8213078..e8c8c34825 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -28,6 +28,7 @@ bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) assert(vRecv.size()>0); if(!part.present()) { + LogPrint("manifest", "received part %s %u refs", hash.GetHex(),(unsigned)part.refs.size()); part.data= CSerializeData(vRecv.begin(),vRecv.end()); //TODO: replace with move constructor for( const auto& ref : part.refs ) { @@ -41,11 +42,12 @@ bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) } return true; } else { - return error("Duplicate part received!"); + LogPrint("manifest", "received duplicate part %s", hash.GetHex()); + return false; } } else { - pfrom->Misbehaving(10); - return error("Unknown part received!"); + if(pfrom) pfrom->Misbehaving(10); + return error("Spurious part received!"); } } @@ -157,6 +159,7 @@ bool CScraperManifest::AlreadyHave(CNode* pfrom, const CInv& inv) } else { + if(pfrom) LogPrint("manifest", "new manifest %s from %s", inv.hash.GetHex(), pfrom->addrName); return false; } } @@ -224,11 +227,14 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) manifest.UnserializeCheck(vRecv); } catch(bool& e) { mapManifest.erase(hash); + LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); return false; } catch(std::ios_base::failure& e) { mapManifest.erase(hash); + LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); return false; } + LogPrint("manifest", "received manifest %s with %u / %u parts", hash.GetHex(),(unsigned)manifest.cntPartsRcvd,(unsigned)manifest.vParts.size()); if( manifest.cntPartsRcvd == manifest.vParts.size() ) { /* If we already got all the parts in memory, signal completition */ @@ -246,6 +252,7 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m) CDataStream ss(SER_NETWORK,1); ss << *m; #if 1 + LogPrint("manifest", "adding new local manifest"); /* at this point it is easier to pretent like it was received from network */ return CScraperManifest::RecvManifest(0, ss); #else @@ -268,6 +275,7 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m) void CScraperManifest::Complete() { /* Notify peers that we have a new manifest */ + LogPrint("manifest", "manifest %s complete with %u parts", phash->GetHex(),(unsigned)vParts.size()); { LOCK(cs_vNodes); for (auto const& pnode : vNodes) From e5608e3139d470a20c0f6ab4493a5152cb1392e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Tue, 20 Nov 2018 11:08:13 +0100 Subject: [PATCH 037/359] Add misbehaving on invalid manifest. --- src/scraper_net.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index e8c8c34825..8e2c7f8975 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -228,10 +228,12 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) } catch(bool& e) { mapManifest.erase(hash); LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); + if(pfrom) pfrom->Misbehaving(50); return false; } catch(std::ios_base::failure& e) { mapManifest.erase(hash); LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); + if(pfrom) pfrom->Misbehaving(50); return false; } LogPrint("manifest", "received manifest %s with %u / %u parts", hash.GetHex(),(unsigned)manifest.cntPartsRcvd,(unsigned)manifest.vParts.size()); From 0de715d7a797f6daee83415251c27889d9f3e9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Tue, 20 Nov 2018 23:58:40 +0100 Subject: [PATCH 038/359] Add support for signed manifest objects. --- src/scraper_net.cpp | 39 +++++++++++++++++++++++++++++++++++++-- src/scraper_net.h | 4 +++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 8e2c7f8975..64181c60e2 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -1,8 +1,15 @@ /* scraper_net.cpp */ + +/* Define this if you want to show pubkey as address, otherwise hex id */ +#define SCRAPER_NET_PK_AS_ADDRESS + #include #include "net.h" #include "rpcserver.h" #include "rpcprotocol.h" +#ifdef SCRAPER_NET_PK_AS_ADDRESS +#include "base58.h" +#endif #include "scraper_net.h" //Globals @@ -188,6 +195,7 @@ bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const { ss << testName; + ss << pubkey; for( const CPart* part : vParts ) ss << part->hash; } @@ -195,11 +203,21 @@ void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const void CScraperManifest::UnserializeCheck(CReaderStream& ss) { uint256 rh; + const auto pbegin = ss.begin(); ss >> testName; + ss >> pubkey; ss >> rh; addPart(rh); if(0==1) throw error("kek"); + + uint256 hash(Hash(pbegin,ss.begin())); + ss >> signature; + CKey mkey; + if(!mkey.SetPubKey(pubkey)) + throw error("CScraperManifest: Invalid manifest key"); + if(!mkey.Verify(hash, signature)) + throw error("CScraperManifest: Invalid manifest signature"); } bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) @@ -248,11 +266,19 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) return true; } -bool CScraperManifest::addManifest(std::unique_ptr&& m) +bool CScraperManifest::addManifest(std::unique_ptr&& m, CKey& keySign) { + m->pubkey= keySign.GetPubKey(); + /* serialize and hash the object */ CDataStream ss(SER_NETWORK,1); ss << *m; + + /* sign the serialized manifest and append the signature */ + uint256 hash(Hash(ss.begin(),ss.end())); + keySign.Sign(hash, m->signature); + ss << m->signature; + #if 1 LogPrint("manifest", "adding new local manifest"); /* at this point it is easier to pretent like it was received from network */ @@ -307,6 +333,11 @@ UniValue CScraperManifest::ToJson() const { UniValue result(UniValue::VOBJ); result.pushKV("testName",testName); + #ifdef SCRAPER_NET_PK_AS_ADDRESS + result.pushKV("pubkey",CBitcoinAddress(pubkey.GetID()).ToString()); + #else + result.pushKV("pubkey",pubkey.GetID().ToString()); + #endif UniValue parts(UniValue::VARR); for( const CPart* part : vParts ) parts.push_back(part->hash.GetHex()); @@ -356,6 +387,10 @@ UniValue sendmanifest(const UniValue& params, bool fHelp) CDataStream part(SER_NETWORK,1); part << std::string("SampleText") << rand(); manifest->addPartData(std::move(part)); - CScraperManifest::addManifest(std::move(manifest)); + + CKey key; + std::vector vchPrivKey = ParseHex(msMasterMessagePrivateKey); + key.SetPrivKey(CPrivKey(vchPrivKey.begin(),vchPrivKey.end())); + CScraperManifest::addManifest(std::move(manifest), key); return UniValue(true); } diff --git a/src/scraper_net.h b/src/scraper_net.h index c5f2328b98..65b8ced10e 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -86,12 +86,14 @@ class CScraperManifest static bool SendManifestTo(CNode* pfrom, const uint256& hash); /** Add new manifest object into list of known manifests */ - static bool addManifest(std::unique_ptr&& m); + static bool addManifest(std::unique_ptr&& m, CKey& keySign); public: /*==== fields ====*/ const uint256* phash; std::string testName; + CPubKey pubkey; + std::vector signature; public: /* public methods */ From 00c0bcd9190f5ab35d2d79e971daf1a04bf82f35 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 20 Nov 2018 18:08:00 -0500 Subject: [PATCH 039/359] Implement rpc functions for testing This implements some functions for testing the interface between the scraper core and the scraper_net CScraperManifest --- src/ScraperProxy/scraper.cpp | 147 +++++++++++++++++++++++++++++++++++ src/ScraperProxy/scraper.h | 9 +++ src/rpcserver.cpp | 2 + src/rpcserver.h | 2 + 4 files changed, 160 insertions(+) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index f00ef18636..40f21bb9f9 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1412,3 +1412,150 @@ ScraperStats GetScraperStatsByConsensusBeaconList() return mScraperStats; } + + + +/*********************** +* Scraper networking * +************************/ + +///* +bool ScraperSaveCScraperManifestToFiles() +{ + fs::path savepath = pathScraper / "incoming"; + + + // Check to see if the Scraper incoming directory exists and is a directory. If not create it. + if(fs::exists(savepath)) + { + // If it is a normal file, this is not right. Remove the file and replace with the Scraper directory. + if(fs::is_regular_file(savepath)) + { + fs::remove(savepath); + fs::create_directory(savepath); + } + } + else + fs::create_directory(savepath); + + for(const auto& pair : CScraperManifest::mapManifest) + { + // const uint256& hash = pair.first; + const CScraperManifest& manifest = *pair.second; + + std::string outputfile = manifest.testName; + + fs::path outputfilewpath = savepath / outputfile; + + std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); + + if (!outfile) + { + _log(ERROR, "ScraperSaveCScraperManifestToFiles", "Failed to open file (" + outputfile + ")"); + + return false; + } + + std::vector vchData; + std::vector::iterator it; + it = vchData.begin(); + + std::copy(manifest.vParts[0]->data.begin(), manifest.vParts[0]->data.end(), it); + + int datasize = vchData.size(); + + outfile.write((const char*)vchData.data(), datasize); + + outfile.flush(); + outfile.close(); + } + + return true; +} +//*/ + + + + +bool ScraperSendFileManifestContents() +{ + // This "broadcasts" the current ScraperFileManifest contents to the network. + + for (auto const& entry : mScraperFileManifest) + { + fs::path inputfile = entry.first; + + fs::path inputfilewpath = pathScraper / inputfile; + + // open input file, and associate with CAutoFile + FILE *file = fopen(inputfilewpath.c_str(), "rb"); + CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); + + if (!filein) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to open file (" + inputfile.string() + ")"); + return false; + } + + // use file size to size memory buffer + int dataSize = boost::filesystem::file_size(inputfilewpath); + std::vector vchData; + vchData.resize(dataSize); + + // read data and checksum from file + try + { + filein.read((char *)&vchData[0], dataSize); + } + catch (std::exception &e) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to read file (" + inputfile.string() + ")"); + return false; + } + + filein.fclose(); + + auto manifest = std::unique_ptr(new CScraperManifest()); + + // This should be replaced with the proper field name... + manifest->testName = inputfile.string(); + + CDataStream part(vchData, SER_NETWORK, 1); + manifest->addPartData(std::move(part)); + CScraperManifest::addManifest(std::move(manifest)); + } + + return true; +} + + + + + +UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 0 ) + throw std::runtime_error( + "sendscraperfilemanifest\n" + "Send a CScraperManifest object with the ScraperFileManifest.\n" + ); + + bool ret = ScraperSendFileManifestContents(); + + return UniValue(ret); +} + + + +UniValue savescraperfilemanifest(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 0 ) + throw std::runtime_error( + "savescraperfilemanifest\n" + "Send a CScraperManifest object with the ScraperFileManifest.\n" + ); + + bool ret = ScraperSaveCScraperManifestToFiles(); + + return UniValue(ret); +} diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index d5ac9653c4..7045b5db33 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -29,6 +29,13 @@ #include "appcache.h" #include "beacon.h" +#include +#include "net.h" +// Do not include rpcserver.h yet, as it includes conflicting ExtractXML functions. To do: remove duplicates. +//#include "rpcserver.h" +#include "rpcprotocol.h" +#include "scraper_net.h" + #ifndef SCRAPER_STANDALONE #include "util.h" #else @@ -153,6 +160,8 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); +bool ScraperSaveCScraperManifestToFiles(); +bool ScraperSendFileManifestContents(); double MagRound(double dMag) { diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index a3a3c68fc5..dc0deef0f1 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -404,6 +404,8 @@ static const CRPCCommand vRPCCommands[] = { "listmanifests", &listmanifests, false, cat_developer }, { "getmpart", &getmpart, false, cat_developer }, { "sendmanifest", &sendmanifest, false, cat_developer }, + { "sendscraperfilemanifest", &sendscraperfilemanifest, false, cat_developer }, + { "savescraperfilemanifest", &savescraperfilemanifest, false, cat_developer }, // Network commands { "addnode", &addnode, false, cat_network }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 4f9c4c21fa..c915470ecb 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -224,6 +224,8 @@ extern UniValue listmanifests(const UniValue& params, bool fHelp); extern UniValue getmanifest(const UniValue& params, bool fHelp); extern UniValue getmpart(const UniValue& params, bool fHelp); extern UniValue sendmanifest(const UniValue& params, bool fHelp); +extern UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp); +extern UniValue savescraperfilemanifest(const UniValue& params, bool fHelp); // Network extern UniValue addnode(const UniValue& params, bool fHelp); From 673b5c0a7e3059637c6a75e53fd96e56b474c7ee Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 20 Nov 2018 19:09:16 -0500 Subject: [PATCH 040/359] Fix to ScraperSaveCScraperManifestToFiles() Write size was incorrectly set. --- src/ScraperProxy/scraper.cpp | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 40f21bb9f9..e362d449ff 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1445,31 +1445,37 @@ bool ScraperSaveCScraperManifestToFiles() std::string outputfile = manifest.testName; - fs::path outputfilewpath = savepath / outputfile; + if(outputfile.find(".gz") != std::string::npos) + { + fs::path outputfilewpath = savepath / outputfile; - std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); - if (!outfile) - { - _log(ERROR, "ScraperSaveCScraperManifestToFiles", "Failed to open file (" + outputfile + ")"); + if (!outfile) + { + _log(ERROR, "ScraperSaveCScraperManifestToFiles", "Failed to open file (" + outputfile + ")"); - return false; - } + return false; + } - std::vector vchData; - std::vector::iterator it; - it = vchData.begin(); + std::vector vchData; + vchData.resize(manifest.vParts[0]->data.size()); + + std::vector::iterator it; + it = vchData.begin(); - std::copy(manifest.vParts[0]->data.begin(), manifest.vParts[0]->data.end(), it); + std::copy(manifest.vParts[0]->data.begin(), manifest.vParts[0]->data.end(), it); - int datasize = vchData.size(); + int datasize = vchData.size(); - outfile.write((const char*)vchData.data(), datasize); + outfile.write((const char*)vchData.data(), datasize); - outfile.flush(); - outfile.close(); + outfile.flush(); + outfile.close(); + } } + return true; } //*/ From ab187ba7cadf9b2f4aad949a909431bb877e62b7 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 21 Nov 2018 20:36:19 -0500 Subject: [PATCH 041/359] Remove conditional around setting pathScraper. Simplify file writing function. --- src/ScraperProxy/scraper.cpp | 47 ++++++++++++++++++++++++------------ src/ScraperProxy/scraper.h | 1 + src/init.cpp | 8 ++---- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index e362d449ff..0568154c10 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -237,6 +237,29 @@ std::string ExtractXML(const std::string& XMLdata, const std::string& key, const return extraction; } + +bool ScraperDirectorySanity() +{ + // Check for the existence and proper form of the Scraper subdirectory (pathScraper), and make if necessary. + if(fs::exists(pathScraper)) + { + // If it is a normal file, this is not right. Remove the file and replace with the Scraper directory. + if(fs::is_regular_file(pathScraper)) + { + fs::remove(pathScraper); + fs::create_directory(pathScraper); + } + } + else + fs::create_directory(pathScraper); + + // Need to implement error handling. For now, returns true. + + return true; +} + + + /********************** * Scraper Logger * **********************/ @@ -1419,11 +1442,13 @@ ScraperStats GetScraperStatsByConsensusBeaconList() * Scraper networking * ************************/ -///* bool ScraperSaveCScraperManifestToFiles() { - fs::path savepath = pathScraper / "incoming"; + // Make sure the Scraper directory itself exists, because this function could be called from outside + // the scraper thread loop, and therefore the directory may not have been set up yet. + ScraperDirectorySanity(); + fs::path savepath = pathScraper / "incoming"; // Check to see if the Scraper incoming directory exists and is a directory. If not create it. if(fs::exists(savepath)) @@ -1458,27 +1483,15 @@ bool ScraperSaveCScraperManifestToFiles() return false; } - std::vector vchData; - vchData.resize(manifest.vParts[0]->data.size()); - - std::vector::iterator it; - it = vchData.begin(); - - std::copy(manifest.vParts[0]->data.begin(), manifest.vParts[0]->data.end(), it); - - int datasize = vchData.size(); - - outfile.write((const char*)vchData.data(), datasize); + outfile.write((const char*)manifest.vParts[0]->data.data(), manifest.vParts[0]->data.size()); outfile.flush(); outfile.close(); } } - return true; } -//*/ @@ -1489,6 +1502,10 @@ bool ScraperSendFileManifestContents() for (auto const& entry : mScraperFileManifest) { + // Only include current files to send across the network. + if (!entry.second.current) + continue; + fs::path inputfile = entry.first; fs::path inputfilewpath = pathScraper / inputfile; diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 7045b5db33..a7a5f5a11d 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -148,6 +148,7 @@ static const double NEURALNETWORKMULTIPLIER = 115000; void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); +bool ScraperDirectorySanity(); bool StoreBeaconList(const fs::path& file); bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap); std::vector split(const std::string& s, const std::string& delim); diff --git a/src/init.cpp b/src/init.cpp index c035d0dd19..4e486dc521 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -543,12 +543,8 @@ bool AppInit2(ThreadHandlerPtr threads) if (!lock.try_lock()) return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Gridcoin is probably already running."), strDataDir)); - if (GetBoolArg("-scraper")) - { - // If the scraper is going to be run, then set the scraper file staging directory. - pathScraper = GetDataDir() / "Scraper"; - ; - } + // Set the scraper file staging directory. + pathScraper = GetDataDir() / "Scraper"; From 74aa4029d942cb602a5603d04b71a9db62a0f157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Thu, 22 Nov 2018 15:58:38 +0100 Subject: [PATCH 042/359] Add useful fields to CScraperManifest. Impl ser/des/json. --- src/scraper_net.cpp | 117 ++++++++++++++++++++++++++++++++++---------- src/scraper_net.h | 31 ++++++++++-- 2 files changed, 118 insertions(+), 30 deletions(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 64181c60e2..110c1e2622 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -41,8 +41,8 @@ bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) { CSplitBlob& split= *ref.first; ++split.cntPartsRcvd; - assert(split.cntPartsRcvd <= split.vParts.size()); - if( split.cntPartsRcvd == split.vParts.size() ) + assert(split.cntPartsRcvd <= (long)split.vParts.size()); + if( split.isComplete() ) { split.Complete(); } @@ -72,7 +72,7 @@ void CSplitBlob::addPart(const uint256& ihash) part.refs.emplace(this, n); } -bool CSplitBlob::addPartData(CDataStream&& vData) +long CSplitBlob::addPartData(CDataStream&& vData) { uint256 hash(Hash(vData.begin(), vData.end())); @@ -92,11 +92,10 @@ bool CSplitBlob::addPartData(CDataStream&& vData) /* missing data; use the supplied data */ /* prevent calling the Complete callback FIXME: make this look better */ cntPartsRcvd--; - bool rc= CSplitBlob::RecvPart(0, vData); + CSplitBlob::RecvPart(0, vData); cntPartsRcvd++; - return rc; } - else return false; + return n; } CSplitBlob::~CSplitBlob() @@ -192,24 +191,63 @@ bool CScraperManifest::SendManifestTo(CNode* pto, const uint256& hash) } + +void CScraperManifest::dentry::Serialize(CDataStream& ss, int nType, int nVersion) const +{ /* TODO: remove this redundant code */ + ss<< project; + ss<< ETag; + ss<< LastModified; + ss<< part1 << partc; + ss<< GridcoinTeamID; + ss<< current; + ss<< last; +} +void CScraperManifest::dentry::Unserialize(CReaderStream& ss, int nType, int nVersion) +{ + ss>> project; + ss>> ETag; + ss>> LastModified; + ss>> part1 >> partc; + ss>> GridcoinTeamID; + ss>> current; + ss>> last; +} + void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const { - ss << testName; - ss << pubkey; + WriteCompactSize(ss, vParts.size()); for( const CPart* part : vParts ) ss << part->hash; + ss<< pubkey; + ss<< testName; + ss<< nTime; + ss<< ConsensusBlock; + ss<< BeaconList << BeaconList_c; + ss<< projects; } - void CScraperManifest::UnserializeCheck(CReaderStream& ss) { - uint256 rh; const auto pbegin = ss.begin(); - ss >> testName; - ss >> pubkey; - ss >> rh; - addPart(rh); - if(0==1) - throw error("kek"); + + vector vph; + ss>>vph; + ss>> pubkey; + #if 0 + if( pubkey not in authorized scraper key list ) + throw error("CScraperManifest::UnserializeCheck: Unapproved scraper ID"); + #endif + + ss>> testName; + ss>> nTime; + ss>> ConsensusBlock; + ss>> BeaconList >> BeaconList_c; + ss>> projects; + + if(BeaconList+BeaconList_c>(long)vph.size()) + throw error("CScraperManifest::UnserializeCheck: part out of range"); + for(const dentry& prj : projects) + if(prj.part1+prj.partc>(long)vph.size()) + throw error("CScraperManifest::UnserializeCheck: part out of range"); uint256 hash(Hash(pbegin,ss.begin())); ss >> signature; @@ -218,6 +256,8 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) throw error("CScraperManifest: Invalid manifest key"); if(!mkey.Verify(hash, signature)) throw error("CScraperManifest: Invalid manifest signature"); + for( const uint256& ph : vph ) + addPart(ph); } bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) @@ -245,17 +285,17 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) manifest.UnserializeCheck(vRecv); } catch(bool& e) { mapManifest.erase(hash); - LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); + LogPrint("manifest", "invalid manifest %s receiveD", hash.GetHex()); if(pfrom) pfrom->Misbehaving(50); return false; } catch(std::ios_base::failure& e) { mapManifest.erase(hash); - LogPrint("manifest", "invalid manifest %s received", hash.GetHex()); + LogPrint("manifest", "invalid manifest %s receivEd", hash.GetHex()); if(pfrom) pfrom->Misbehaving(50); return false; } LogPrint("manifest", "received manifest %s with %u / %u parts", hash.GetHex(),(unsigned)manifest.cntPartsRcvd,(unsigned)manifest.vParts.size()); - if( manifest.cntPartsRcvd == manifest.vParts.size() ) + if( manifest.isComplete() ) { /* If we already got all the parts in memory, signal completition */ manifest.Complete(); @@ -331,18 +371,41 @@ void CScraperManifest::Complete() UniValue CScraperManifest::ToJson() const { - UniValue result(UniValue::VOBJ); - result.pushKV("testName",testName); + UniValue r(UniValue::VOBJ); #ifdef SCRAPER_NET_PK_AS_ADDRESS - result.pushKV("pubkey",CBitcoinAddress(pubkey.GetID()).ToString()); + r.pushKV("pubkey",CBitcoinAddress(pubkey.GetID()).ToString()); #else - result.pushKV("pubkey",pubkey.GetID().ToString()); + r.pushKV("pubkey",pubkey.GetID().ToString()); #endif + r.pushKV("testName",testName); + + r.pushKV("nTime",(int64_t)nTime); + r.pushKV("nTime",DateTimeStrFormat(nTime)); + r.pushKV("ConsensusBlock",ConsensusBlock.GetHex()); + r.pushKV("BeaconList",BeaconList); r.pushKV("BeaconList_c",(long)BeaconList_c); + + UniValue projects(UniValue::VARR); + for( const dentry& part : this->projects ) + projects.push_back(part.ToJson()); + r.pushKV("projects",projects); + UniValue parts(UniValue::VARR); - for( const CPart* part : vParts ) + for( const CPart* part : this->vParts ) parts.push_back(part->hash.GetHex()); - result.pushKV("parts",parts); - return result; + r.pushKV("parts",parts); + return r; +} +UniValue CScraperManifest::dentry::ToJson() const +{ + UniValue r(UniValue::VOBJ); + r.pushKV("project",project); + r.pushKV("ETag",ETag); + r.pushKV("LastModified",DateTimeStrFormat(LastModified)); + r.pushKV("part1",part1); r.pushKV("partc",(long)partc); + r.pushKV("GridcoinTeamID",GridcoinTeamID); + r.pushKV("current",current); + r.pushKV("last",last); + return r; } UniValue listmanifests(const UniValue& params, bool fHelp) @@ -372,7 +435,7 @@ UniValue getmpart(const UniValue& params, bool fHelp) auto ipart= CSplitBlob::mapParts.find(uint256(params[0].get_str())); if(ipart == CSplitBlob::mapParts.end()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Object not found"); - return UniValue(std::string(ipart->second.data.begin(),ipart->second.data.end())); + return UniValue(HexStr(ipart->second.data.begin(),ipart->second.data.end())); } UniValue sendmanifest(const UniValue& params, bool fHelp) diff --git a/src/scraper_net.h b/src/scraper_net.h index 65b8ced10e..2c5b558709 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -26,6 +26,9 @@ class CSplitBlob */ static bool RecvPart(CNode* pfrom, CDataStream& vRecv); + bool isComplete() const + { return cntPartsRcvd == (long)vParts.size(); } + /** Notification that this Split object is fully received. */ virtual void Complete() = 0; @@ -43,7 +46,7 @@ class CSplitBlob void addPart(const uint256& ihash); /** Create a part from specified data and add reference to it into vParts. */ - bool addPartData(CDataStream&& vData); + long addPartData(CDataStream&& vData); /** Unref all parts referenced by this. Removes parts with no references */ ~CSplitBlob(); @@ -51,7 +54,7 @@ class CSplitBlob /* We could store the parts in mapRelay and have getdata service for free. */ /** map from part hash to scraper Index, so we can attach incoming Part in Index */ static std::map mapParts; - unsigned cntPartsRcvd =0; + long cntPartsRcvd =0; }; @@ -95,10 +98,32 @@ class CScraperManifest CPubKey pubkey; std::vector signature; + struct dentry { + std::string project; + std::string ETag; + unsigned int LastModified =0; + long part1 =-1; + unsigned partc =0; + long GridcoinTeamID =-1; + bool current =0; + bool last =0; + + void Serialize(CDataStream& s, int nType, int nVersion) const; + void Unserialize(CReaderStream& s, int nType, int nVersion); + UniValue ToJson() const; + }; + + std::vector projects; + + long BeaconList =-1; + unsigned BeaconList_c =0; + uint256 ConsensusBlock; + unsigned int nTime =0; + public: /* public methods */ /** Hook called when all parts are available */ - virtual void Complete() override; + void Complete() override; /** Serialize this object for seding over the network. */ void Serialize(CDataStream& s, int nType, int nVersion) const; From 674b7b239651b5c4abd6a04d32f780af927a0522 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 24 Nov 2018 01:37:20 -0500 Subject: [PATCH 043/359] Changes to ScraperSendFileManifestContents This implements changes to the ScraperSendFileManifestContents function to place multiple file objects in one manifest and fill out dentry vector. Still have to do the save function. --- src/ScraperProxy/scraper.cpp | 139 ++++++++++++++++++++++++++++++++++- src/ScraperProxy/scraper.h | 4 +- src/rpcserver.cpp | 1 + src/rpcserver.h | 2 + src/scraper_net.h | 3 + 5 files changed, 144 insertions(+), 5 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 0568154c10..cd8c9c44d4 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1495,7 +1495,7 @@ bool ScraperSaveCScraperManifestToFiles() - +/* bool ScraperSendFileManifestContents() { // This "broadcasts" the current ScraperFileManifest contents to the network. @@ -1545,25 +1545,142 @@ bool ScraperSendFileManifestContents() CDataStream part(vchData, SER_NETWORK, 1); manifest->addPartData(std::move(part)); - CScraperManifest::addManifest(std::move(manifest)); + + CKey key; + std::vector vchPrivKey = ParseHex(msMasterMessagePrivateKey); + key.SetPrivKey(CPrivKey(vchPrivKey.begin(),vchPrivKey.end())); + + CScraperManifest::addManifest(std::move(manifest), key); + } + + return true; +} +*/ + + + + + +bool ScraperSendFileManifestContents(std::string sCManifestName) +{ + // This "broadcasts" the current ScraperFileManifest contents to the network. + + auto manifest = std::unique_ptr(new CScraperManifest()); + + // This should be replaced with the proper field name... + manifest->testName = sCManifestName; + + // This will have to be changed to support files bigger than 32 MB, where more than one + // part per object will be required. + long nPartNum = 0; + for (auto const& entry : mScraperFileManifest) + { + // Only include current files to send across the network. + if (!entry.second.current) + continue; + + fs::path inputfile = entry.first; + + fs::path inputfilewpath = pathScraper / inputfile; + + // open input file, and associate with CAutoFile + FILE *file = fopen(inputfilewpath.c_str(), "rb"); + CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); + + if (!filein) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to open file (" + inputfile.string() + ")"); + return false; + } + + // use file size to size memory buffer + int dataSize = boost::filesystem::file_size(inputfilewpath); + std::vector vchData; + vchData.resize(dataSize); + + // read data and checksum from file + try + { + filein.read((char *)&vchData[0], dataSize); + } + catch (std::exception &e) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to read file (" + inputfile.string() + ")"); + return false; + } + + filein.fclose(); + + + CScraperManifest::dentry ProjectEntry; + + ProjectEntry.project = entry.second.project; + std::string sProject = entry.second.project + "-"; + + std::string sinputfile = inputfile.string(); + std::string suffix = "-ByCPID.gz"; + + std::string ETag = sinputfile.erase(sinputfile.find(sProject), sProject.length()); + ETag = sinputfile.erase(sinputfile.find(suffix), suffix.length()); + + ProjectEntry.ETag = ETag; + + ProjectEntry.LastModified = entry.second.timestamp; + + // For now each object will only have one part. + ProjectEntry.part1 = nPartNum; + ProjectEntry.partc = 1; + ProjectEntry.GridcoinTeamID = -1; //Not used anymore + + ProjectEntry.current = entry.second.current; + + ProjectEntry.last = 1; + + manifest->projects.push_back(ProjectEntry); + + CDataStream part(vchData, SER_NETWORK, 1); + + manifest->addPartData(std::move(part)); + + nPartNum++; } + CKey key; + std::vector vchPrivKey = ParseHex(msMasterMessagePrivateKey); + key.SetPrivKey(CPrivKey(vchPrivKey.begin(),vchPrivKey.end())); + + CScraperManifest::addManifest(std::move(manifest), key); + return true; } +bool ScraperDeleteCScaperManifest(uint256 nHash) +{ + // This delete a manifest. + + auto pair = CScraperManifest::mapManifest.find(nHash); + + // const uint256& hash = pair.first; + CScraperManifest& manifest = *pair->second; + + manifest.~CSplitBlob(); + + return true; +} + UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp) { - if(fHelp || params.size() != 0 ) + if(fHelp || params.size() != 1 ) throw std::runtime_error( "sendscraperfilemanifest\n" "Send a CScraperManifest object with the ScraperFileManifest.\n" ); - bool ret = ScraperSendFileManifestContents(); + bool ret = ScraperSendFileManifestContents(params[0].get_str()); return UniValue(ret); } @@ -1582,3 +1699,17 @@ UniValue savescraperfilemanifest(const UniValue& params, bool fHelp) return UniValue(ret); } + + +UniValue deletecscrapermanifest(const UniValue& params, bool fHelp) +{ + if(fHelp || params.size() != 1 ) + throw std::runtime_error( + "deletecscrapermanifest \n" + "delete manifest object.\n" + ); + bool ret = ScraperDeleteCScaperManifest((uint256(params[0].get_str()))); + return UniValue(ret); +} + + diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index a7a5f5a11d..fbeaf5918a 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -83,6 +83,7 @@ const std::string GetTextForstatsobjecttype(int EnumValue) *********************/ extern bool fDebug; +extern std::string msMasterMessagePrivateKey; std::vector> vwhitelist; std::vector> vuserpass; std::vector> vprojectteamids; @@ -162,7 +163,8 @@ ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(); -bool ScraperSendFileManifestContents(); +bool ScraperSendFileManifestContents(std::string CManifestName); +bool ScraperDeleteCScaperManifest(); double MagRound(double dMag) { diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index dc0deef0f1..dcba8f96b6 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -406,6 +406,7 @@ static const CRPCCommand vRPCCommands[] = { "sendmanifest", &sendmanifest, false, cat_developer }, { "sendscraperfilemanifest", &sendscraperfilemanifest, false, cat_developer }, { "savescraperfilemanifest", &savescraperfilemanifest, false, cat_developer }, + { "deletecscrapermanifest", &deletecscrapermanifest, false, cat_developer }, // Network commands { "addnode", &addnode, false, cat_network }, diff --git a/src/rpcserver.h b/src/rpcserver.h index c915470ecb..0cb29fe218 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -226,6 +226,8 @@ extern UniValue getmpart(const UniValue& params, bool fHelp); extern UniValue sendmanifest(const UniValue& params, bool fHelp); extern UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp); extern UniValue savescraperfilemanifest(const UniValue& params, bool fHelp); +extern UniValue deletecscrapermanifest(const UniValue& params, bool fHelp); + // Network extern UniValue addnode(const UniValue& params, bool fHelp); diff --git a/src/scraper_net.h b/src/scraper_net.h index 2c5b558709..5e3122b825 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -4,6 +4,9 @@ * that to parent class. Sice it will be all in one file there will not be any * polymorfism. */ + +#include + /** Abstract class for blobs that are split into parts. */ class CSplitBlob { From 7df0fb99679bf4690c7d854936218198866bdf35 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 27 Nov 2018 16:17:07 -0500 Subject: [PATCH 044/359] Fix casting in scraper_net univalue Fixes compiler errors on GCC 7.1, and also adjusts scraper file manifest send. --- src/ScraperProxy/scraper.cpp | 7 ++++++- src/scraper_net.cpp | 10 +++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index cd8c9c44d4..7eaeea6466 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1570,6 +1570,11 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) // This should be replaced with the proper field name... manifest->testName = sCManifestName; + manifest->nTime = GetAdjustedTime(); + + manifest->BeaconList = 0; + manifest->BeaconList_c = 0; + // This will have to be changed to support files bigger than 32 MB, where more than one // part per object will be required. long nPartNum = 0; @@ -1629,7 +1634,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) // For now each object will only have one part. ProjectEntry.part1 = nPartNum; - ProjectEntry.partc = 1; + ProjectEntry.partc = 0; ProjectEntry.GridcoinTeamID = -1; //Not used anymore ProjectEntry.current = entry.second.current; diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 110c1e2622..bc7a8484a6 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -244,10 +244,10 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) ss>> projects; if(BeaconList+BeaconList_c>(long)vph.size()) - throw error("CScraperManifest::UnserializeCheck: part out of range"); + throw error("CScraperManifest::UnserializeCheck: beacon part out of range"); for(const dentry& prj : projects) if(prj.part1+prj.partc>(long)vph.size()) - throw error("CScraperManifest::UnserializeCheck: part out of range"); + throw error("CScraperManifest::UnserializeCheck: project part out of range"); uint256 hash(Hash(pbegin,ss.begin())); ss >> signature; @@ -382,7 +382,7 @@ UniValue CScraperManifest::ToJson() const r.pushKV("nTime",(int64_t)nTime); r.pushKV("nTime",DateTimeStrFormat(nTime)); r.pushKV("ConsensusBlock",ConsensusBlock.GetHex()); - r.pushKV("BeaconList",BeaconList); r.pushKV("BeaconList_c",(long)BeaconList_c); + r.pushKV("BeaconList",(int64_t)BeaconList); r.pushKV("BeaconList_c",(int64_t)BeaconList_c); UniValue projects(UniValue::VARR); for( const dentry& part : this->projects ) @@ -401,8 +401,8 @@ UniValue CScraperManifest::dentry::ToJson() const r.pushKV("project",project); r.pushKV("ETag",ETag); r.pushKV("LastModified",DateTimeStrFormat(LastModified)); - r.pushKV("part1",part1); r.pushKV("partc",(long)partc); - r.pushKV("GridcoinTeamID",GridcoinTeamID); + r.pushKV("part1",(int64_t)part1); r.pushKV("partc",(int64_t)partc); + r.pushKV("GridcoinTeamID",(int64_t)GridcoinTeamID); r.pushKV("current",current); r.pushKV("last",last); return r; From 7c7737b684ef071f7072e0eb4bb3b0551326f82f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 1 Dec 2018 23:19:14 -0500 Subject: [PATCH 045/359] Refine manifest creation and saves --- src/ScraperProxy/scraper.cpp | 145 ++++++++++++++++------------------- src/ScraperProxy/scraper.h | 2 +- src/scraper_net.cpp | 16 ++-- src/scraper_net.h | 2 +- 4 files changed, 77 insertions(+), 88 deletions(-) mode change 100644 => 100755 src/scraper_net.cpp mode change 100644 => 100755 src/scraper_net.h diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 7eaeea6466..f1dd4ce0aa 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -814,7 +814,6 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil -///* uint256 GetFileHash(const fs::path& inputfile) { // open input file, and associate with CAutoFile @@ -892,6 +891,9 @@ bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap) std::string line; int64_t ntimestamp; + + // Header -- throw away. + std::getline(in, line); while (std::getline(in, line)) { @@ -939,6 +941,9 @@ bool StoreBeaconList(const fs::path& file) std::stringstream stream; _log(INFO, "StoreBeaconList", "Started processing " + file.string()); + + // Header + stream << "CPID," << "Time," << "Beacon\n"; for (auto const& entry : mBeaconMap) { @@ -1012,6 +1017,9 @@ bool LoadScraperFileManifest(const fs::path& file) int64_t ntimestamp; + // Header - throw away. + std::getline(in, line); + while (std::getline(in, line)) { @@ -1062,6 +1070,9 @@ bool StoreScraperFileManifest(const fs::path& file) { LOCK(cs_mScraperFileManifest); + // Header. + stream << "Hash," << "Current," << "Time," << "Project," << "Filename\n"; + for (auto const& entry : mScraperFileManifest) { uint256 nEntryHash = entry.second.hash; @@ -1184,8 +1195,6 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi in.push(boostio::gzip_decompressor()); in.push(ingzfile); - //_log(INFO, "LoadProjectFileToStatsByCPID", "mBeaconMap entries: " + std::to_string(mBeaconMap.size())); - bool bcomplete = false; bool bfileerror = false; std::vector vXML; @@ -1442,7 +1451,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() * Scraper networking * ************************/ -bool ScraperSaveCScraperManifestToFiles() +bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) { // Make sure the Scraper directory itself exists, because this function could be called from outside // the scraper thread loop, and therefore the directory may not have been set up yet. @@ -1468,7 +1477,7 @@ bool ScraperSaveCScraperManifestToFiles() // const uint256& hash = pair.first; const CScraperManifest& manifest = *pair.second; - std::string outputfile = manifest.testName; + std::string outputfile = manifest.sCManifestName; if(outputfile.find(".gz") != std::string::npos) { @@ -1495,89 +1504,64 @@ bool ScraperSaveCScraperManifestToFiles() -/* -bool ScraperSendFileManifestContents() + +bool ScraperSendFileManifestContents(std::string sCManifestName) { // This "broadcasts" the current ScraperFileManifest contents to the network. - for (auto const& entry : mScraperFileManifest) - { - // Only include current files to send across the network. - if (!entry.second.current) - continue; - - fs::path inputfile = entry.first; - - fs::path inputfilewpath = pathScraper / inputfile; - - // open input file, and associate with CAutoFile - FILE *file = fopen(inputfilewpath.c_str(), "rb"); - CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); - - if (!filein) - { - _log(ERROR, "ScraperSendFileManifestContents", "Failed to open file (" + inputfile.string() + ")"); - return false; - } - - // use file size to size memory buffer - int dataSize = boost::filesystem::file_size(inputfilewpath); - std::vector vchData; - vchData.resize(dataSize); - - // read data and checksum from file - try - { - filein.read((char *)&vchData[0], dataSize); - } - catch (std::exception &e) - { - _log(ERROR, "ScraperSendFileManifestContents", "Failed to read file (" + inputfile.string() + ")"); - return false; - } - - filein.fclose(); + auto manifest = std::unique_ptr(new CScraperManifest()); - auto manifest = std::unique_ptr(new CScraperManifest()); + // This should be replaced with the proper field name... + manifest->sCManifestName = sCManifestName; - // This should be replaced with the proper field name... - manifest->testName = inputfile.string(); + manifest->nTime = GetAdjustedTime(); - CDataStream part(vchData, SER_NETWORK, 1); - manifest->addPartData(std::move(part)); + // This will have to be changed to support files bigger than 32 MB, where more than one + // part per object will be required. + long iPartNum = 0; - CKey key; - std::vector vchPrivKey = ParseHex(msMasterMessagePrivateKey); - key.SetPrivKey(CPrivKey(vchPrivKey.begin(),vchPrivKey.end())); + // Read in BeaconList + fs::path inputfile = "BeaconList.csv.gz"; + fs::path inputfilewpath = pathScraper / inputfile; + + // open input file, and associate with CAutoFile + FILE *file = fopen(inputfilewpath.c_str(), "rb"); + CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); - CScraperManifest::addManifest(std::move(manifest), key); + if (!filein) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to open file (" + inputfile.string() + ")"); + return false; } - return true; -} -*/ - - - + // use file size to size memory buffer + int dataSize = boost::filesystem::file_size(inputfilewpath); + std::vector vchData; + vchData.resize(dataSize); + // read data from file + try + { + filein.read((char *)&vchData[0], dataSize); + } + catch (std::exception &e) + { + _log(ERROR, "ScraperSendFileManifestContents", "Failed to read file (" + inputfile.string() + ")"); + return false; + } -bool ScraperSendFileManifestContents(std::string sCManifestName) -{ - // This "broadcasts" the current ScraperFileManifest contents to the network. + filein.fclose(); - auto manifest = std::unique_ptr(new CScraperManifest()); + // The first part number will be the BeaconList. + manifest->BeaconList = iPartNum; + manifest->BeaconList_c = 0; - // This should be replaced with the proper field name... - manifest->testName = sCManifestName; + CDataStream part(vchData, SER_NETWORK, 1); - manifest->nTime = GetAdjustedTime(); + manifest->addPartData(std::move(part)); - manifest->BeaconList = 0; - manifest->BeaconList_c = 0; + iPartNum++; - // This will have to be changed to support files bigger than 32 MB, where more than one - // part per object will be required. - long nPartNum = 0; for (auto const& entry : mScraperFileManifest) { // Only include current files to send across the network. @@ -1603,7 +1587,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) std::vector vchData; vchData.resize(dataSize); - // read data and checksum from file + // read data from file try { filein.read((char *)&vchData[0], dataSize); @@ -1633,7 +1617,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) ProjectEntry.LastModified = entry.second.timestamp; // For now each object will only have one part. - ProjectEntry.part1 = nPartNum; + ProjectEntry.part1 = iPartNum; ProjectEntry.partc = 0; ProjectEntry.GridcoinTeamID = -1; //Not used anymore @@ -1647,9 +1631,10 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) manifest->addPartData(std::move(part)); - nPartNum++; + iPartNum++; } + // Sign and "send". CKey key; std::vector vchPrivKey = ParseHex(msMasterMessagePrivateKey); key.SetPrivKey(CPrivKey(vchPrivKey.begin(),vchPrivKey.end())); @@ -1663,7 +1648,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) bool ScraperDeleteCScaperManifest(uint256 nHash) { - // This delete a manifest. + // This deletes a manifest. auto pair = CScraperManifest::mapManifest.find(nHash); @@ -1681,7 +1666,7 @@ UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp) { if(fHelp || params.size() != 1 ) throw std::runtime_error( - "sendscraperfilemanifest\n" + "sendscraperfilemanifest \n" "Send a CScraperManifest object with the ScraperFileManifest.\n" ); @@ -1694,13 +1679,13 @@ UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp) UniValue savescraperfilemanifest(const UniValue& params, bool fHelp) { - if(fHelp || params.size() != 0 ) + if(fHelp || params.size() != 1 ) throw std::runtime_error( - "savescraperfilemanifest\n" + "savescraperfilemanifest \n" "Send a CScraperManifest object with the ScraperFileManifest.\n" ); - bool ret = ScraperSaveCScraperManifestToFiles(); + bool ret = ScraperSaveCScraperManifestToFiles(uint256(params[0].get_str())); return UniValue(ret); } @@ -1713,7 +1698,7 @@ UniValue deletecscrapermanifest(const UniValue& params, bool fHelp) "deletecscrapermanifest \n" "delete manifest object.\n" ); - bool ret = ScraperDeleteCScaperManifest((uint256(params[0].get_str()))); + bool ret = ScraperDeleteCScaperManifest(uint256(params[0].get_str())); return UniValue(ret); } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index fbeaf5918a..7aa95fc461 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -162,7 +162,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); -bool ScraperSaveCScraperManifestToFiles(); +bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); bool ScraperSendFileManifestContents(std::string CManifestName); bool ScraperDeleteCScaperManifest(); diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp old mode 100644 new mode 100755 index bc7a8484a6..0c3cbc08b9 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -219,7 +219,7 @@ void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const for( const CPart* part : vParts ) ss << part->hash; ss<< pubkey; - ss<< testName; + ss<< sCManifestName; ss<< nTime; ss<< ConsensusBlock; ss<< BeaconList << BeaconList_c; @@ -237,7 +237,7 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) throw error("CScraperManifest::UnserializeCheck: Unapproved scraper ID"); #endif - ss>> testName; + ss>> sCManifestName; ss>> nTime; ss>> ConsensusBlock; ss>> BeaconList >> BeaconList_c; @@ -249,8 +249,10 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) if(prj.part1+prj.partc>(long)vph.size()) throw error("CScraperManifest::UnserializeCheck: project part out of range"); - uint256 hash(Hash(pbegin,ss.begin())); + uint256 hash = Hash(pbegin, ss.begin()); + //uint256 hash = Hash(pbegin, ss.end()); ss >> signature; + CKey mkey; if(!mkey.SetPubKey(pubkey)) throw error("CScraperManifest: Invalid manifest key"); @@ -353,7 +355,7 @@ void CScraperManifest::Complete() /* Do something with the complete manifest */ std::string bodystr; vParts[0]->getReader() >> bodystr; - printf("CScraperManifest::Complete(): %s %s\n",testName.c_str(),bodystr.c_str()); + printf("CScraperManifest::Complete(): %s %s\n",sCManifestName.c_str(),bodystr.c_str()); } /* how? @@ -377,7 +379,7 @@ UniValue CScraperManifest::ToJson() const #else r.pushKV("pubkey",pubkey.GetID().ToString()); #endif - r.pushKV("testName",testName); + r.pushKV("sCManifestName",sCManifestName); r.pushKV("nTime",(int64_t)nTime); r.pushKV("nTime",DateTimeStrFormat(nTime)); @@ -446,7 +448,9 @@ UniValue sendmanifest(const UniValue& params, bool fHelp) "Send a new CScraperManifest object.\n" ); auto manifest= std::unique_ptr(new CScraperManifest()); - manifest->testName= params[0].get_str(); + manifest->sCManifestName= params[0].get_str(); + // Because if BeaconList is -1 it will fail the out of range test. + manifest->BeaconList = 0; CDataStream part(SER_NETWORK,1); part << std::string("SampleText") << rand(); manifest->addPartData(std::move(part)); diff --git a/src/scraper_net.h b/src/scraper_net.h old mode 100644 new mode 100755 index 5e3122b825..0b403a254e --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -97,7 +97,7 @@ class CScraperManifest public: /*==== fields ====*/ const uint256* phash; - std::string testName; + std::string sCManifestName; CPubKey pubkey; std::vector signature; From fb5bd1afa3dc3e6e40f78d89fbec30264ad5fd9f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 2 Dec 2018 11:51:17 -0500 Subject: [PATCH 046/359] Resolve merge conflicts due to AppCache Changes --- src/ScraperProxy/scraper.cpp | 2 +- src/ScraperProxy/scraper.h | 4 ++-- src/main.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index f1dd4ce0aa..e2f3874145 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -921,7 +921,7 @@ bool StoreBeaconList(const fs::path& file) { BeaconMap mBeaconMap = GetConsensusBeaconList(); - _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection("beacon").size())); + _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection(Section::BEACON).size())); _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); if (fs::exists(file)) diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 7aa95fc461..2a824523d9 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -759,7 +759,7 @@ class gridcoinrpc #else vwhitelist.clear(); - for(const auto& item : ReadCacheSection("project")) + for(const auto& item : ReadCacheSection(Section::PROJECT)) vwhitelist.push_back(std::make_pair(item.first, item.second.value)); return true; @@ -831,7 +831,7 @@ class gridcoinrpc return -6; #else - int64_t superblock_time = ReadCache("superblock", "magnitudes").timestamp; + int64_t superblock_time = ReadCache(Section::SUPERBLOCK, "magnitudes").timestamp; int64_t nSBage = GetAdjustedTime() - superblock_time; return nSBage; diff --git a/src/main.cpp b/src/main.cpp index 81d8d2fad3..dbc62583bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5197,7 +5197,7 @@ BeaconMap GetConsensusBeaconList() const int64_t maxTime = pMaxConsensusLadder->nTime; const int64_t minTime = maxTime - BEACON_LOOKBACK; - for(const auto& item : ReadCacheSection("beacon")) + for(const auto& item : ReadCacheSection(Section::BEACON)) { const std::string& key = item.first; BeaconEntry beaconentry; From 941fb568389310f8f9f7a9a20d84c42e2888741f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 2 Dec 2018 14:21:18 -0500 Subject: [PATCH 047/359] fix signature serialization --- src/scraper_net.cpp | 15 +++++++++++++-- src/scraper_net.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 0c3cbc08b9..22995745d3 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -213,7 +213,7 @@ void CScraperManifest::dentry::Unserialize(CReaderStream& ss, int nType, int nVe ss>> last; } -void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const +void CScraperManifest::SerializeWithoutSignature(CDataStream& ss, int nType, int nVersion) const { WriteCompactSize(ss, vParts.size()); for( const CPart* part : vParts ) @@ -225,6 +225,16 @@ void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const ss<< BeaconList << BeaconList_c; ss<< projects; } + + +void CScraperManifest::Serialize(CDataStream& ss, int nType, int nVersion) const +{ + SerializeWithoutSignature(ss, nType, nVersion); + ss << signature; +} + + + void CScraperManifest::UnserializeCheck(CReaderStream& ss) { const auto pbegin = ss.begin(); @@ -314,7 +324,8 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m, CKey& /* serialize and hash the object */ CDataStream ss(SER_NETWORK,1); - ss << *m; + m->SerializeWithoutSignature(ss, SER_NETWORK, 1); + //ss << *m; /* sign the serialized manifest and append the signature */ uint256 hash(Hash(ss.begin(),ss.end())); diff --git a/src/scraper_net.h b/src/scraper_net.h index 0b403a254e..73520e2dca 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -130,6 +130,7 @@ class CScraperManifest /** Serialize this object for seding over the network. */ void Serialize(CDataStream& s, int nType, int nVersion) const; + void SerializeWithoutSignature(CDataStream& s, int nType, int nVersion) const; void UnserializeCheck(CReaderStream& s); UniValue ToJson() const; From 8e64c6e21160c38ab2f1129ca8fd7f1df4432870 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 2 Dec 2018 16:36:24 -0500 Subject: [PATCH 048/359] Hashcheck signature to find sig problem --- src/scraper_net.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 22995745d3..56fcdeeafc 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -262,6 +262,7 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) uint256 hash = Hash(pbegin, ss.begin()); //uint256 hash = Hash(pbegin, ss.end()); ss >> signature; + LogPrintf("CScraperManifest::UnserializeCheck: hash of signature = %s", Hash(signature.begin(), signature.end()).GetHex()); CKey mkey; if(!mkey.SetPubKey(pubkey)) @@ -331,6 +332,7 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m, CKey& uint256 hash(Hash(ss.begin(),ss.end())); keySign.Sign(hash, m->signature); ss << m->signature; + LogPrintf("CScraperManifest::addManifest: hash of signature = %s", Hash(m->signature.begin(), m->signature.end()).GetHex()); #if 1 LogPrint("manifest", "adding new local manifest"); From 5ec6078d463bb3092fee91711dd9a7cb727a5c69 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Dec 2018 01:25:59 -0500 Subject: [PATCH 049/359] Modify structures and improve locking This commit changes the Beacon and ScraperFileManifest structures to better support the recording of the consensus block and manifest run times. It also adds missing locks in a few places. --- src/ScraperProxy/scraper.cpp | 137 +++++++++++++++++++++-------------- src/ScraperProxy/scraper.h | 9 ++- src/beacon.h | 8 ++ src/main.cpp | 12 ++- src/scraper_net.cpp | 1 - 5 files changed, 106 insertions(+), 61 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index e2f3874145..745d7282f3 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -8,9 +8,9 @@ std::string lowercase(std::string s); std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); -ScraperFileManifest mScraperFileManifest; +ScraperFileManifest StructScraperFileManifest; -CCriticalSection cs_mScraperFileManifest; +CCriticalSection cs_StructScraperFileManifest; bool WhitelistPopulated(); bool UserpassPopulated(); @@ -31,7 +31,7 @@ bool fScraperRetainNonCurrentFiles = false; boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); -extern BeaconMap GetConsensusBeaconList(); +extern BeaconConsensus GetConsensusBeaconList(); // This is the scraper thread... void Scraper(bool fScraperStandalone) @@ -47,7 +47,7 @@ void Scraper(bool fScraperStandalone) } else { - // Load the manifest file from the Scraper directory info mScraperFileManifest. + // Load the manifest file from the Scraper directory into mScraperFileManifest. _log(INFO, "Scraper", "Loading Manifest"); if (!LoadScraperFileManifest(pathScraper / "Manifest.csv.gz")) @@ -59,11 +59,11 @@ void Scraper(bool fScraperStandalone) // First remove orphan files with no Manifest entry. // Lock the manifest while it is being manipulated. { - LOCK(cs_mScraperFileManifest); + LOCK(cs_StructScraperFileManifest); // Check to see if the file exists in the manifest and if the hash matches. If it doesn't // remove it. - ScraperFileManifest::iterator entry; + ScraperFileManifestMap::iterator entry; for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { @@ -74,8 +74,8 @@ void Scraper(bool fScraperStandalone) && dir.path().filename() != "Stats.csv.gz" && fs::is_regular_file(dir)) { - entry = mScraperFileManifest.find(dir.path().filename().c_str()); - if (entry == mScraperFileManifest.end()) + entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().c_str()); + if (entry == StructScraperFileManifest.mScraperFileManifest.end()) { fs::remove(dir.path()); _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); @@ -93,9 +93,9 @@ void Scraper(bool fScraperStandalone) // Now iterate through the Manifest map and remove entries with no file, or entries and files older than // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time //if fScraperRetainNonCurrentFiles is false. - for (entry = mScraperFileManifest.begin(); entry != mScraperFileManifest.end(); ) + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) { - ScraperFileManifest::iterator entry_copy = entry++; + ScraperFileManifestMap::iterator entry_copy = entry++; if (!fs::exists(pathScraper / entry_copy->first) || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) @@ -146,6 +146,8 @@ void Scraper(bool fScraperStandalone) AuthenticationETagClear(); + // Note a lock on cs_StructScraperFileManifest is taken in StoreBeaconList, + // and the block hash for the consensus block height is updated in the struct. if (!StoreBeaconList(pathScraper / "BeaconList.csv.gz")) _log(ERROR, "Scraper", "StoreBeaconList error occurred"); else @@ -545,6 +547,12 @@ bool DownloadProjectRacFilesByCPID() ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); } + // After processing, update global structure with timestamp of run. + { + LOCK(cs_StructScraperFileManifest); + + StructScraperFileManifest.timestamp = GetAdjustedTime(); + } return true; } @@ -555,7 +563,7 @@ bool DownloadProjectRacFilesByCPID() bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag) { // Get a consensus map of Beacons. - BeaconMap mBeaconMap = GetConsensusBeaconList(); + BeaconConsensus Consensus = GetConsensusBeaconList(); std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); @@ -643,7 +651,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil userdata.nlappend(line); // This uses the beacon map rather than the teamid to select the statistics. - if (mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) + if (Consensus.mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) vXML.push_back(userdata.value()); break; @@ -762,18 +770,18 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // a given project, it has to be more up to date than any others. NewRecord.current = true; - // Code block to lock mScraperFileManifest during record insertion and delete because we want this atomic. + // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { - LOCK(cs_mScraperFileManifest); + LOCK(cs_StructScraperFileManifest); // Iterate mScraperFileManifest to find any prior records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles // is false. - ScraperFileManifest::iterator entry; - for (entry = mScraperFileManifest.begin(); entry != mScraperFileManifest.end(); ) + ScraperFileManifestMap::iterator entry; + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) { - ScraperFileManifest::iterator entry_copy = entry++; + ScraperFileManifestMap::iterator entry_copy = entry++; if (entry_copy->second.project == project && entry_copy->second.current == true) { @@ -919,10 +927,18 @@ bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap) bool StoreBeaconList(const fs::path& file) { - BeaconMap mBeaconMap = GetConsensusBeaconList(); + BeaconConsensus Consensus = GetConsensusBeaconList(); _log(INFO, "StoreBeaconList", "ReadCacheSection element count: " + std::to_string(ReadCacheSection(Section::BEACON).size())); - _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); + _log(INFO, "StoreBeaconList", "mBeaconMap element count: " + std::to_string(Consensus.mBeaconMap.size())); + + // Update block hash for block at consensus height to StructScraperFileManifest. + // Requires a lock. + { + LOCK(cs_StructScraperFileManifest); + + StructScraperFileManifest.nConsensusBlockHash = Consensus.nBlockHash; + } if (fs::exists(file)) fs::remove(file); @@ -945,7 +961,7 @@ bool StoreBeaconList(const fs::path& file) // Header stream << "CPID," << "Time," << "Beacon\n"; - for (auto const& entry : mBeaconMap) + for (auto const& entry : Consensus.mBeaconMap) { std::string sBeaconEntry = entry.first + "," + std::to_string(entry.second.timestamp) + "," + entry.second.value + "\n"; stream << sBeaconEntry; @@ -966,20 +982,20 @@ bool StoreBeaconList(const fs::path& file) -// Insert entry into Manifest. Note that cs_mScraperFileManifest needs to be taken before calling. +// Insert entry into Manifest. Note that cs_StructScraperFileManifest needs to be taken before calling. bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. - std::pair ret; + std::pair ret; { - ret = mScraperFileManifest.insert(std::make_pair(entry.filename, entry)); + ret = StructScraperFileManifest.mScraperFileManifest.insert(std::make_pair(entry.filename, entry)); } // True if insert was sucessful, false if entry with key (hash) already exists in map. return ret.second; } -// Delete entry from Manifest and corresponding file if it exists. Note that cs_mScraperFileManifest needs to be taken before calling. +// Delete entry from Manifest and corresponding file if it exists. Note that cs_StructScraperFileManifest needs to be taken before calling. unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) { unsigned int ret; @@ -988,7 +1004,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) if(fs::exists(pathScraper / entry.filename)) fs::remove(pathScraper /entry.filename); - ret = mScraperFileManifest.erase(entry.filename); + ret = StructScraperFileManifest.mScraperFileManifest.erase(entry.filename); // Returns number of elements erased, either 0 or 1. return ret; @@ -1039,7 +1055,13 @@ bool LoadScraperFileManifest(const fs::path& file) LoadEntry.filename = vline[4]; - InsertScraperFileManifestEntry(LoadEntry); + // Lock cs_StructScraperFileManifest before updating + // global structure. + { + LOCK(cs_StructScraperFileManifest); + + InsertScraperFileManifestEntry(LoadEntry); + } } return true; @@ -1066,14 +1088,14 @@ bool StoreScraperFileManifest(const fs::path& file) _log(INFO, "StoreScraperFileManifest", "Started processing " + file.string()); - //Lock mScraperFileManifest during serialize to string. + //Lock StructScraperFileManifest during serialize to string. { - LOCK(cs_mScraperFileManifest); + LOCK(cs_StructScraperFileManifest); // Header. stream << "Hash," << "Current," << "Time," << "Project," << "Filename\n"; - for (auto const& entry : mScraperFileManifest) + for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { uint256 nEntryHash = entry.second.hash; @@ -1359,35 +1381,43 @@ ScraperStats GetScraperStatsByConsensusBeaconList() // constructed starting with the whitelist, and then using only the current files, this // will always be less than or equal to the whitelist count from vwhitelist. unsigned int nActiveProjects = 0; - for (auto const& entry : mScraperFileManifest) { - if (entry.second.current) - nActiveProjects++; - } + LOCK(cs_StructScraperFileManifest); + for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) + { + if (entry.second.current) + nActiveProjects++; + } + } double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; //Get the Consensus Beacon map and initialize mScraperStats. - BeaconMap mBeaconMap = GetConsensusBeaconList(); + BeaconConsensus Consensus = GetConsensusBeaconList(); + ScraperStats mScraperStats; - for (auto const& entry : mScraperFileManifest) { + LOCK(cs_StructScraperFileManifest); - if (entry.second.current) + for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { - std::string project = entry.first; - fs::path file = pathScraper / entry.second.filename; - ScraperStats mProjectScraperStats; - _log(INFO, "GetScraperStatsByConsensusBeaconList", "Processing stats for project: " + project); + if (entry.second.current) + { + std::string project = entry.first; + fs::path file = pathScraper / entry.second.filename; + ScraperStats mProjectScraperStats; - LoadProjectFileToStatsByCPID(project, file, dMagnitudePerProject, mBeaconMap, mProjectScraperStats); + _log(INFO, "GetScraperStatsByConsensusBeaconList", "Processing stats for project: " + project); - // Insert into overall map. - for (auto const& entry : mProjectScraperStats) - { - mScraperStats[entry.first] = entry.second; + LoadProjectFileToStatsByCPID(project, file, dMagnitudePerProject, Consensus.mBeaconMap, mProjectScraperStats); + + // Insert into overall map. + for (auto const& entry : mProjectScraperStats) + { + mScraperStats[entry.first] = entry.second; + } } } } @@ -1401,7 +1431,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() // ObjectID is blank string for network-wide. NetworkWideStatsEntry.statskey.objectID = ""; - for (auto const& beaconentry : mBeaconMap) + for (auto const& beaconentry : Consensus.mBeaconMap) { ScraperObjectStats CPIDStatsEntry = {}; @@ -1514,7 +1544,8 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) // This should be replaced with the proper field name... manifest->sCManifestName = sCManifestName; - manifest->nTime = GetAdjustedTime(); + manifest->nTime = StructScraperFileManifest.timestamp; + manifest->ConsensusBlock = StructScraperFileManifest.nConsensusBlockHash; // This will have to be changed to support files bigger than 32 MB, where more than one // part per object will be required. @@ -1562,7 +1593,8 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) iPartNum++; - for (auto const& entry : mScraperFileManifest) + // Hmm... should we take a lock on cs_StructScraperFileManifest here? + for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { // Only include current files to send across the network. if (!entry.second.current) @@ -1649,13 +1681,8 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) bool ScraperDeleteCScaperManifest(uint256 nHash) { // This deletes a manifest. - - auto pair = CScraperManifest::mapManifest.find(nHash); - - // const uint256& hash = pair.first; - CScraperManifest& manifest = *pair->second; - - manifest.~CSplitBlob(); + // Note this just deletes the local copy. TODO: Implement manifest delete message. + CScraperManifest::mapManifest.erase(nHash); return true; } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 2a824523d9..d2ecf3b6a0 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -102,7 +102,14 @@ struct ScraperFileManifestEntry bool current; }; -typedef std::map ScraperFileManifest; +typedef std::map ScraperFileManifestMap; + +struct ScraperFileManifest +{ + ScraperFileManifestMap mScraperFileManifest; + uint256 nConsensusBlockHash; + int64_t timestamp; +}; struct ScraperObjectStatsKey { diff --git a/src/beacon.h b/src/beacon.h index 37d4844d00..c9b0bb36cf 100644 --- a/src/beacon.h +++ b/src/beacon.h @@ -5,6 +5,7 @@ #pragma once #include "fwd.h" +#include "util.h" #include #include @@ -69,3 +70,10 @@ struct BeaconEntry }; typedef std::map BeaconMap; + +struct BeaconConsensus +{ + uint256 nBlockHash; + BeaconMap mBeaconMap; +}; + diff --git a/src/main.cpp b/src/main.cpp index dbc62583bb..557079ece5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5186,14 +5186,18 @@ std::string getfilecontents(std::string filename) -BeaconMap GetConsensusBeaconList() +BeaconConsensus GetConsensusBeaconList() { - BeaconMap mBeaconMap; + //BeaconMap mBeaconMap; + BeaconConsensus Consensus; BlockFinder MaxConsensusLadder; CBlockIndex* pMaxConsensusLadder = MaxConsensusLadder.FindByHeight((pindexBest->nHeight - CONSENSUS_LOOKBACK) - (pindexBest->nHeight - CONSENSUS_LOOKBACK) % BLOCK_GRANULARITY); + + Consensus.nBlockHash = pMaxConsensusLadder->GetBlockHash(); + const int64_t maxTime = pMaxConsensusLadder->nTime; const int64_t minTime = maxTime - BEACON_LOOKBACK; @@ -5214,10 +5218,10 @@ BeaconMap GetConsensusBeaconList() if (Contains("INVESTOR", beaconentry.value)) continue; - mBeaconMap[key] = beaconentry; + Consensus.mBeaconMap[key] = beaconentry; } - return mBeaconMap; + return Consensus; } diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 56fcdeeafc..2114cef029 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -260,7 +260,6 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) throw error("CScraperManifest::UnserializeCheck: project part out of range"); uint256 hash = Hash(pbegin, ss.begin()); - //uint256 hash = Hash(pbegin, ss.end()); ss >> signature; LogPrintf("CScraperManifest::UnserializeCheck: hash of signature = %s", Hash(signature.begin(), signature.end()).GetHex()); From 16d613a3cb11289427fe3db417490d06e2c65b1b Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Dec 2018 10:56:55 -0500 Subject: [PATCH 050/359] Add hash check --- src/ScraperProxy/scraper.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 745d7282f3..506acb0e16 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -36,6 +36,15 @@ extern BeaconConsensus GetConsensusBeaconList(); // This is the scraper thread... void Scraper(bool fScraperStandalone) { + // Hash check + std::string sHashCheck = "Hello world"; + uint256 nHashCheck = Hash(sHashCheck.begin(), sHashCheck.end()); + + if (nHashCheck.GetHex() == "fe65ee46e01d18cebec555978abe82e021e5399171ce470e464996114d72dcf6") + _log(INFO, "Scraper", "Hash for \"Hello world\" is " + Hash(sHashCheck.begin(), sHashCheck.end()).GetHex() + " and is correct."); + else + _log(ERROR, "Scraper", "Hash for \"Hello world\" is " + Hash(sHashCheck.begin(), sHashCheck.end()).GetHex() + " and is NOT correct."); + // Check to see if the Scraper directory exists and is a directory. If not create it. if(fs::exists(pathScraper)) { From 77241fd1d49a7ecb6632524701e5f27d4b63fb2e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Dec 2018 12:27:51 -0500 Subject: [PATCH 051/359] Change longs to ints for endian safety. --- src/ScraperProxy/scraper.cpp | 2 +- src/scraper_net.cpp | 8 ++++---- src/scraper_net.h | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 506acb0e16..cde72409fd 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1558,7 +1558,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) // This will have to be changed to support files bigger than 32 MB, where more than one // part per object will be required. - long iPartNum = 0; + int iPartNum = 0; // Read in BeaconList fs::path inputfile = "BeaconList.csv.gz"; diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 2114cef029..edae6754de 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -41,7 +41,7 @@ bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) { CSplitBlob& split= *ref.first; ++split.cntPartsRcvd; - assert(split.cntPartsRcvd <= (long)split.vParts.size()); + assert(split.cntPartsRcvd <= split.vParts.size()); if( split.isComplete() ) { split.Complete(); @@ -72,7 +72,7 @@ void CSplitBlob::addPart(const uint256& ihash) part.refs.emplace(this, n); } -long CSplitBlob::addPartData(CDataStream&& vData) +int CSplitBlob::addPartData(CDataStream&& vData) { uint256 hash(Hash(vData.begin(), vData.end())); @@ -253,10 +253,10 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) ss>> BeaconList >> BeaconList_c; ss>> projects; - if(BeaconList+BeaconList_c>(long)vph.size()) + if(BeaconList+BeaconList_c>vph.size()) throw error("CScraperManifest::UnserializeCheck: beacon part out of range"); for(const dentry& prj : projects) - if(prj.part1+prj.partc>(long)vph.size()) + if(prj.part1+prj.partc>vph.size()) throw error("CScraperManifest::UnserializeCheck: project part out of range"); uint256 hash = Hash(pbegin, ss.begin()); diff --git a/src/scraper_net.h b/src/scraper_net.h index 73520e2dca..ff9ec0219c 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -30,7 +30,7 @@ class CSplitBlob static bool RecvPart(CNode* pfrom, CDataStream& vRecv); bool isComplete() const - { return cntPartsRcvd == (long)vParts.size(); } + { return cntPartsRcvd == vParts.size(); } /** Notification that this Split object is fully received. */ virtual void Complete() = 0; @@ -49,7 +49,7 @@ class CSplitBlob void addPart(const uint256& ihash); /** Create a part from specified data and add reference to it into vParts. */ - long addPartData(CDataStream&& vData); + int addPartData(CDataStream&& vData); /** Unref all parts referenced by this. Removes parts with no references */ ~CSplitBlob(); @@ -57,7 +57,7 @@ class CSplitBlob /* We could store the parts in mapRelay and have getdata service for free. */ /** map from part hash to scraper Index, so we can attach incoming Part in Index */ static std::map mapParts; - long cntPartsRcvd =0; + int cntPartsRcvd =0; }; @@ -105,9 +105,9 @@ class CScraperManifest std::string project; std::string ETag; unsigned int LastModified =0; - long part1 =-1; + int part1 =-1; unsigned partc =0; - long GridcoinTeamID =-1; + int GridcoinTeamID =-1; bool current =0; bool last =0; @@ -118,7 +118,7 @@ class CScraperManifest std::vector projects; - long BeaconList =-1; + int BeaconList =-1; unsigned BeaconList_c =0; uint256 ConsensusBlock; unsigned int nTime =0; From d071233c951e268f65deb129aa4dc43450680fc7 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Dec 2018 18:01:46 -0500 Subject: [PATCH 052/359] Fix ScraperSaveCScraperManifestToFiles This fixes ScraperSaveCScraperManifestToFiles to align with the current manifest structure. --- src/ScraperProxy/scraper.cpp | 44 ++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index cde72409fd..c87097ca35 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1511,31 +1511,41 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) else fs::create_directory(savepath); - for(const auto& pair : CScraperManifest::mapManifest) - { - // const uint256& hash = pair.first; - const CScraperManifest& manifest = *pair.second; - std::string outputfile = manifest.sCManifestName; + // Select manifest based on provided hash. + auto pair = CScraperManifest::mapManifest.find(nManifestHash); + const CScraperManifest& manifest = *pair->second; - if(outputfile.find(".gz") != std::string::npos) - { - fs::path outputfilewpath = savepath / outputfile; + // Write out to files the parts. Note this assumes one-to-one part to file. Needs to + // be fixed for more than one part per file. + int iPartNum = 0; + for(const auto& iter : manifest.vParts) + { + std::string outputfile; + fs::path outputfilewpath; - std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); + if (iPartNum == 0) + outputfile = "BeaconList.csv.gz"; + else + outputfile = manifest.projects[iPartNum-1].project + "-" + manifest.projects[iPartNum-1].ETag + "-ByCPID.gz"; - if (!outfile) - { - _log(ERROR, "ScraperSaveCScraperManifestToFiles", "Failed to open file (" + outputfile + ")"); + outputfilewpath = savepath / outputfile; - return false; - } + std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); - outfile.write((const char*)manifest.vParts[0]->data.data(), manifest.vParts[0]->data.size()); + if (!outfile) + { + _log(ERROR, "ScraperSaveCScraperManifestToFiles", "Failed to open file (" + outputfile + ")"); - outfile.flush(); - outfile.close(); + return false; } + + outfile.write((const char*)iter->data.data(), iter->data.size()); + + outfile.flush(); + outfile.close(); + + iPartNum++; } return true; From f0864e42adb2975ab6ba24b865781acf92ffdeeb Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 4 Dec 2018 16:45:43 -0500 Subject: [PATCH 053/359] Implement whitelist to manifest cross check This implements a check in the scraper loop to look for and delete manifest entries/files no longer on whitelist. Also implement a SerializeForManifestCompare to be able to generate a hash recorded to nContentHash at the manifest level that depends only on content to be able to quickly compare manifests for differences. --- src/ScraperProxy/scraper.cpp | 39 ++++++++++++++++++++++++++++++++++-- src/scraper_net.cpp | 21 ++++++++++++++++++- src/scraper_net.h | 5 ++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index c87097ca35..48bd8f5c9f 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -153,6 +153,35 @@ void Scraper(bool fScraperStandalone) else _log(INFO, "Scraper", "Refreshing of whitelist completed"); + // Delete manifest entries not on whitelist. Take a lock on cs_StructScraperFileManifest for this. + { + LOCK(cs_StructScraperFileManifest); + + ScraperFileManifestMap::iterator entry; + + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) + { + ScraperFileManifestMap::iterator entry_copy = entry++; + + // Set flag to false. If entry project matches a whitelist project then mark true and break. + bool bOnWhitelist = false; + for (const auto& wlproject : vwhitelist) + { + if(entry_copy->second.project == wlproject.first) + { + bOnWhitelist = true; + break; + } + } + + if (!bOnWhitelist) + { + _log(INFO, "Scraper", "Removing manifest entry for non-whitelisted project: " + entry_copy->first); + DeleteScraperFileManifestEntry(entry_copy->second); + } + } + } + AuthenticationETagClear(); // Note a lock on cs_StructScraperFileManifest is taken in StoreBeaconList, @@ -556,11 +585,17 @@ bool DownloadProjectRacFilesByCPID() ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); } - // After processing, update global structure with timestamp of run. + // After processing, update global structure with the timestamp of the latest file in the manifest. { LOCK(cs_StructScraperFileManifest); - StructScraperFileManifest.timestamp = GetAdjustedTime(); + int64_t nMaxTime = 0; + for (const auto& entry : StructScraperFileManifest.mScraperFileManifest) + { + nMaxTime = std::max(nMaxTime, entry.second.timestamp); + } + + StructScraperFileManifest.timestamp = nMaxTime; } return true; } diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index edae6754de..09f7fdda06 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -224,6 +224,16 @@ void CScraperManifest::SerializeWithoutSignature(CDataStream& ss, int nType, int ss<< ConsensusBlock; ss<< BeaconList << BeaconList_c; ss<< projects; + ss<< nContentHash; +} + +// This is to compare manifest content quickly. We just need the parts and the consensus block. +void CScraperManifest::SerializeForManifestCompare(CDataStream& ss, int nType, int nVersion) const +{ + WriteCompactSize(ss, vParts.size()); + for( const CPart* part : vParts ) + ss << part->hash; + ss<< ConsensusBlock; } @@ -259,9 +269,12 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) if(prj.part1+prj.partc>vph.size()) throw error("CScraperManifest::UnserializeCheck: project part out of range"); + ss >> nContentHash; + uint256 hash = Hash(pbegin, ss.begin()); + ss >> signature; - LogPrintf("CScraperManifest::UnserializeCheck: hash of signature = %s", Hash(signature.begin(), signature.end()).GetHex()); + LogPrint("Manifest", "CScraperManifest::UnserializeCheck: hash of signature = %s", Hash(signature.begin(), signature.end()).GetHex()); CKey mkey; if(!mkey.SetPubKey(pubkey)) @@ -322,6 +335,11 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m, CKey& { m->pubkey= keySign.GetPubKey(); + // serialize the content for comparison purposes and put in manifest. + CDataStream sscomp(SER_NETWORK,1); + m->SerializeForManifestCompare(sscomp, SER_NETWORK, 1); + m->nContentHash = Hash(sscomp.begin(), sscomp.end()); + /* serialize and hash the object */ CDataStream ss(SER_NETWORK,1); m->SerializeWithoutSignature(ss, SER_NETWORK, 1); @@ -396,6 +414,7 @@ UniValue CScraperManifest::ToJson() const r.pushKV("nTime",(int64_t)nTime); r.pushKV("nTime",DateTimeStrFormat(nTime)); r.pushKV("ConsensusBlock",ConsensusBlock.GetHex()); + r.pushKV("nContentHash",nContentHash.GetHex()); r.pushKV("BeaconList",(int64_t)BeaconList); r.pushKV("BeaconList_c",(int64_t)BeaconList_c); UniValue projects(UniValue::VARR); diff --git a/src/scraper_net.h b/src/scraper_net.h index ff9ec0219c..4f8a47d80d 100644 --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -121,7 +121,9 @@ class CScraperManifest int BeaconList =-1; unsigned BeaconList_c =0; uint256 ConsensusBlock; - unsigned int nTime =0; + int64_t nTime = 0; + + uint256 nContentHash; public: /* public methods */ @@ -131,6 +133,7 @@ class CScraperManifest /** Serialize this object for seding over the network. */ void Serialize(CDataStream& s, int nType, int nVersion) const; void SerializeWithoutSignature(CDataStream& s, int nType, int nVersion) const; + void SerializeForManifestCompare(CDataStream& ss, int nType, int nVersion) const; void UnserializeCheck(CReaderStream& s); UniValue ToJson() const; From 11766ded3f7f867e7f53379e632a8e58b103a142 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 7 Dec 2018 19:48:41 -0500 Subject: [PATCH 054/359] Implement automatic manifest publishing This commit implements automatic manifest publishing based on a change in the manifest, and local time based automatic manifest deletion. --- src/ScraperProxy/scraper-standalone.cpp | 17 ++++ src/ScraperProxy/scraper.cpp | 123 ++++++++++++++++++++++-- src/ScraperProxy/scraper.h | 10 +- src/scraper_net.cpp | 9 ++ src/scraper_net.h | 3 + 5 files changed, 151 insertions(+), 11 deletions(-) mode change 100644 => 100755 src/scraper_net.cpp mode change 100644 => 100755 src/scraper_net.h diff --git a/src/ScraperProxy/scraper-standalone.cpp b/src/ScraperProxy/scraper-standalone.cpp index 3e60a3b1d4..f0aba6e62e 100755 --- a/src/ScraperProxy/scraper-standalone.cpp +++ b/src/ScraperProxy/scraper-standalone.cpp @@ -42,6 +42,23 @@ std::vector split(const std::string& s, const std::string& delim) return elems; } +std::string ExtractXML(const std::string XMLdata, const std::string key, const std::string key_end) +{ + + std::string extraction = ""; + std::string::size_type loc = XMLdata.find( key, 0 ); + + if(loc != std::string::npos) + { + std::string::size_type loc_end = XMLdata.find(key_end, loc+3); + + if (loc_end != std::string::npos) + extraction = XMLdata.substr(loc+(key.length()),loc_end-loc-(key.length())); + } + + return extraction; +} + void MilliSleep(int64_t n) { std::this_thread::sleep_for(std::chrono::milliseconds(n)); diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 48bd8f5c9f..23feef4396 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -5,7 +5,7 @@ extern bool fShutdown; bool find(const std::string& s, const std::string& find); std::string urlsanity(const std::string& s, const std::string& type); std::string lowercase(std::string s); -std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); +std::string ExtractXML(const std::string XMLdata, const std::string key, const std::string key_end); std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); ScraperFileManifest StructScraperFileManifest; @@ -121,6 +121,8 @@ void Scraper(bool fScraperStandalone) fs::create_directory(pathScraper); + uint256 nmScraperFileManifestHash = 0; + // The scraper thread loop... while (fScraperStandalone || !fShutdown) { @@ -207,6 +209,54 @@ void Scraper(bool fScraperStandalone) _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + + // This is the section to send out manifests. Only do if authorized. + if (IsScraperAuthorizedToBroadcastManifests()) + { + // This will push out a new CScraperManifest if the hash has changed of mScraperFileManifestHash. + // The idea here is to run the scraper loop a number of times over a period of time approaching + // the due time for the superblock. A number of stats files only update once per day, but a few update + // as often as once per hour. If one of these file changes during the run up to the superblock, a + // new manifest should be published, but the older ones retained up to the SCRAPER_CMANIFEST_RETENTION_TIME limit + // to provide additional matching options. + + // Get default wallet public key + std::string sDefaultKey; + { + LOCK(pwalletMain->cs_wallet); + + sDefaultKey = pwalletMain->vchDefaultKey.GetID().ToString(); + + } + + // Publish or local delete CScraperManifests. + { + LOCK(cs_StructScraperFileManifest); + + // If the hash doesn't match (a new one is available), or there are none, then publish a new one. + if (nmScraperFileManifestHash != StructScraperFileManifest.nFileManifestMapHash + || !CScraperManifest::mapManifest.size()) + { + ScraperSendFileManifestContents(sDefaultKey); + } + + nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; + + // If any CScraperManifest has exceeded SCRAPER_CMANIFEST_RETENTION_TIME, then + // delete. + for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ) + { + // Copy iterator for deletion operation and increment iterator. + auto iter_copy = iter++; + + CScraperManifest& manifest = *iter_copy->second; + + if (GetAdjustedTime() - manifest.nTime > SCRAPER_CMANIFEST_RETENTION_TIME) + ScraperDeleteCScraperManifest(iter_copy->first); + } + } + } + MilliSleep(nScraperSleep); } } @@ -259,7 +309,8 @@ std::string lowercase(std::string s) return s; } - +// Removed ExtractXML from here... because defined in main.h/cpp. +/* std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end) { @@ -276,7 +327,7 @@ std::string ExtractXML(const std::string& XMLdata, const std::string& key, const return extraction; } - +*/ bool ScraperDirectorySanity() { @@ -830,7 +881,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil if (entry_copy->second.project == project && entry_copy->second.current == true) { _log(INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest entry as current = false."); - entry_copy->second.current = false; + MarkScraperFileManifestEntryNonCurrent(entry_copy->second); } // If records are older than SCRAPER_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, @@ -901,6 +952,27 @@ uint256 GetFileHash(const fs::path& inputfile) } +// Note that cs_StructScraperFileManifest needs to be taken before calling. +uint256 GetmScraperFileManifestHash() +{ + uint256 nHash; + CDataStream ss(SER_NETWORK, 1); + + for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) + { + ss << entry.second.filename + << entry.second.project + << entry.second.hash + << entry.second.timestamp + << entry.second.current; + } + + nHash = Hash(ss.begin(), ss.end()); + + return nHash; +} + + void testdata(const std::string& etag) { std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).c_str(), std::ios_base::in | std::ios_base::binary); @@ -1030,9 +1102,13 @@ bool StoreBeaconList(const fs::path& file) bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry) { // This less readable form is so we know whether the element already existed or not. - std::pair ret; + std::pair ret; { ret = StructScraperFileManifest.mScraperFileManifest.insert(std::make_pair(entry.filename, entry)); + // If successful insert, rehash map and record in struct for easy comparison later. If already + // exists, hash is unchanged. + if (ret.second) + StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); } // True if insert was sucessful, false if entry with key (hash) already exists in map. @@ -1050,12 +1126,29 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) ret = StructScraperFileManifest.mScraperFileManifest.erase(entry.filename); + // If an element was deleted then rehash the map and store hash in struct. + if (ret) + StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); + // Returns number of elements erased, either 0 or 1. return ret; } +// Mark manifest entry non-current. The reason this is encapsulated in a function is +// to ensure the rehash is done. Note that cs_StructScraperFileManifest needs to be +// taken before calling. +bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry entry) +{ + entry.current = false; + + StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); + + return true; +} + + bool LoadScraperFileManifest(const fs::path& file) { std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); @@ -1587,8 +1680,14 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) } +bool IsScraperAuthorizedToBroadcastManifests() +{ + // Stub for check against public key in AppCache to authorize sending manifests. + return true; +} +// A lock needs to be taken on cs_StructScraperFileManifest for this function. bool ScraperSendFileManifestContents(std::string sCManifestName) { // This "broadcasts" the current ScraperFileManifest contents to the network. @@ -1647,7 +1746,6 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) iPartNum++; - // Hmm... should we take a lock on cs_StructScraperFileManifest here? for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { // Only include current files to send across the network. @@ -1732,13 +1830,18 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) -bool ScraperDeleteCScaperManifest(uint256 nHash) +bool ScraperDeleteCScraperManifest(uint256 nManifestHash) { // This deletes a manifest. // Note this just deletes the local copy. TODO: Implement manifest delete message. - CScraperManifest::mapManifest.erase(nHash); + + // Select manifest based on provided hash. + auto pair = CScraperManifest::mapManifest.find(nManifestHash); + CScraperManifest& manifest = *pair->second; - return true; + bool ret = manifest.DeleteManifest(nManifestHash); + + return ret; } @@ -1779,7 +1882,7 @@ UniValue deletecscrapermanifest(const UniValue& params, bool fHelp) "deletecscrapermanifest \n" "delete manifest object.\n" ); - bool ret = ScraperDeleteCScaperManifest(uint256(params[0].get_str())); + bool ret = ScraperDeleteCScraperManifest(uint256(params[0].get_str())); return UniValue(ret); } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index d2ecf3b6a0..2b7ec922db 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -28,6 +28,7 @@ #include "sync.h" #include "appcache.h" #include "beacon.h" +#include "wallet.h" #include #include "net.h" @@ -84,6 +85,7 @@ const std::string GetTextForstatsobjecttype(int EnumValue) extern bool fDebug; extern std::string msMasterMessagePrivateKey; +extern CWallet* pwalletMain; std::vector> vwhitelist; std::vector> vuserpass; std::vector> vprojectteamids; @@ -107,6 +109,7 @@ typedef std::map ScraperFileManifestMap; struct ScraperFileManifest { ScraperFileManifestMap mScraperFileManifest; + uint256 nFileManifestMapHash; uint256 nConsensusBlockHash; int64_t timestamp; }; @@ -147,6 +150,8 @@ typedef std::map split(const std::string& s, const std::string& delim); extern AppCacheSection ReadCacheSection(const std::string& section); uint256 GetFileHash(const fs::path& inputfile); +uint256 GetmScraperFileManifestHash(); bool StoreScraperFileManifest(const fs::path& file); bool LoadScraperFileManifest(const fs::path& file); bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry); unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry); +bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry entry); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); +bool IsScraperAuthorizedToBroadcastManifests(); bool ScraperSendFileManifestContents(std::string CManifestName); -bool ScraperDeleteCScaperManifest(); +bool ScraperDeleteCScraperManifest(uint256 nManifestHash); double MagRound(double dMag) { diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp old mode 100644 new mode 100755 index 09f7fdda06..efb68d8154 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -285,6 +285,15 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss) addPart(ph); } +bool CScraperManifest::DeleteManifest(const uint256& nHash) +{ + if(mapManifest.erase(nHash)) + return true; + else + return false; +} + + bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) { /* Index object for scraper data. diff --git a/src/scraper_net.h b/src/scraper_net.h old mode 100644 new mode 100755 index 4f8a47d80d..e36c9b4ecf --- a/src/scraper_net.h +++ b/src/scraper_net.h @@ -93,6 +93,9 @@ class CScraperManifest /** Add new manifest object into list of known manifests */ static bool addManifest(std::unique_ptr&& m, CKey& keySign); + + /** Delete Manifest **/ + bool DeleteManifest(const uint256& nHash); public: /*==== fields ====*/ From 5a02645ac602dc3fa993ada28dfb4a5cbfde5762 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 7 Dec 2018 23:06:40 -0500 Subject: [PATCH 055/359] Fix reference for marking manifests noncurrent --- src/ScraperProxy/scraper.cpp | 10 +++++++--- src/ScraperProxy/scraper.h | 12 ++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 23feef4396..5599d18b6f 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -237,6 +237,7 @@ void Scraper(bool fScraperStandalone) if (nmScraperFileManifestHash != StructScraperFileManifest.nFileManifestMapHash || !CScraperManifest::mapManifest.size()) { + _log(INFO, "Scraper", "Publishing new CScraperManifest."); ScraperSendFileManifestContents(sDefaultKey); } @@ -252,7 +253,10 @@ void Scraper(bool fScraperStandalone) CScraperManifest& manifest = *iter_copy->second; if (GetAdjustedTime() - manifest.nTime > SCRAPER_CMANIFEST_RETENTION_TIME) + { + _log(INFO, "Scraper", "Deleting old CScraperManifest with hash " + iter_copy->first.GetHex()); ScraperDeleteCScraperManifest(iter_copy->first); + } } } } @@ -1099,7 +1103,7 @@ bool StoreBeaconList(const fs::path& file) // Insert entry into Manifest. Note that cs_StructScraperFileManifest needs to be taken before calling. -bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry) +bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry) { // This less readable form is so we know whether the element already existed or not. std::pair ret; @@ -1116,7 +1120,7 @@ bool InsertScraperFileManifestEntry(ScraperFileManifestEntry entry) } // Delete entry from Manifest and corresponding file if it exists. Note that cs_StructScraperFileManifest needs to be taken before calling. -unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) +unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry) { unsigned int ret; @@ -1139,7 +1143,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry entry) // Mark manifest entry non-current. The reason this is encapsulated in a function is // to ensure the rehash is done. Note that cs_StructScraperFileManifest needs to be // taken before calling. -bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry entry) +bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) { entry.current = false; diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 2b7ec922db..85aa5e60d2 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -148,10 +148,10 @@ typedef std::map Date: Sun, 9 Dec 2018 02:04:24 -0500 Subject: [PATCH 056/359] Implement better culling of non-current manifests This commit also has implemented the beginnings of the neural network thread. This thread is currently a stub that only does manifest culling on non-scraper nodes. --- src/ScraperProxy/scraper.cpp | 155 ++++++++++++++++++++++++++--------- src/ScraperProxy/scraper.h | 6 ++ src/net.cpp | 35 ++++++++ 3 files changed, 158 insertions(+), 38 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 5599d18b6f..6c5c344a47 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -36,6 +36,8 @@ extern BeaconConsensus GetConsensusBeaconList(); // This is the scraper thread... void Scraper(bool fScraperStandalone) { + _log(INFO, "Scraper", "Starting Scraper thread."); + // Hash check std::string sHashCheck = "Hello world"; uint256 nHashCheck = Hash(sHashCheck.begin(), sHashCheck.end()); @@ -229,7 +231,7 @@ void Scraper(bool fScraperStandalone) } - // Publish or local delete CScraperManifests. + // Publish and/or local delete CScraperManifests. { LOCK(cs_StructScraperFileManifest); @@ -243,21 +245,8 @@ void Scraper(bool fScraperStandalone) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; - // If any CScraperManifest has exceeded SCRAPER_CMANIFEST_RETENTION_TIME, then - // delete. - for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ) - { - // Copy iterator for deletion operation and increment iterator. - auto iter_copy = iter++; - - CScraperManifest& manifest = *iter_copy->second; - - if (GetAdjustedTime() - manifest.nTime > SCRAPER_CMANIFEST_RETENTION_TIME) - { - _log(INFO, "Scraper", "Deleting old CScraperManifest with hash " + iter_copy->first.GetHex()); - ScraperDeleteCScraperManifest(iter_copy->first); - } - } + // Cull CScraperManifests. + ScraperDeleteCScraperManifests(); } } @@ -265,6 +254,28 @@ void Scraper(bool fScraperStandalone) } } + + + +// This is the non-scraper "neural-network" node thread... +void NeuralNetwork() +{ + _log(INFO, "NeuralNetwork", "Starting Neural Network thread (new C++ implementation)."); + + // These items are only run in this thread if not handled by the Scraper() thread. + if (!fScraperActive) + { + // Currently just cull outdated CScraperManifests received + + ScraperDeleteCScraperManifests(); + } + + // Use the same sleep interval as the scraper. This defaults to 60 seconds. + MilliSleep(nScraperSleep); +} + + + /********************** * Sanity * **********************/ @@ -313,25 +324,6 @@ std::string lowercase(std::string s) return s; } -// Removed ExtractXML from here... because defined in main.h/cpp. -/* -std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end) -{ - - std::string extraction = ""; - std::string::size_type loc = XMLdata.find( key, 0 ); - - if(loc != std::string::npos) - { - std::string::size_type loc_end = XMLdata.find(key_end, loc+3); - - if (loc_end != std::string::npos) - extraction = XMLdata.substr(loc+(key.length()),loc_end-loc-(key.length())); - } - - return extraction; -} -*/ bool ScraperDirectorySanity() { @@ -384,7 +376,7 @@ void _log(logattribute eType, const std::string& sCall, const std::string& sMess stringbuilder string; - string.append(std::to_string(time(NULL))); + string.append(std::to_string(GetAdjustedTime())); string.append(" ["); string.append(sType); string.append("] <"); @@ -1752,12 +1744,14 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { - // Only include current files to send across the network. - if (!entry.second.current) + // If SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES is false, only include current files to send across the network. + if (!SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES && !entry.second.current) continue; fs::path inputfile = entry.first; + //_log(INFO, "ScraperSendFileManifestContents", "Input file for CScraperManifest is " + inputfile.string()); + fs::path inputfilewpath = pathScraper / inputfile; // open input file, and associate with CAutoFile @@ -1834,6 +1828,91 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) +bool ScraperDeleteCScraperManifests() +{ + // Apply the SCRAPER_CMANIFEST_RETAIN_NONCURRENT bool and if false delete any existing + // CScraperManifests. + + _log(INFO, "ScraperDeleteCScraperManifests", "Deleting old CScraperManifests."); + + if (!SCRAPER_CMANIFEST_RETAIN_NONCURRENT) + { + // Right now this is using sCManifestName, but needs to be changed to pubkey once the pubkey part is finished. + std::map> mmCSManifestsBinnedByScraper; + + // Make use of the ordered element feature of above map to bin by scraper and then order by manifest time. + for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ++iter) + { + CScraperManifest& manifest = *iter->second; + + std::string sManifestName = manifest.sCManifestName; + int64_t nTime = manifest.nTime; + uint256 nHash = *manifest.phash; + + std::multimap mManifestInner; + + auto BinIter = mmCSManifestsBinnedByScraper.find(sManifestName); + + // No scraper bin yet - so new insert. + if (BinIter == mmCSManifestsBinnedByScraper.end()) + { + mManifestInner.insert(std::make_pair(nTime, nHash)); + mmCSManifestsBinnedByScraper.insert(std::make_pair(sManifestName, mManifestInner)); + } + else + { + mManifestInner = BinIter->second; + mManifestInner.insert(std::make_pair(nTime, nHash)); + std::swap(mManifestInner, BinIter->second); + } + } + + _log(INFO, "ScraperDeleteCScraperManifests", "mmCSManifestsBinnedByScraper size = " + std::to_string(mmCSManifestsBinnedByScraper.size())); + + // For each scraper, delete every manifest EXCEPT the latest. + std::map>::iterator iter; + for (iter = mmCSManifestsBinnedByScraper.begin(); iter != mmCSManifestsBinnedByScraper.end(); ++iter) + { + std::multimap mManifestInner = iter->second; + + _log(INFO, "ScraperDeleteCScraperManifests", "mManifestInner size = " + std::to_string(mManifestInner.size()) + + " for " + iter->first + " scraper"); + + // This preserves the LATEST CScraperManifest entry for the given scraper (because of the reverse iterator), + // and deletes all others for that scraper source. + for (auto iter_inner = ++mManifestInner.rbegin() ;iter_inner != mManifestInner.rend(); ++iter_inner) + { + _log(INFO, "ScraperDeleteCScraperManifests", "Deleting non-current manifest " + iter_inner->second.GetHex() + + " from scraper source " + iter->first); + ScraperDeleteCScraperManifest(iter_inner->second); + } + } + } + + + // If any CScraperManifest has exceeded SCRAPER_CMANIFEST_RETENTION_TIME, then + // delete. + for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ) + { + // Copy iterator for deletion operation and increment iterator. + auto iter_copy = iter++; + + CScraperManifest& manifest = *iter_copy->second; + + if (GetAdjustedTime() - manifest.nTime > SCRAPER_CMANIFEST_RETENTION_TIME) + { + _log(INFO, "Scraper", "Deleting old CScraperManifest with hash " + iter_copy->first.GetHex()); + ScraperDeleteCScraperManifest(iter_copy->first); + } + } + + // TODO: Error handling. + return true; +} + + + + bool ScraperDeleteCScraperManifest(uint256 nManifestHash) { // This deletes a manifest. diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 85aa5e60d2..acec28862a 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -94,6 +95,7 @@ std::string rpcauth = "boinc:test"; std::string rpcip = "http://127.0.0.1:9334/"; int64_t ndownloadsize = 0; int64_t nuploadsize = 0; +bool fScraperActive = false; struct ScraperFileManifestEntry { @@ -150,8 +152,11 @@ typedef std::mapcreateThread(ThreadScraper,NULL,"ThreadScraper")) LogPrintf("Error: createThread(ThreadScraper) failed"); + + // Run the neural network thread (this is currently NOT the same as the GridcoinServices() stuff from main). + if (!netThreads->createThread(ThreadNeuralNetwork,NULL,"NeuralNetwork")) + LogPrintf("Error: createThread(NeuralNetwork) failed"); + } bool StopNode() From 73ffebf0959e0587ef7723e65c03b56b4ae3d975 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 9 Dec 2018 02:53:21 -0500 Subject: [PATCH 057/359] Fix new scraper thread --- src/ScraperProxy/scraper.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 6c5c344a47..8ac76c4f67 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -209,8 +209,6 @@ void Scraper(bool fScraperStandalone) else _log(INFO, "Scraper", "Stored stats."); - _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); - // This is the section to send out manifests. Only do if authorized. if (IsScraperAuthorizedToBroadcastManifests()) @@ -250,6 +248,7 @@ void Scraper(bool fScraperStandalone) } } + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); MilliSleep(nScraperSleep); } } @@ -262,16 +261,21 @@ void NeuralNetwork() { _log(INFO, "NeuralNetwork", "Starting Neural Network thread (new C++ implementation)."); - // These items are only run in this thread if not handled by the Scraper() thread. - if (!fScraperActive) + while(!fShutdown) { - // Currently just cull outdated CScraperManifests received + // These items are only run in this thread if not handled by the Scraper() thread. + if (!fScraperActive) + { + // Currently just cull outdated CScraperManifests received - ScraperDeleteCScraperManifests(); - } + ScraperDeleteCScraperManifests(); + } + + // Use the same sleep interval as the scraper. This defaults to 60 seconds. + _log(INFO, "NeuralNetwork", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); - // Use the same sleep interval as the scraper. This defaults to 60 seconds. - MilliSleep(nScraperSleep); + MilliSleep(nScraperSleep); + } } From 81648135b2d6e1a3bebc7f1c676e1446a0d6969d Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sun, 9 Dec 2018 15:05:16 +0100 Subject: [PATCH 058/359] Switch to CSV for stat files. --- src/ScraperProxy/scraper.cpp | 139 ++++++++--------------------------- 1 file changed, 29 insertions(+), 110 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 8ac76c4f67..86e379b4f3 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1,5 +1,8 @@ #include "scraper.h" +#include +#include + extern bool fShutdown; bool find(const std::string& s, const std::string& find); @@ -697,14 +700,9 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil _log(INFO, "ProcessProjectRacFileByCPID", "Started processing " + file.string()); - stringbuilder outdata; - outdata.nlappend(""); - stream << outdata.value(); - + std::vector vXML; bool bcomplete = false; bool bfileerror = false; - std::vector vXML; - while (!bcomplete && !bfileerror) { // Find users block @@ -793,30 +791,15 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // In reality we DO NOT need total_credit till TCD // In reality we DO NOT need expavg_time but this will make nn compatible // I've also opted to save 1 byte a line by not doing newlines since this a scraper - - stringbuilder xmlout; - - xmlout.nlappend(""); - + stream << "# total_credit,expavg_time,expavgcredit,cpid" << std::endl; for (auto const& vv : vXML) { - std::string stotal_credit = ExtractXML(vv, "", ""); - std::string sexpavg_time = ExtractXML(vv, "", ""); - std::string sexpavg_credit = ExtractXML(vv, "", ""); - std::string scpid = ExtractXML(vv, "", ""); - - xmlout.nlappend(""); - xmlout.xmlappend("total_credit", stotal_credit); - xmlout.xmlappend("expavg_time", sexpavg_time); - xmlout.xmlappend("expavg_credit", sexpavg_credit); - xmlout.xmlappend("cpid", scpid); - xmlout.nlappend(""); + stream << ExtractXML(vv, "", "") << "," + << ExtractXML(vv, "", "") << "," + << ExtractXML(vv, "", "") << "," + << ExtractXML(vv, "", "") << std::endl; } - xmlout.nlappend(""); - - stream << xmlout.value(); - _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing team rac data; stripping complete"); out.push(stream); @@ -1358,94 +1341,28 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi bool bfileerror = false; std::vector vXML; - while (!bcomplete && !bfileerror) - { - // Find users block - std::string line; - - while (std::getline(in, line)) - { - if (line != "") - continue; - - else - break; - } - // block found - // Lets vector the blocks - - while (std::getline(in, line)) - { - if (bcomplete) - break; - - if (line == "") - { - bcomplete = true; - - break; - } - - if (line == "") - { - stringbuilder userdata; - - userdata.nlappend(line); - - //_log(INFO, "\nLoadProjectFileToStatsByCPID", "Line: " + line); - - while (std::getline(in, line)) - { - //_log(INFO, "LoadProjectFileToStatsByCPID", "Line: " + line); - - if (line == "") - { - userdata.nlappend(line); - - //_log(INFO, "LoadProjectFileToStatsByCPID", "userdata: \n" + userdata.value()); - - std::string sCPID = ExtractXML(userdata.value(), "", ""); - - //_log(INFO, "LoadProjectFileToStatsByCPID", "CPID: " + sCPID); - - // This uses the passed in beacon map to refilter the statistics. - if (mBeaconMap.count(sCPID) >= 1) - vXML.push_back(userdata.value()); - - break; - } - - userdata.nlappend(line); - } - } - } - - // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. - // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! - if (!bcomplete) - bfileerror = true; - } - - ingzfile.close(); - - if (bfileerror) - { - _log(CRITICAL, "LoadProjectFileToStatsByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); - return false; - } - - // Iterate through vector elements and populate map for byCPIDbyProject statistics. Compute project totals at the same time, because - // we will need it next to compute magnitudes. + // Lets vector the user blocks + std::string line; double dProjectTC = 0.0; double dProjectRAT = 0.0; double dProjectRAC = 0.0; - for (auto const& vv : vXML) + while (std::getline(in, line)) { + if(line[0] == '#') + continue; + + std::vector fields; + boost::split(fields, line, boost::is_any_of(","), boost::token_compress_on); + + if(fields.size() < 4) + continue; + ScraperObjectStats statsentry = {}; - std::string sTC = ExtractXML(vv, "", ""); - std::string sRAT = ExtractXML(vv, "", ""); - std::string sRAC = ExtractXML(vv, "", ""); + const std::string& sTC = fields[0]; + const std::string& sRAT = fields[1]; + const std::string& sRAC = fields[2]; + const std::string& cpid = fields[3]; // Replace blank strings with zeros. statsentry.statsvalue.dTC = (sTC.empty()) ? 0.0 : std::stod(sTC); @@ -1454,7 +1371,7 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. statsentry.statskey.objecttype = byCPIDbyProject; - statsentry.statskey.objectID = project + "," + ExtractXML(vv, "", ""); + statsentry.statskey.objectID = project + "," + cpid; // Insert stats entry into map by the key. mScraperStats[statsentry.statskey] = statsentry; @@ -1465,7 +1382,9 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi dProjectRAC += statsentry.statsvalue.dRAC; } - _log(INFO, "LoadProjectFileToStatsByCPID", "There are " + std::to_string(mScraperStats.size()) + " CPID entries for " + project); + ingzfile.close(); + + _log(INFO, "LoadProjectFileToStatsByCPID", "There are " + std::to_string(mScraperStats.size()) + " CPID entries for " + project); // The mScraperStats here is scoped to only this project so we do not need project filtering here. ScraperStats::iterator entry; From 36c2c5ae8363dc990eb2284ff8ebb054ae7c7f0d Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 9 Dec 2018 13:00:10 -0500 Subject: [PATCH 059/359] Fix before SB sleep period --- src/ScraperProxy/scraper.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 8ac76c4f67..74c1e2e1fe 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -131,18 +131,30 @@ void Scraper(bool fScraperStandalone) gridcoinrpc data; int64_t sbage = data.sbage(); + int64_t nScraperThreadStartTime = GetAdjustedTime(); // Give nActiveBeforeSB seconds before superblock needed before we sync + // Note there is a small while loop here to cull incoming manifests from + // other scrapers while this one is quiescent. An unlikely but possible + // situation because the nActiveBeforeSB may be set differently on other + // scrapers. if (sbage <= (86400 - nActiveBeforeSB) && sbage >= 0) { - _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); - // Don't let nBeforeSBSleep go less than zero, which could happen without max if wallet // started with sbage already older than 86400 - nActiveBeforeSB. int64_t nBeforeSBSleep = std::max(86400 - nActiveBeforeSB - sbage, (int64_t) 0); - _log(INFO, "Scraper", "Sleeping for " + std::to_string(nBeforeSBSleep) + " seconds."); - MilliSleep(nBeforeSBSleep * 1000); + _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); + + while (GetAdjustedTime() - nScraperThreadStartTime < nBeforeSBSleep) + { + // The only thing we do here while quiescent is cull manifests received + // from other scrapers. + ScraperDeleteCScraperManifests(); + + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + MilliSleep(nScraperSleep); + } } else if (sbage <= -1) From 4e266fbb6b63a8da2be2486e0c35988e165686c0 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sun, 9 Dec 2018 18:51:30 +0100 Subject: [PATCH 060/359] Condense the output writing a bit. --- src/ScraperProxy/scraper.cpp | 110 +++++++++-------------------------- 1 file changed, 27 insertions(+), 83 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 86e379b4f3..5c14ee9cda 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -693,74 +693,41 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); - - boostio::filtering_istream out; + boostio::filtering_ostream out; out.push(boostio::gzip_compressor()); - std::stringstream stream; + out.push(outgzfile); _log(INFO, "ProcessProjectRacFileByCPID", "Started processing " + file.string()); - std::vector vXML; - bool bcomplete = false; - bool bfileerror = false; - while (!bcomplete && !bfileerror) + std::string line; + stringbuilder builder; + out << "# total_credit,expavg_time,expavgcredit,cpid" << std::endl; + while (std::getline(in, line)) { - // Find users block - std::string line; - - while (std::getline(in, line)) + if(line == "") + builder.clear(); + else if(line == "") { - if (line != "") - continue; + const std::string& data = builder.value(); + builder.clear(); - else - break; - } - // block found - // Lets vector the blocks - - while (std::getline(in, line)) - { - if (bcomplete) - break; - - if (line == "") - { - bcomplete = true; - - break; - } - - if (line == "") - { - stringbuilder userdata; - - userdata.nlappend(line); - - while (std::getline(in, line)) - { - if (line == "") - { - userdata.nlappend(line); - - // This uses the beacon map rather than the teamid to select the statistics. - if (Consensus.mBeaconMap.count(ExtractXML(userdata.value(), "", "")) >= 1) - vXML.push_back(userdata.value()); - - break; - } + const std::string& cpid = ExtractXML(data, "", ""); + if (Consensus.mBeaconMap.count(cpid) < 1) + continue; - userdata.nlcleanappend(line); - } - } + // User beacon verified. Append its statistics to the CSV output. + out << ExtractXML(data, "", "") << "," + << ExtractXML(data, "", "") << "," + << ExtractXML(data, "", "") << "," + << cpid + << std::endl; } - - // If the file is complete/incomplete we will reach here. however bcomplete would be true to break this outter most loop. - // In case where we reach here but the bool for bcomplete is not true then the file was incomplete! - if (!bcomplete) - bfileerror = true; + else + builder.append(line); } + // TODO: Error out on stream errors. + /* if (bfileerror) { _log(CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); @@ -778,37 +745,14 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::remove(file); return false; - } + }*/ _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); _log(INFO, "ProcessProjectRacFileByCPID", "Started processing CPID rac data and stripping"); - // Strip the rac xml data to contain only why we need to be compressed from vector - // We Need: - // total_credit, expavg_time, expavg_credit, teamid, cpid - // We Don't need: - // id, country, name, url - // In reality we DO NOT need total_credit till TCD - // In reality we DO NOT need expavg_time but this will make nn compatible - // I've also opted to save 1 byte a line by not doing newlines since this a scraper - stream << "# total_credit,expavg_time,expavgcredit,cpid" << std::endl; - for (auto const& vv : vXML) - { - stream << ExtractXML(vv, "", "") << "," - << ExtractXML(vv, "", "") << "," - << ExtractXML(vv, "", "") << "," - << ExtractXML(vv, "", "") << std::endl; - } - - _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing team rac data; stripping complete"); - - out.push(stream); - - // Copy out to file. - boost::iostreams::copy(out, outgzfile); - ingzfile.close(); - outgzfile.flush(); + out.flush(); + out.reset(); outgzfile.close(); // Hash the file. From 04eed9998059dd06ca2204080cab2a4bc0435bd3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 9 Dec 2018 21:12:12 -0500 Subject: [PATCH 061/359] Remove unneeded log entry after condensing --- src/ScraperProxy/scraper.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index e9425bf7e8..398aeb9c63 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -760,7 +760,6 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil }*/ _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); - _log(INFO, "ProcessProjectRacFileByCPID", "Started processing CPID rac data and stripping"); ingzfile.close(); out.flush(); From 9c959ec925d925d40e6137d33d1383fea66a1f73 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 9 Dec 2018 21:28:21 -0500 Subject: [PATCH 062/359] Change -ByCPID to .csv --- src/ScraperProxy/scraper.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 398aeb9c63..82e335b68c 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -611,7 +611,7 @@ bool DownloadProjectRacFilesByCPID() _log(CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.first + " to authentication file"); } - std::string chketagfile = prjs.first + "-" + sRacETag + "-ByCPID" + ".gz"; + std::string chketagfile = prjs.first + "-" + sRacETag + ".csv" + ".gz"; fs::path chkfile = pathScraper / chketagfile.c_str(); if (fs::exists(chkfile)) @@ -695,10 +695,10 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // If einstein we store different // if (file.string().find("einstein") != std::string::npos) -// gzetagfile = "einstein_user-ByCPID.gz"; +// gzetagfile = "einstein_user.csv.gz"; // else - gzetagfile = project + "-" + etag + "-ByCPID" + ".gz"; + gzetagfile = project + "-" + etag + ".csv" + ".gz"; std::string gzetagfile_no_path = gzetagfile; // Put path in. @@ -1529,7 +1529,7 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) if (iPartNum == 0) outputfile = "BeaconList.csv.gz"; else - outputfile = manifest.projects[iPartNum-1].project + "-" + manifest.projects[iPartNum-1].ETag + "-ByCPID.gz"; + outputfile = manifest.projects[iPartNum-1].project + "-" + manifest.projects[iPartNum-1].ETag + ".csv.gz"; outputfilewpath = savepath / outputfile; @@ -1667,7 +1667,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) std::string sProject = entry.second.project + "-"; std::string sinputfile = inputfile.string(); - std::string suffix = "-ByCPID.gz"; + std::string suffix = ".csv.gz"; std::string ETag = sinputfile.erase(sinputfile.find(sProject), sProject.length()); ETag = sinputfile.erase(sinputfile.find(suffix), suffix.length()); From b91dd871ff7e18407c047a12cbaa26a7145b8fa6 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 12 Dec 2018 10:59:50 -0500 Subject: [PATCH 063/359] Refactor ScraperDeleteCScraperManifests() * Implement separate BinCScraperManifestsByScraper() * Change return of ScraperDeleteCScraperManifests() to mmCSManifestsBinnedByScraper * Create stub for upcoming ScraperConstructConvergedManifest() * Change inner map sort order on mmCSManifestBinnedByScraper to get rid of the reverse iterator. --- src/ScraperProxy/scraper.cpp | 118 ++++++++++++++++++++++------------- src/ScraperProxy/scraper.h | 8 ++- 2 files changed, 82 insertions(+), 44 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 82e335b68c..51b43c9179 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1705,87 +1705,119 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) } - -bool ScraperDeleteCScraperManifests() +bool ScraperConstructConvergedManifest() { - // Apply the SCRAPER_CMANIFEST_RETAIN_NONCURRENT bool and if false delete any existing - // CScraperManifests. + + // Call ScraperDeleteCScraperManifests() to ensure we have culled old manifests. This will + // return a map of manifests binned by Scraper after the culling. + // TODO: Put locking around CScraperManifest::mapManifest, because technically, a new one + // could appear at any moment, even between the below call and the following code. This should + // really be atomic. Note that without the lock, the worst that could happen is that a scraper + // could publish (and the node receive) a new manifest after the below call, which means an extra + // manifest would be in the map from a scraper. + mmCSManifestsBinnedByScraper mMapCSManifestsBinnedByScraper = ScraperDeleteCScraperManifests(); + + return true; + +} - _log(INFO, "ScraperDeleteCScraperManifests", "Deleting old CScraperManifests."); - if (!SCRAPER_CMANIFEST_RETAIN_NONCURRENT) + +mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper() +{ + mmCSManifestsBinnedByScraper mMapCSManifestsBinnedByScraper; + + // Make use of the ordered element feature of above map to bin by scraper and then order by manifest time. + for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ++iter) { - // Right now this is using sCManifestName, but needs to be changed to pubkey once the pubkey part is finished. - std::map> mmCSManifestsBinnedByScraper; + CScraperManifest& manifest = *iter->second; + + std::string sManifestName = manifest.sCManifestName; + int64_t nTime = manifest.nTime; + uint256 nHash = *manifest.phash; + + mCSManifest mManifestInner; + + auto BinIter = mMapCSManifestsBinnedByScraper.find(sManifestName); - // Make use of the ordered element feature of above map to bin by scraper and then order by manifest time. - for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ++iter) + // No scraper bin yet - so new insert. + if (BinIter == mMapCSManifestsBinnedByScraper.end()) { - CScraperManifest& manifest = *iter->second; + mManifestInner.insert(std::make_pair(nTime, nHash)); + mMapCSManifestsBinnedByScraper.insert(std::make_pair(sManifestName, mManifestInner)); + } + else + { + mManifestInner = BinIter->second; + mManifestInner.insert(std::make_pair(nTime, nHash)); + std::swap(mManifestInner, BinIter->second); + } + } + + return mMapCSManifestsBinnedByScraper; +} - std::string sManifestName = manifest.sCManifestName; - int64_t nTime = manifest.nTime; - uint256 nHash = *manifest.phash; - std::multimap mManifestInner; +mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests() +{ + // Apply the SCRAPER_CMANIFEST_RETAIN_NONCURRENT bool and if false delete any existing + // CScraperManifests other than the current one for each scraper. + // TODO: Locking around CScraperManifest map. - auto BinIter = mmCSManifestsBinnedByScraper.find(sManifestName); + _log(INFO, "ScraperDeleteCScraperManifests", "Deleting old CScraperManifests."); - // No scraper bin yet - so new insert. - if (BinIter == mmCSManifestsBinnedByScraper.end()) - { - mManifestInner.insert(std::make_pair(nTime, nHash)); - mmCSManifestsBinnedByScraper.insert(std::make_pair(sManifestName, mManifestInner)); - } - else - { - mManifestInner = BinIter->second; - mManifestInner.insert(std::make_pair(nTime, nHash)); - std::swap(mManifestInner, BinIter->second); - } - } + // Bin by scraper and order by manifest time within scraper bin. + mmCSManifestsBinnedByScraper mMapCSManifestsBinnedByScraper = BinCScraperManifestsByScraper(); - _log(INFO, "ScraperDeleteCScraperManifests", "mmCSManifestsBinnedByScraper size = " + std::to_string(mmCSManifestsBinnedByScraper.size())); + _log(INFO, "ScraperDeleteCScraperManifests", "mMapCSManifestsBinnedByScraper size = " + std::to_string(mMapCSManifestsBinnedByScraper.size())); + if (!SCRAPER_CMANIFEST_RETAIN_NONCURRENT) + { // For each scraper, delete every manifest EXCEPT the latest. - std::map>::iterator iter; - for (iter = mmCSManifestsBinnedByScraper.begin(); iter != mmCSManifestsBinnedByScraper.end(); ++iter) + for (auto iter = mMapCSManifestsBinnedByScraper.begin(); iter != mMapCSManifestsBinnedByScraper.end(); ++iter) { - std::multimap mManifestInner = iter->second; + mCSManifest mManifestInner = iter->second; _log(INFO, "ScraperDeleteCScraperManifests", "mManifestInner size = " + std::to_string(mManifestInner.size()) + " for " + iter->first + " scraper"); - // This preserves the LATEST CScraperManifest entry for the given scraper (because of the reverse iterator), - // and deletes all others for that scraper source. - for (auto iter_inner = ++mManifestInner.rbegin() ;iter_inner != mManifestInner.rend(); ++iter_inner) + // This preserves the LATEST CScraperManifest entry for the given scraper, because the inner map is in descending order, + // and the first element is therefore the LATEST, and is skipped. + for (auto iter_inner = ++mManifestInner.begin(); iter_inner != mManifestInner.end(); ++iter_inner) { + _log(INFO, "ScraperDeleteCScraperManifests", "Deleting non-current manifest " + iter_inner->second.GetHex() + " from scraper source " + iter->first); + + // Delete from CScraperManifest map ScraperDeleteCScraperManifest(iter_inner->second); } } } - // If any CScraperManifest has exceeded SCRAPER_CMANIFEST_RETENTION_TIME, then // delete. for (auto iter = CScraperManifest::mapManifest.begin(); iter != CScraperManifest::mapManifest.end(); ) { // Copy iterator for deletion operation and increment iterator. - auto iter_copy = iter++; - - CScraperManifest& manifest = *iter_copy->second; + auto iter_copy = iter; + CScraperManifest& manifest = *iter->second; + if (GetAdjustedTime() - manifest.nTime > SCRAPER_CMANIFEST_RETENTION_TIME) { - _log(INFO, "Scraper", "Deleting old CScraperManifest with hash " + iter_copy->first.GetHex()); + _log(INFO, "Scraper", "Deleting old CScraperManifest with hash " + iter->first.GetHex()); + // Delete from CScraperManifest map ScraperDeleteCScraperManifest(iter_copy->first); } + + ++iter; } - // TODO: Error handling. - return true; + // Reload mMapCSManifestsBinnedByScraper after deletions. This is not particularly efficient, but the map is not + // that large. + mMapCSManifestsBinnedByScraper = BinCScraperManifestsByScraper(); + return mMapCSManifestsBinnedByScraper; } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index acec28862a..5f9b659bd3 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -116,6 +116,11 @@ struct ScraperFileManifest int64_t timestamp; }; +// The inner map is sorted in descending order of time. +typedef std::multimap> mCSManifest; +// Right now this is using sCManifestName, but needs to be changed to pubkey once the pubkey part is finished. +typedef std::map mmCSManifestsBinnedByScraper; + struct ScraperObjectStatsKey { statsobjecttype objecttype; @@ -184,7 +189,8 @@ bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); bool IsScraperAuthorizedToBroadcastManifests(); bool ScraperSendFileManifestContents(std::string CManifestName); -bool ScraperDeleteCScraperManifests(); +mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper(); +mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests(); bool ScraperDeleteCScraperManifest(uint256 nManifestHash); double MagRound(double dMag) From 9df7445cf2b562d7a00ca2638abaaba6ebdf7b51 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 16 Dec 2018 01:09:03 -0500 Subject: [PATCH 064/359] Implemnentation of ScraperConstructConvergedManifest() Part 1, which is the manifest level matching. --- src/ScraperProxy/scraper.cpp | 82 ++++++++++++++++++++++++++++++++---- src/ScraperProxy/scraper.h | 33 ++++++++++++--- 2 files changed, 101 insertions(+), 14 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 51b43c9179..51459c5b68 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -259,7 +259,8 @@ void Scraper(bool fScraperStandalone) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; // Cull CScraperManifests. - ScraperDeleteCScraperManifests(); + //ScraperDeleteCScraperManifests(); + ScraperConstructConvergedManifest(); } } @@ -282,8 +283,8 @@ void NeuralNetwork() if (!fScraperActive) { // Currently just cull outdated CScraperManifests received - - ScraperDeleteCScraperManifests(); + //ScraperDeleteCScraperManifests(); + ScraperConstructConvergedManifest(); } // Use the same sleep interval as the scraper. This defaults to 60 seconds. @@ -1707,7 +1708,8 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) bool ScraperConstructConvergedManifest() { - + bool bConvergenceSuccessful = false; + // Call ScraperDeleteCScraperManifests() to ensure we have culled old manifests. This will // return a map of manifests binned by Scraper after the culling. // TODO: Put locking around CScraperManifest::mapManifest, because technically, a new one @@ -1717,7 +1719,68 @@ bool ScraperConstructConvergedManifest() // manifest would be in the map from a scraper. mmCSManifestsBinnedByScraper mMapCSManifestsBinnedByScraper = ScraperDeleteCScraperManifests(); - return true; + // Do a map for unique manifest times ordered by descending time then content hash. + std::multimap> mManifestsBinnedByTime; + // and also by content hash, then scraperID and manifest (not content) hash. + std::multimap> mManifestsBinnedbyContent; + std::multimap>::iterator convergence; + + unsigned int nScraperCount = mMapCSManifestsBinnedByScraper.size(); + + _log(INFO, "ScraperConstructConvergedManifest", "Number of Scrapers with manifests = " + std::to_string(nScraperCount)); + + for (const auto& iter : mMapCSManifestsBinnedByScraper) + { + // iter.second is the mCSManifest + for (const auto& iter_inner : iter.second) + { + // Insert into mManifestsBinnedByTime multimap. Iter_inner.first is the manifest time, + // iter_inner.second.second is the manifest CONTENT hash. + mManifestsBinnedByTime.insert(std::make_pair(iter_inner.first, iter_inner.second.second)); + // Insert into mManifestsBinnedbyContent ------------- content hash --------------------- ScraperID ------ manifest hash. + mManifestsBinnedbyContent.insert(std::make_pair(iter_inner.second.second, std::make_pair(iter.first, iter_inner.second.first))); + _log(INFO, "ScraperConstructConvergedManifest", "mManifestsBinnedbyContent insert " + + iter_inner.second.second.GetHex() + ", " + iter.first + ", " + iter_inner.second.first.GetHex()); + } + } + + // Walk the time map (backwards in time because the sort order is descending), and select the first + // manifest content hash that meets the convergence rule. + for (const auto& iter : mManifestsBinnedByTime) + { + // Notice the below is NOT using the time. We switch to the content only. The time is only used to make sure + // we test the convergence of the manifests in time order, but once a content hash is selected based on the time, + // only the content hash is used to count occurrences in the multimap, because the times for the same + // content hash manifest will be different across different scrapers. + unsigned int nIdenticalContentManifestCount = mManifestsBinnedbyContent.count(iter.second); + if (nIdenticalContentManifestCount >= NumScrapersForSupermajority(nScraperCount)) + { + // Find the first one of equivalent content manifests. + convergence = mManifestsBinnedbyContent.find(iter.second); + + _log(INFO, "ScraperConstructConvergedManifest", "Found convergence on manifest " + convergence->second.second.GetHex() + + " with " + std::to_string(nIdenticalContentManifestCount) + " scrapers out of " + std::to_string(nScraperCount) + + " agreeing."); + + bConvergenceSuccessful = true; + + break; + } + } + + // TODO: Write the part level convergence routine. The above will only work reasonably well if + // SCRAPER_CMANIFEST_RETAIN_NONCURRENT = true (which keeps a history of whole manifests around, and + // SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES = false (which only includes current files in the manifests). + // This may be the simpler way to go rather than flipping the above flags and matching at the part level, + // And since the parts are not actually duplicated between manifests if they have the same hash (they are referenced), + // the only additional overhead is the map entry and fields at the CScraperManifest level, which is small compared to the + // parts themselves. + + + if(!bConvergenceSuccessful) + _log(INFO, "ScraperConstructConvergedManifest", "No convergence on manifests by content at the manifest level."); + + return bConvergenceSuccessful; } @@ -1735,6 +1798,7 @@ mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper() std::string sManifestName = manifest.sCManifestName; int64_t nTime = manifest.nTime; uint256 nHash = *manifest.phash; + uint256 nContentHash = manifest.nContentHash; mCSManifest mManifestInner; @@ -1743,13 +1807,13 @@ mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper() // No scraper bin yet - so new insert. if (BinIter == mMapCSManifestsBinnedByScraper.end()) { - mManifestInner.insert(std::make_pair(nTime, nHash)); + mManifestInner.insert(std::make_pair(nTime, std::make_pair(nHash, nContentHash))); mMapCSManifestsBinnedByScraper.insert(std::make_pair(sManifestName, mManifestInner)); } else { mManifestInner = BinIter->second; - mManifestInner.insert(std::make_pair(nTime, nHash)); + mManifestInner.insert(std::make_pair(nTime, std::make_pair(nHash, nContentHash))); std::swap(mManifestInner, BinIter->second); } } @@ -1786,11 +1850,11 @@ mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests() for (auto iter_inner = ++mManifestInner.begin(); iter_inner != mManifestInner.end(); ++iter_inner) { - _log(INFO, "ScraperDeleteCScraperManifests", "Deleting non-current manifest " + iter_inner->second.GetHex() + _log(INFO, "ScraperDeleteCScraperManifests", "Deleting non-current manifest " + iter_inner->second.first.GetHex() + " from scraper source " + iter->first); // Delete from CScraperManifest map - ScraperDeleteCScraperManifest(iter_inner->second); + ScraperDeleteCScraperManifest(iter_inner->second.first); } } } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 5f9b659bd3..f8a1334888 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -116,10 +116,12 @@ struct ScraperFileManifest int64_t timestamp; }; -// The inner map is sorted in descending order of time. -typedef std::multimap> mCSManifest; +typedef std::string ScraperID; +// The inner map is sorted in descending order of time. The pair is manifest hash, content hash. +typedef std::multimap, greater > mCSManifest; // Right now this is using sCManifestName, but needs to be changed to pubkey once the pubkey part is finished. -typedef std::map mmCSManifestsBinnedByScraper; +// See the ScraperID typedef above. +typedef std::map mmCSManifestsBinnedByScraper; struct ScraperObjectStatsKey { @@ -155,15 +157,28 @@ typedef std::map Date: Sun, 16 Dec 2018 11:35:16 -0500 Subject: [PATCH 065/359] Add duplicate check before insert into mManifestsBinnedbyContent --- src/ScraperProxy/scraper.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 51459c5b68..92e90147cc 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1737,10 +1737,28 @@ bool ScraperConstructConvergedManifest() // Insert into mManifestsBinnedByTime multimap. Iter_inner.first is the manifest time, // iter_inner.second.second is the manifest CONTENT hash. mManifestsBinnedByTime.insert(std::make_pair(iter_inner.first, iter_inner.second.second)); - // Insert into mManifestsBinnedbyContent ------------- content hash --------------------- ScraperID ------ manifest hash. - mManifestsBinnedbyContent.insert(std::make_pair(iter_inner.second.second, std::make_pair(iter.first, iter_inner.second.first))); - _log(INFO, "ScraperConstructConvergedManifest", "mManifestsBinnedbyContent insert " - + iter_inner.second.second.GetHex() + ", " + iter.first + ", " + iter_inner.second.first.GetHex()); + + // Even though this is a multimap on purpose because we are going to count occurances of the same key, + // We need to prevent the insertion of a second entry with the same content from the same scraper. This + // could otherwise happen if a scraper is shutdown and restarted, and it publishes a new manifest + // before it receives manifests from the other nodes (including its own prior manifests). + + auto range = mManifestsBinnedbyContent.equal_range(iter_inner.second.second); + bool bAlreadyExists = false; + for (auto iter3 = range.first; iter3 != range.second; ++iter3) + { + // ---- ScraperID ------ Candidate scraperID to insert + if (iter3->second.first == iter.first) + bAlreadyExists = true; + } + + if (!bAlreadyExists) + { + // Insert into mManifestsBinnedbyContent ------------- content hash --------------------- ScraperID ------ manifest hash. + mManifestsBinnedbyContent.insert(std::make_pair(iter_inner.second.second, std::make_pair(iter.first, iter_inner.second.first))); + _log(INFO, "ScraperConstructConvergedManifest", "mManifestsBinnedbyContent insert " + + iter_inner.second.second.GetHex() + ", " + iter.first + ", " + iter_inner.second.first.GetHex()); + } } } @@ -1759,6 +1777,7 @@ bool ScraperConstructConvergedManifest() convergence = mManifestsBinnedbyContent.find(iter.second); _log(INFO, "ScraperConstructConvergedManifest", "Found convergence on manifest " + convergence->second.second.GetHex() + + " at " + std::to_string(iter.first) + " with " + std::to_string(nIdenticalContentManifestCount) + " scrapers out of " + std::to_string(nScraperCount) + " agreeing."); From 656637d493c8b8cfca62282b0c72ddf06f1e2d34 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 17 Dec 2018 02:32:35 -0500 Subject: [PATCH 066/359] Changes to support Windows compilation --- configure.ac | 2 ++ depends/packages/boost.mk | 3 ++- depends/packages/zlib.mk | 5 +++-- src/Makefile.am | 6 +++--- src/Makefile.qt.include | 2 +- src/Makefile.qttest.include | 2 +- src/Makefile.test.include | 2 +- src/ScraperProxy/scraper.cpp | 17 ++++++++++------- src/ScraperProxy/scraper.h | 18 +++++++++++++----- 9 files changed, 36 insertions(+), 21 deletions(-) mode change 100644 => 100755 depends/packages/boost.mk mode change 100644 => 100755 depends/packages/zlib.mk diff --git a/configure.ac b/configure.ac index 4ec5b64293..6c874c7ae3 100755 --- a/configure.ac +++ b/configure.ac @@ -1159,6 +1159,8 @@ AC_SUBST(MINIUPNPC_CPPFLAGS) AC_SUBST(MINIUPNPC_LIBS) AC_SUBST(CRYPTO_LIBS) AC_SUBST(SSL_LIBS) +AC_SUBST(CURL_LIBS) +AC_SUBST(LIBZIP_LIBS) AC_SUBST(EVENT_LIBS) AC_SUBST(EVENT_PTHREADS_LIBS) AC_SUBST(ZMQ_LIBS) diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk old mode 100644 new mode 100755 index 75fa75b85e..1896c84c81 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -7,8 +7,9 @@ $(package)_sha256_hash=9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30d define $(package)_set_vars $(package)_config_opts_release=variant=release $(package)_config_opts_debug=variant=debug +$(package)_dependencies=zlib $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam -$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 +$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sZLIB_INCLUDE=$(host_prefix)/include -sZLIB_LIBPATH=$(host_prefix)/lib $(package)_config_opts_linux=threadapi=pthread runtime-link=shared $(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static diff --git a/depends/packages/zlib.mk b/depends/packages/zlib.mk old mode 100644 new mode 100755 index e0600f0fe2..9ab3273a48 --- a/depends/packages/zlib.mk +++ b/depends/packages/zlib.mk @@ -18,9 +18,10 @@ define $(package)_config_cmds endef define $(package)_build_cmds - $(MAKE) $($(package)_build_opts) libz.a + $(MAKE) $($(package)_build_opts) all endef define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install $($(package)_build_opts) + $(MAKE) DESTDIR=$($(package)_staging_dir) install $($(package)_build_opts) &&\ + $(MAKE) DESTDIR=$(host_prefix) install $($(package)_build_opts) endef diff --git a/src/Makefile.am b/src/Makefile.am index 414c02ad0f..5cfe79b2c3 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,7 +6,7 @@ DIST_SUBDIRS = univalue AM_LDFLAGS = ${libcurl_LIBS} $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) -AM_CPPFLAGS = ${libcurl_CFLAGS} $(HARDENED_CPPFLAGS) -DSTATICLIB -DMINIUPNP_STATICLIB +AM_CPPFLAGS = ${libcurl_CFLAGS} $(HARDENED_CPPFLAGS) -DSTATICLIB -DCURL_STATICLIB -DMINIUPNP_STATICLIB EXTRA_LIBRARIES = if EMBEDDED_UNIVALUE @@ -19,7 +19,7 @@ LIBUNIVALUE = $(UNIVALUE_LIBS) endif GRIDCOIN_CONFIG_INCLUDES=-I$(builddir)/config -GRIDCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) $(CRYPTO_CFLAGS) $(SSL_CFLAGS) $(UNIVALUE_CFLAGS) +GRIDCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) $(CRYPTO_CFLAGS) $(SSL_CFLAGS) $(UNIVALUE_CFLAGS) $(CURL_CFLAGS) $(LIBZIP_CFLAGS) LIBGRIDCOIN_UTIL=libgridcoin_util.a LIBGRIDCOINQT=qt/libgridcoinqt.a @@ -245,7 +245,7 @@ gridcoinresearchd_LDADD = \ $(LIBLEVELDB_SSE42) \ $(LIBMEMENV) -gridcoinresearchd_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) +gridcoinresearchd_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) if TARGET_WINDOWS gridcoinresearchd_SOURCES += gridcoinresearchd-res.rc diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index baae9d613a..0b05f47b59 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -369,7 +369,7 @@ else endif qt_gridcoinresearch_LDADD += $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBGRIDCOIN_CRYPTO) $(LIBMEMENV) \ $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)\ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) + $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) qt_gridcoinresearch_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_gridcoinresearch_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS) --tag CXX diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index 38f8062ef1..9e6fd7e25e 100755 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -25,7 +25,7 @@ qt_test_test_gridcoin_qt_LDADD = $(LIBGRIDCOINQT) qt_test_test_gridcoin_qt_LDADD += $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBGRIDCOIN_CRYPTO) \ $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ $(QR_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) \ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) + $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) qt_test_test_gridcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_test_test_gridcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 797ab3c3f4..e773a7584d 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -56,7 +56,7 @@ GRIDCOIN_TESTS =\ test_test_gridcoin_SOURCES = $(GRIDCOIN_TESTS) $(JSON_TEST_FILES) $(OTHER_TEST_FILES) test_test_gridcoin_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS) -test_test_gridcoin_LDADD = $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) +test_test_gridcoin_LDADD = $(LIBGRIDCOIN_UTIL) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) test_test_gridcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) test_test_gridcoin_LDADD += $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBGRIDCOIN_CRYPTO) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 92e90147cc..1821122adc 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -31,7 +31,7 @@ void testdata(const std::string& etag); unsigned int nScraperSleep = 60000; unsigned int nActiveBeforeSB = 300; bool fScraperRetainNonCurrentFiles = false; -boost::filesystem::path pathScraper = fs::current_path() / "Scraper"; +fs::path pathScraper = fs::current_path() / "Scraper"; extern void MilliSleep(int64_t n); extern BeaconConsensus GetConsensusBeaconList(); @@ -41,6 +41,9 @@ void Scraper(bool fScraperStandalone) { _log(INFO, "Scraper", "Starting Scraper thread."); + // This is necessary to maintain compatibility with Windows. + pathScraper.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16())); + // Hash check std::string sHashCheck = "Hello world"; uint256 nHashCheck = Hash(sHashCheck.begin(), sHashCheck.end()); @@ -81,14 +84,14 @@ void Scraper(bool fScraperStandalone) for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - std::string filename = dir.path().filename().c_str(); + std::string filename = dir.path().filename().string(); if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "BeaconList.csv.gz" && dir.path().filename() != "Stats.csv.gz" && fs::is_regular_file(dir)) { - entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().c_str()); + entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().string()); if (entry == StructScraperFileManifest.mScraperFileManifest.end()) { fs::remove(dir.path()); @@ -703,7 +706,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil std::string gzetagfile_no_path = gzetagfile; // Put path in. - gzetagfile = ((fs::path)(pathScraper / gzetagfile)).c_str(); + gzetagfile = ((fs::path)(pathScraper / gzetagfile)).string(); std::ofstream outgzfile(gzetagfile, std::ios_base::out | std::ios_base::binary); boostio::filtering_ostream out; @@ -914,7 +917,7 @@ uint256 GetmScraperFileManifestHash() void testdata(const std::string& etag) { - std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile( (pathScraper / (fs::path)(etag + ".gz")).string(), std::ios_base::in | std::ios_base::binary); boostio::filtering_istream in; @@ -1584,7 +1587,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) fs::path inputfilewpath = pathScraper / inputfile; // open input file, and associate with CAutoFile - FILE *file = fopen(inputfilewpath.c_str(), "rb"); + FILE *file = fopen(inputfilewpath.string().c_str(), "rb"); CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); if (!filein) @@ -1634,7 +1637,7 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) fs::path inputfilewpath = pathScraper / inputfile; // open input file, and associate with CAutoFile - FILE *file = fopen(inputfilewpath.c_str(), "rb"); + FILE *file = fopen(inputfilewpath.string().c_str(), "rb"); CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); if (!filein) diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index f8a1334888..9302d9f93b 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include #include @@ -59,10 +61,15 @@ namespace boostio = boost::iostreams; * Scraper ENUMS * *********************/ +// Have to have undefine ERROR and redefine as zero in enum because stupid windows.h has it already defined as zero, but as a macro. +#ifdef WIN32 +#undef ERROR +#endif + enum logattribute { + ERROR, INFO, WARNING, - ERROR, CRITICAL }; @@ -629,7 +636,8 @@ class logger { private: - std::ofstream logfile; + //std::ofstream logfile; + fs::ofstream logfile; public: @@ -897,7 +905,7 @@ class userpass { private: - std::ifstream userpassfile; + fs::ifstream userpassfile; public: @@ -955,7 +963,7 @@ class authdata { private: - std::ofstream oauthdata; + fs::ofstream oauthdata; stringbuilder outdata; public: @@ -1023,7 +1031,7 @@ class nntester { private: - std::ofstream logfile; + fs::ofstream logfile; public: From 0eb0f43c8da05ac8b80c00643d491279694ee688 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 18 Dec 2018 18:14:31 -0500 Subject: [PATCH 067/359] Further changes to get TLS for CURL working in Windows --- configure.ac | 2 +- contrib/TLS/cacert.pem | 3426 +++++++++++++++++++++++++++++++++++ depends/packages/boost.mk | 2 +- depends/packages/curl.mk | 9 +- depends/packages/openssl.mk | 2 +- src/ScraperProxy/scraper.h | 8 +- 6 files changed, 3442 insertions(+), 7 deletions(-) create mode 100644 contrib/TLS/cacert.pem mode change 100644 => 100755 depends/packages/curl.mk mode change 100644 => 100755 depends/packages/openssl.mk diff --git a/configure.ac b/configure.ac index 6c874c7ae3..548b2b942d 100755 --- a/configure.ac +++ b/configure.ac @@ -828,7 +828,7 @@ fi if test x$use_boost = xyes; then -BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB" +BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB $BOOST_ZLIB_LIB" dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums diff --git a/contrib/TLS/cacert.pem b/contrib/TLS/cacert.pem new file mode 100644 index 0000000000..426749373d --- /dev/null +++ b/contrib/TLS/cacert.pem @@ -0,0 +1,3426 @@ +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb +BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz +MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx +FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g +Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 +fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl +LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV +WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF +TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb +5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc +CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri +wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ +wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG +m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 +F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng +WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 +2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ +0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw +F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS +g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj +qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN +h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ +ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V +btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj +Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ +8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW +gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA +MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy +dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa +MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy +dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a +iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt +6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP +0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f +6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE +EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN +1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc +h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT +mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV +4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO +WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud +DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd +Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq +hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7 +/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS +S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j +2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R +Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr +RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy +6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV +V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5 +g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl +++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x +CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs +dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x +CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs +dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat +93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x +Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj +FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG +SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch +p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal +U5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB +8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy +dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 +YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 +dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh +IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD +LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG +EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g +KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD +ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu +bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg +ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R +85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm +4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV +HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd +QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t +lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB +o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 +opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo +dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW +ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN +AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y +/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k +SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy +Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS +Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl +nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA +MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w +ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw +MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU +T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b +wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX +/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0 +77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP +uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx +p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx +Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2 +TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W +G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw +vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY +EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1 +2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw +DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf +gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS +FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0 +V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P +XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I +i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t +TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91 +09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky +Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ +AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj +1oxx +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA +MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w +ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw +MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU +T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh +/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e +CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6 +1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE +FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS +gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X +G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy +YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH +vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4 +t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/ +gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3 +5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w +DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0 +nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT +RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT +wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2 +t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa +TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2 +o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU +3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA +iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f +WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM +S1IK +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx +CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U +cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow +QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl +blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm +3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d +oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5 +DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK +BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q +j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx +4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC7DCCAdSgAwIBAgIJAPud9lmNbCVEMA0GCSqGSIb3DQEBCwUAMB4xHDAaBgNV +BAMME2t1YnVudHUuamNvd2Vucy5uZXQwHhcNMTgwNTI3MjAyMDQ0WhcNMjgwNTI0 +MjAyMDQ0WjAeMRwwGgYDVQQDDBNrdWJ1bnR1Lmpjb3dlbnMubmV0MIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk+CkLJGdVXyJO4P448s3SluOVC5CVLeS +FVz/3wVKanOiepCzaYpWnnNsmrxPK8uBwH5VY28kSiPrQ2pPHpvkS2cN4up7mR2J +p3LWgCOud+DrAG+qq+wOVnKI6PF9WYTLTBWkrl0gP2Dic621jrZXN35hK7oLC3GA +Az47B/mTPA/FRH1RNLAEVLSURxxBIbG41xQyBZ2esWkkqxZ9JnyrZsUVP13NQxTa +i/rq+i5BKVprz02Tqzrm55/UBEIuCswUeU6/OrUeNyr0/PitegK2e3Tcr63G0laX +EsEhjMbGg6SgSLyKBmXCt5mEDG72VS0QYT5Da2Z6LHYQfpj9TaNxhwIDAQABoy0w +KzAJBgNVHRMEAjAAMB4GA1UdEQQXMBWCE2t1YnVudHUuamNvd2Vucy5uZXQwDQYJ +KoZIhvcNAQELBQADggEBAH2Vi+4uJ9Fn2KrV0D7YJMkhgbgPPxAjhlQt4Ue+jAEP +P/v5jv9r20bUUB1FxKf6IBOSXYWVuAZzF7jeYx7DzSD2qda21i7YmT/cD4we6pkq +5tQ2vbLuW5yLFfatH3bGx3Z9rzfU7cjcwRD2kyyJgNlrMcSL7o7l6imEqmGolRcO +L4/aDRAAaaNt0GsZxHdum7UbB+3jnLR/pGSgRsqEURmEI0P1gBGu1yRkK+7r/phy +UWgcriY+lMi3ZiiAIbGWRY9Tdh3L0VLmZQsD445xk/PMzlCZ7WRpOpAQ/m94niJN +6rCRRBRsisfSDXdeeMX1MSVm33XITCcrCBy4Fqzdsf8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UE +BhMCVFIxDzANBgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxn +aSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkg +QS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2Eg +SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAwODA3MDFaFw0yMzA0 +MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYD +VQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 +dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCUZ4WWe60ghUEoI5RHwWrom +/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537jVJp45wnEFPzpALFp/kR +Gml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1mep5Fimh3 +4khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z +5UNP9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0 +hO8EuPbJbKoCPrZV4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QID +AQABo0IwQDAdBgNVHQ4EFgQUVpkHHtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJ5FdnsX +SDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPoBP5yCccLqh0l +VX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nf +peYVhDfwwvJllpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CF +Yv4HAqGEVka+lgqaE9chTLd8B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW ++qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr +MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl +cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h +dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l +cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h +2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E +lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV +ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq +299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t +vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL +dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF +AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR +zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 +LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd +7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw +++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 1896c84c81..a97621f49b 100755 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -9,7 +9,7 @@ $(package)_config_opts_release=variant=release $(package)_config_opts_debug=variant=debug $(package)_dependencies=zlib $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam -$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sZLIB_INCLUDE=$(host_prefix)/include -sZLIB_LIBPATH=$(host_prefix)/lib +$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sZLIB_SOURCE=/home/jco/builds/zlib-1.2.11 -sZLIB_INCLUDE=$(host_prefix)/include -sZLIB_LIBPATH=$(host_prefix)/lib $(package)_config_opts_linux=threadapi=pthread runtime-link=shared $(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static diff --git a/depends/packages/curl.mk b/depends/packages/curl.mk old mode 100644 new mode 100755 index ba0e20a048..c5defebe5a --- a/depends/packages/curl.mk +++ b/depends/packages/curl.mk @@ -1,11 +1,16 @@ package=curl -$(package)_version=7.55.0 +$(package)_version=7.63.0 $(package)_download_path=https://curl.haxx.se/download/ $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=dae1b1be34f5983e8d46917f2bdbb2335aecd0e57f777f4c32213da6a8050a80 +$(package)_sha256_hash=d483b89062832e211c887d7cf1b65c902d591b48c11fe7d174af781681580b41 +$(package)_dependencies=openssl define $(package)_set_vars $(package)_config_opts=--disable-shared $(package)_config_opts+= --enable-static + $(package)_config_opts+= --enable-ssl + $(package)_config_opts+= --with-ca-bundle=./TLS/cacert.pem + $(package)_config_opts+= --with-ca-path=./TLS/certs +# $(package)_config_opts+= --with-winssl $(package)_config_opts_release+=--disable-debug-mode $(package)_config_opts_linux+=--with-pic endef diff --git a/depends/packages/openssl.mk b/depends/packages/openssl.mk old mode 100644 new mode 100755 index 5ee9f17a63..a1dbd9199c --- a/depends/packages/openssl.mk +++ b/depends/packages/openssl.mk @@ -30,7 +30,7 @@ $(package)_config_opts+=no-rfc3779 $(package)_config_opts+=no-rsax $(package)_config_opts+=no-sctp $(package)_config_opts+=no-seed -$(package)_config_opts+=no-sha0 +# $(package)_config_opts+=no-sha0 $(package)_config_opts+=no-shared $(package)_config_opts+=no-ssl-trace $(package)_config_opts+=no-ssl2 diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 9302d9f93b..37d91b416d 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -409,6 +409,7 @@ class statscurl curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); fclose(fp); @@ -456,6 +457,7 @@ class statscurl curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); @@ -464,7 +466,7 @@ class statscurl if (res > 0) { - _log(ERROR, "curl_http_header", "Failed to capture header of file "); + _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); return false; } @@ -529,6 +531,7 @@ class statscurl curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); curl_easy_setopt(curl, CURLOPT_PROXY, ""); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); fclose(fp); @@ -574,6 +577,7 @@ class statscurl curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); @@ -582,7 +586,7 @@ class statscurl if (res > 0) { - _log(ERROR, "curl_http_header", "Failed to capture header of file "); + _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); return false; } From d454aee04e2096d75feb741506a12ee702a59b1e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 19 Dec 2018 10:14:10 -0500 Subject: [PATCH 068/359] Put try/catchs around curl calls This is to prevent segmentation faults for certain curl errors. --- src/ScraperProxy/scraper.h | 108 ++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 37d91b416d..e97b7ebc5e 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -438,35 +438,45 @@ class statscurl bool http_header(const std::string& url, std::string& etag, const std::string& userpass) { - struct curl_slist* headers = NULL; + try + { + struct curl_slist* headers = NULL; - headers = curl_slist_append(headers, "Accept: */*"); - headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); + headers = curl_slist_append(headers, "Accept: */*"); + headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); - curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_setopt(curl, CURLOPT_PROXY, ""); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); - curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); - //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L); + curl_easy_setopt(curl, CURLOPT_USERPWD, userpass.c_str()); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); - res = curl_easy_perform(curl); + res = curl_easy_perform(curl); - // Stop memory leak from headers - curl_slist_free_all(headers); + // Stop memory leak from headers + curl_slist_free_all(headers); - if (res > 0) + if (res > 0) + { + _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); + + return false; + } + } + + catch (std::exception& ex) { - _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); + _log(ERROR, "curl_http_header", "Std exception occured (" + std::string(ex.what()) + ")"); return false; } @@ -560,33 +570,43 @@ class statscurl bool http_header(const std::string& url, std::string& etag) { - struct curl_slist* headers = NULL; + try + { + struct curl_slist* headers = NULL; - headers = curl_slist_append(headers, "Accept: */*"); - headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); + headers = curl_slist_append(headers, "Accept: */*"); + headers = curl_slist_append(headers, "User-Agent: curl/7.58.0"); - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); - curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_setopt(curl, CURLOPT_PROXY, ""); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeheader); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_PROXY, ""); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); - res = curl_easy_perform(curl); + res = curl_easy_perform(curl); - // Stop memory leak from headers - curl_slist_free_all(headers); + // Stop memory leak from headers + curl_slist_free_all(headers); - if (res > 0) + if (res > 0) + { + _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); + + return false; + } + } + + catch (std::exception& ex) { - _log(ERROR, "curl_http_header", "Failed to capture header of file with curl error= " + curl_easy_strerror(res)); + _log(ERROR, "curl_http_header", "Std exception occured (" + std::string(ex.what()) + ")"); return false; } From e8b14b4f7b0121e8ce94da8a86d5b919d60cc9c3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 20 Dec 2018 03:27:28 -0500 Subject: [PATCH 069/359] Adds stats generation from the converged manifest This commit implements the functions necessary to produce statistics from the agreed upon (converged) manifest. --- src/ScraperProxy/scraper.cpp | 324 +++++++++++++++++++++++++++++++++-- src/ScraperProxy/scraper.h | 22 ++- 2 files changed, 334 insertions(+), 12 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 1821122adc..4960cd438c 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -89,6 +89,7 @@ void Scraper(bool fScraperStandalone) if(dir.path().filename() != "Manifest.csv.gz" && dir.path().filename() != "BeaconList.csv.gz" && dir.path().filename() != "Stats.csv.gz" + && dir.path().filename() != "ConvergedStats.csv.gz" && fs::is_regular_file(dir)) { entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().string()); @@ -261,9 +262,22 @@ void Scraper(bool fScraperStandalone) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; - // Cull CScraperManifests. - //ScraperDeleteCScraperManifests(); - ScraperConstructConvergedManifest(); + ConvergedManifest StructConvergedManifest; + BeaconMap mBeaconMap; + + //ScraperConstructConvergedManifest also culls old CScraperManifests. + if (ScraperConstructConvergedManifest(StructConvergedManifest)) + { + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + + _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "Scraper", "StoreStats error occurred"); + else + _log(INFO, "Scraper", "Stored converged stats."); + } } } @@ -285,9 +299,22 @@ void NeuralNetwork() // These items are only run in this thread if not handled by the Scraper() thread. if (!fScraperActive) { - // Currently just cull outdated CScraperManifests received - //ScraperDeleteCScraperManifests(); - ScraperConstructConvergedManifest(); + ConvergedManifest StructConvergedManifest; + BeaconMap mBeaconMap; + + //ScraperConstructConvergedManifest also culls old CScraperManifests. + if(ScraperConstructConvergedManifest(StructConvergedManifest)) + { + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + + _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "Scraper", "StoreStats error occurred"); + else + _log(INFO, "Scraper", "Stored converged stats."); + } } // Use the same sleep interval as the scraper. This defaults to 60 seconds. @@ -1385,6 +1412,100 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi +bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats) +{ + boostio::basic_array_source input_source(&ProjectData[0], ProjectData.size()); + boostio::stream> ingzss(input_source); + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzss); + + std::vector vXML; + + // Lets vector the user blocks + std::string line; + double dProjectTC = 0.0; + double dProjectRAT = 0.0; + double dProjectRAC = 0.0; + while (std::getline(in, line)) + { + if(line[0] == '#') + continue; + + std::vector fields; + boost::split(fields, line, boost::is_any_of(","), boost::token_compress_on); + + if(fields.size() < 4) + continue; + + ScraperObjectStats statsentry = {}; + + const std::string& sTC = fields[0]; + const std::string& sRAT = fields[1]; + const std::string& sRAC = fields[2]; + const std::string& cpid = fields[3]; + + // Replace blank strings with zeros. + statsentry.statsvalue.dTC = (sTC.empty()) ? 0.0 : std::stod(sTC); + statsentry.statsvalue.dRAT = (sRAT.empty()) ? 0.0 : std::stod(sRAT); + statsentry.statsvalue.dRAC = (sRAC.empty()) ? 0.0 : std::stod(sRAC); + // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. + + statsentry.statskey.objecttype = byCPIDbyProject; + statsentry.statskey.objectID = project + "," + cpid; + + // Insert stats entry into map by the key. + mScraperStats[statsentry.statskey] = statsentry; + + // Increment project + dProjectTC += statsentry.statsvalue.dTC; + dProjectRAT += statsentry.statsvalue.dRAT; + dProjectRAC += statsentry.statsvalue.dRAC; + } + + _log(INFO, "LoadProjectObjectToStatsByCPID", "There are " + std::to_string(mScraperStats.size()) + " CPID entries for " + project); + + // The mScraperStats here is scoped to only this project so we do not need project filtering here. + ScraperStats::iterator entry; + + for (auto const& entry : mScraperStats) + { + ScraperObjectStats statsentry; + + statsentry.statskey = entry.first; + statsentry.statsvalue.dTC = entry.second.statsvalue.dTC; + statsentry.statsvalue.dRAT = entry.second.statsvalue.dRAT; + statsentry.statsvalue.dRAC = entry.second.statsvalue.dRAC; + statsentry.statsvalue.dMag = MagRound(entry.second.statsvalue.dRAC / dProjectRAC * projectmag); + + // Update map entry with the magnitude. + mScraperStats[statsentry.statskey] = statsentry; + } + + // Due to rounding to MAG_ROUND, the actual total project magnitude will not be exactly projectmag, + // but it should be very close. Roll up project statistics. + ScraperObjectStats ProjectStatsEntry = {}; + + ProjectStatsEntry.statskey.objecttype = byProject; + ProjectStatsEntry.statskey.objectID = project; + + for (auto const& entry : mScraperStats) + { + ProjectStatsEntry.statsvalue.dTC += entry.second.statsvalue.dTC; + ProjectStatsEntry.statsvalue.dRAT += entry.second.statsvalue.dRAT; + ProjectStatsEntry.statsvalue.dRAC += entry.second.statsvalue.dRAC; + ProjectStatsEntry.statsvalue.dMag += entry.second.statsvalue.dMag; + } + + // Insert project level map entry. + mScraperStats[ProjectStatsEntry.statskey] = ProjectStatsEntry; + + return true; +} + + + @@ -1429,9 +1550,9 @@ ScraperStats GetScraperStatsByConsensusBeaconList() LoadProjectFileToStatsByCPID(project, file, dMagnitudePerProject, Consensus.mBeaconMap, mProjectScraperStats); // Insert into overall map. - for (auto const& entry : mProjectScraperStats) + for (auto const& entry2 : mProjectScraperStats) { - mScraperStats[entry.first] = entry.second; + mScraperStats[entry2.first] = entry2.second; } } } @@ -1490,6 +1611,94 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } +ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConvergedManifest) +{ + _log(INFO, "GetScraperStatsByConvergedManifest", "Beginning stats processing."); + + // Enumerate the count of active projects from the converged manifest. The part 0, which + // is the beacon list, is not a project, which is why there is a -1. + unsigned int nActiveProjects = StructConvergedManifest.ConvergedManifestPartsMap.size() - 1; + _log(INFO, "GetScraperStatsByConvergedManifest", "Number of active projects in converged manifest = " + std::to_string(nActiveProjects)); + + double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; + + //Get the Consensus Beacon map and initialize mScraperStats. + BeaconMap mBeaconMap; + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + + ScraperStats mScraperStats; + + for (auto entry = StructConvergedManifest.ConvergedManifestPartsMap.begin(); entry != StructConvergedManifest.ConvergedManifestPartsMap.end(); ++entry) + { + std::string project = entry->first; + ScraperStats mProjectScraperStats; + + // Do not process the BeaconList itself as a project stats file. + if(project != "BeaconList") + { + _log(INFO, "GetScraperStatsByConvergedManifest", "Processing stats for project: " + project); + + LoadProjectObjectToStatsByCPID(project, entry->second, dMagnitudePerProject, mBeaconMap, mProjectScraperStats); + + // Insert into overall map. + for (auto const& entry2 : mProjectScraperStats) + { + mScraperStats[entry2.first] = entry2.second; + } + } + } + + // Now are are going to cut across projects and group by CPID. + + //Also track the network wide rollup. + ScraperObjectStats NetworkWideStatsEntry = {}; + + NetworkWideStatsEntry.statskey.objecttype = NetworkWide; + // ObjectID is blank string for network-wide. + NetworkWideStatsEntry.statskey.objectID = ""; + + for (auto const& beaconentry : mBeaconMap) + { + ScraperObjectStats CPIDStatsEntry = {}; + + CPIDStatsEntry.statskey.objecttype = byCPID; + CPIDStatsEntry.statskey.objectID = beaconentry.first; + + for (auto const& innerentry : mScraperStats) + { + // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, + // otherwise dimension mixing will result. + + std::string objectID = innerentry.first.objectID; + + std::size_t found = objectID.find(CPIDStatsEntry.statskey.objectID); + + if (innerentry.first.objecttype == byCPIDbyProject && found!=std::string::npos) + { + CPIDStatsEntry.statsvalue.dTC += innerentry.second.statsvalue.dTC; + CPIDStatsEntry.statsvalue.dRAT += innerentry.second.statsvalue.dRAT; + CPIDStatsEntry.statsvalue.dRAC += innerentry.second.statsvalue.dRAC; + CPIDStatsEntry.statsvalue.dMag += innerentry.second.statsvalue.dMag; + } + } + + // Insert the byCPID entry into the overall map. + mScraperStats[CPIDStatsEntry.statskey] = CPIDStatsEntry; + + // Increement the network wide stats. + NetworkWideStatsEntry.statsvalue.dTC += CPIDStatsEntry.statsvalue.dTC; + NetworkWideStatsEntry.statsvalue.dRAT += CPIDStatsEntry.statsvalue.dRAT; + NetworkWideStatsEntry.statsvalue.dRAC += CPIDStatsEntry.statsvalue.dRAC; + NetworkWideStatsEntry.statsvalue.dMag += CPIDStatsEntry.statsvalue.dMag; + } + + // Insert the (single) network-wide entry into the overall map. + mScraperStats[NetworkWideStatsEntry.statskey] = NetworkWideStatsEntry; + + _log(INFO, "GetScraperStatsByConsensusBeaconList", "Completed stats processing"); + + return mScraperStats; +} /*********************** @@ -1708,8 +1917,8 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) return true; } - -bool ScraperConstructConvergedManifest() +// ------------------------------------ This an out parameter. +bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifest) { bool bConvergenceSuccessful = false; @@ -1790,6 +1999,55 @@ bool ScraperConstructConvergedManifest() } } + if (bConvergenceSuccessful) + { + // Select agreed upon (converged) CScraper manifest based on converged hash. + auto pair = CScraperManifest::mapManifest.find(convergence->second.second); + const CScraperManifest& manifest = *pair->second; + + // Fill out the ConvergedManifest structure. Note this assumes one-to-one part to project statistics BLOB. Needs to + // be fixed for more than one part per BLOB. This is easy in this case, because it is all from/referring to one manifest. + + StructConvergedManifest.nContentHash = convergence->first; + StructConvergedManifest.ConsensusBlock = manifest.ConsensusBlock; + StructConvergedManifest.timestamp = GetAdjustedTime(); + StructConvergedManifest.bByParts = false; + + int iPartNum = 0; + CDataStream ss(SER_NETWORK,1); + WriteCompactSize(ss, manifest.vParts.size()); + uint256 nContentHashCheck; + + for(const auto& iter : manifest.vParts) + { + std::string sProject; + + if (iPartNum == 0) + sProject = "BeaconList"; + else + sProject = manifest.projects[iPartNum-1].project; + + // Copy the parts data into the map keyed by project. + StructConvergedManifest.ConvergedManifestPartsMap.insert(std::make_pair(sProject, iter->data)); + + // Serialize the hash to doublecheck the content hash. + ss << iter->hash; + + iPartNum++; + } + ss << StructConvergedManifest.ConsensusBlock; + + nContentHashCheck = Hash(ss.begin(), ss.end()); + + if (nContentHashCheck != StructConvergedManifest.nContentHash) + { + bConvergenceSuccessful = false; + _log(ERROR, "ScraperConstructConvergedManifest", "Selected Converged Manifest content hash check failed! nContentHashCheck = " + + nContentHashCheck.GetHex() + " and nContentHash = " + StructConvergedManifest.nContentHash.GetHex()); + } + } + + // TODO: Write the part level convergence routine. The above will only work reasonably well if // SCRAPER_CMANIFEST_RETAIN_NONCURRENT = true (which keeps a history of whole manifests around, and // SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES = false (which only includes current files in the manifests). @@ -1798,7 +2056,6 @@ bool ScraperConstructConvergedManifest() // the only additional overhead is the map entry and fields at the CScraperManifest level, which is small compared to the // parts themselves. - if(!bConvergenceSuccessful) _log(INFO, "ScraperConstructConvergedManifest", "No convergence on manifests by content at the manifest level."); @@ -1908,6 +2165,51 @@ mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests() +// ---------------------------------------------- In ---------------------------------------- Out +bool LoadBeaconListFromConvergedManifest(ConvergedManifest& StructConvergedManifest, BeaconMap& mBeaconMap) +{ + // Find the beacon list. + auto iter = StructConvergedManifest.ConvergedManifestPartsMap.find("BeaconList"); + + boostio::basic_array_source input_source(&iter->second[0], iter->second.size()); + boostio::stream> ingzss(input_source); + + boostio::filtering_istream in; + in.push(boostio::gzip_decompressor()); + in.push(ingzss); + + std::string line; + + int64_t ntimestamp; + + // Header -- throw away. + std::getline(in, line); + + while (std::getline(in, line)) + { + BeaconEntry LoadEntry; + std::string key; + + std::vector vline = split(line, ","); + + key = vline[0]; + + std::istringstream sstimestamp(vline[1]); + sstimestamp >> ntimestamp; + LoadEntry.timestamp = ntimestamp; + + LoadEntry.value = vline[2]; + + mBeaconMap[key] = LoadEntry; + } + + _log(INFO, "LoadBeaconListFromConvergedManifest", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); + + return true; +} + + + bool ScraperDeleteCScraperManifest(uint256 nManifestHash) { diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index e97b7ebc5e..549a1118e7 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include //#include @@ -130,6 +131,22 @@ typedef std::multimap, greater > mCSMan // See the ScraperID typedef above. typedef std::map mmCSManifestsBinnedByScraper; +// -------------- Project ---- Converged Part +typedef std::map mConvergedManifestParts; +// Note that this IS a copy not a pointer. Since manifests and parts can be deleted because of aging rules, +// it is dangerous to save memory and point to the actual part objects themselves. + +struct ConvergedManifest +{ + uint256 nContentHash; + uint256 ConsensusBlock; + int64_t timestamp; + bool bByParts; + + mConvergedManifestParts ConvergedManifestPartsMap; +}; + + struct ScraperObjectStatsKey { statsobjecttype objecttype; @@ -196,6 +213,7 @@ void _nntester(logattribute eType, const std::string& sCall, const std::string& bool ScraperDirectorySanity(); bool StoreBeaconList(const fs::path& file); bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap); +bool LoadBeaconListFromConvergedManifest(ConvergedManifest& StructConvergedManifest, BeaconMap& mBeaconMap); std::vector split(const std::string& s, const std::string& delim); extern AppCacheSection ReadCacheSection(const std::string& section); uint256 GetFileHash(const fs::path& inputfile); @@ -206,7 +224,9 @@ bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry); unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry); bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry); ScraperStats GetScraperStatsByConsensusBeaconList(); +ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConvergedManifest); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); +bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); bool IsScraperAuthorizedToBroadcastManifests(); @@ -214,7 +234,7 @@ bool ScraperSendFileManifestContents(std::string CManifestName); mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper(); mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests(); bool ScraperDeleteCScraperManifest(uint256 nManifestHash); -bool ScraperConstructConvergedManifest(); +bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifest); double MagRound(double dMag) { From 7d3b516798a0685554d9e39627c9748a965ae2a0 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 21 Dec 2018 06:41:48 +0100 Subject: [PATCH 070/359] Fix curl link errors. --- configure.ac | 2 +- src/Makefile.am | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 548b2b942d..6f16ea08c5 100755 --- a/configure.ac +++ b/configure.ac @@ -926,7 +926,7 @@ if test x$use_pkgconfig = xyes; then [ PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)]) PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)]) - PKG_CHECK_MODULES([libcurl], [libcurl],,[AC_MSG_ERROR(libcurl not found.)]) + PKG_CHECK_MODULES([CURL], [libcurl],,[AC_MSG_ERROR(libcurl not found.)]) if test x$use_qr != xno; then BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) fi diff --git a/src/Makefile.am b/src/Makefile.am index 5cfe79b2c3..6f7c56cbe7 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,9 +4,9 @@ DIST_SUBDIRS = univalue -AM_LDFLAGS = ${libcurl_LIBS} $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) +AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) -AM_CPPFLAGS = ${libcurl_CFLAGS} $(HARDENED_CPPFLAGS) -DSTATICLIB -DCURL_STATICLIB -DMINIUPNP_STATICLIB +AM_CPPFLAGS = $(HARDENED_CPPFLAGS) -DSTATICLIB -DCURL_STATICLIB -DMINIUPNP_STATICLIB EXTRA_LIBRARIES = if EMBEDDED_UNIVALUE @@ -245,7 +245,7 @@ gridcoinresearchd_LDADD = \ $(LIBLEVELDB_SSE42) \ $(LIBMEMENV) -gridcoinresearchd_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) +gridcoinresearchd_LDADD += $(CURL_LIBS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) if TARGET_WINDOWS gridcoinresearchd_SOURCES += gridcoinresearchd-res.rc From 8a5905654c7dd581ad1b5dbe1cf621aa40d6b7cd Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Fri, 21 Dec 2018 12:12:49 -0500 Subject: [PATCH 071/359] Update Makefile.am --- src/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 6f7c56cbe7..36ed935d8b 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,9 +4,9 @@ DIST_SUBDIRS = univalue -AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) +AM_LDFLAGS = ${libcurl_LIBS} $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) -AM_CPPFLAGS = $(HARDENED_CPPFLAGS) -DSTATICLIB -DCURL_STATICLIB -DMINIUPNP_STATICLIB +AM_CPPFLAGS = ${libcurl_CFLAGS} $(HARDENED_CPPFLAGS) -DSTATICLIB -DCURL_STATICLIB -DMINIUPNP_STATICLIB EXTRA_LIBRARIES = if EMBEDDED_UNIVALUE From ab9ce230e62ad26b5de14042343e6dea757864ff Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Fri, 21 Dec 2018 12:13:51 -0500 Subject: [PATCH 072/359] Update Makefile.am --- src/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index 36ed935d8b..d718ea934c 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -245,7 +245,7 @@ gridcoinresearchd_LDADD = \ $(LIBLEVELDB_SSE42) \ $(LIBMEMENV) -gridcoinresearchd_LDADD += $(CURL_LIBS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(CURL_LIBS) $(LIBZIP_LIBS) +gridcoinresearchd_LDADD += $(CURL_LIBS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(LIBZIP_LIBS) if TARGET_WINDOWS gridcoinresearchd_SOURCES += gridcoinresearchd-res.rc From 2d221b54e131b7fd6a1ce7d3da991a544a6ec75a Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 21 Dec 2018 12:18:05 -0500 Subject: [PATCH 073/359] Implementation of primitive version of SB Core data Also refactored stats generation to reduce duplicate code --- src/ScraperProxy/scraper.cpp | 257 +++++++++++++++++++++-------------- src/ScraperProxy/scraper.h | 9 ++ 2 files changed, 162 insertions(+), 104 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 4960cd438c..0c4ded10a7 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -261,24 +261,33 @@ void Scraper(bool fScraperStandalone) } nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; + } - ConvergedManifest StructConvergedManifest; - BeaconMap mBeaconMap; + // Construct Converged Manifest and SB Core (this is here during development only.) - //ScraperConstructConvergedManifest also culls old CScraperManifests. - if (ScraperConstructConvergedManifest(StructConvergedManifest)) - { - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + ConvergedManifest StructConvergedManifest; + BeaconMap mBeaconMap; + std::string sSBCoreData; - _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + //ScraperConstructConvergedManifest also culls old CScraperManifests. + if (ScraperConstructConvergedManifest(StructConvergedManifest)) + { + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "Scraper", "StoreStats error occurred"); - else - _log(INFO, "Scraper", "Stored converged stats."); - } + _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "Scraper", "StoreStats error occurred"); + else + _log(INFO, "Scraper", "Stored converged stats."); + + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + + if (fDebug) + _log(INFO, "Scraper", "SB Core Data\n" + sSBCoreData); } + } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -301,6 +310,7 @@ void NeuralNetwork() { ConvergedManifest StructConvergedManifest; BeaconMap mBeaconMap; + std::string sSBCoreData; //ScraperConstructConvergedManifest also culls old CScraperManifests. if(ScraperConstructConvergedManifest(StructConvergedManifest)) @@ -314,6 +324,12 @@ void NeuralNetwork() _log(ERROR, "Scraper", "StoreStats error occurred"); else _log(INFO, "Scraper", "Stored converged stats."); + + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + + if (fDebug) + _log(INFO, "Scraper", "SB Core Data\n" + sSBCoreData); + } } @@ -1249,7 +1265,7 @@ bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats) _log(INFO, "StoreStats", "Started processing " + file.string()); // Header. - stream << "StatsType," << "Project," << "CPID," << "TC," << "RAT," << "RAC," << "Mag\n"; + stream << "StatsType," << "Project," << "CPID," << "TC," << "RAT," << "RAC," << "AvgRAC," << "Mag\n"; for (auto const& entry : mScraperStats) { @@ -1285,6 +1301,7 @@ bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats) + std::to_string(entry.second.statsvalue.dTC) + "," + std::to_string(entry.second.statsvalue.dRAT) + "," + std::to_string(entry.second.statsvalue.dRAC) + "," + + std::to_string(entry.second.statsvalue.dAvgRAC) + "," + std::to_string(entry.second.statsvalue.dMag) + "," + "\n"; stream << sScraperStatsEntry; @@ -1323,91 +1340,14 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi in.push(boostio::gzip_decompressor()); in.push(ingzfile); + // TODO implement file error handling bool bcomplete = false; bool bfileerror = false; std::vector vXML; - // Lets vector the user blocks - std::string line; - double dProjectTC = 0.0; - double dProjectRAT = 0.0; - double dProjectRAC = 0.0; - while (std::getline(in, line)) - { - if(line[0] == '#') - continue; - - std::vector fields; - boost::split(fields, line, boost::is_any_of(","), boost::token_compress_on); - - if(fields.size() < 4) - continue; - - ScraperObjectStats statsentry = {}; - - const std::string& sTC = fields[0]; - const std::string& sRAT = fields[1]; - const std::string& sRAC = fields[2]; - const std::string& cpid = fields[3]; - - // Replace blank strings with zeros. - statsentry.statsvalue.dTC = (sTC.empty()) ? 0.0 : std::stod(sTC); - statsentry.statsvalue.dRAT = (sRAT.empty()) ? 0.0 : std::stod(sRAT); - statsentry.statsvalue.dRAC = (sRAC.empty()) ? 0.0 : std::stod(sRAC); - // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. - - statsentry.statskey.objecttype = byCPIDbyProject; - statsentry.statskey.objectID = project + "," + cpid; - - // Insert stats entry into map by the key. - mScraperStats[statsentry.statskey] = statsentry; - - // Increment project - dProjectTC += statsentry.statsvalue.dTC; - dProjectRAT += statsentry.statsvalue.dRAT; - dProjectRAC += statsentry.statsvalue.dRAC; - } - - ingzfile.close(); - - _log(INFO, "LoadProjectFileToStatsByCPID", "There are " + std::to_string(mScraperStats.size()) + " CPID entries for " + project); - - // The mScraperStats here is scoped to only this project so we do not need project filtering here. - ScraperStats::iterator entry; - - for (auto const& entry : mScraperStats) - { - ScraperObjectStats statsentry; - - statsentry.statskey = entry.first; - statsentry.statsvalue.dTC = entry.second.statsvalue.dTC; - statsentry.statsvalue.dRAT = entry.second.statsvalue.dRAT; - statsentry.statsvalue.dRAC = entry.second.statsvalue.dRAC; - statsentry.statsvalue.dMag = MagRound(entry.second.statsvalue.dRAC / dProjectRAC * projectmag); - - // Update map entry with the magnitude. - mScraperStats[statsentry.statskey] = statsentry; - } + bool bResult = ProcessProjectStatsFromStreamByCPID(project, in, projectmag, mBeaconMap, mScraperStats); - // Due to rounding to MAG_ROUND, the actual total project magnitude will not be exactly projectmag, - // but it should be very close. Roll up project statistics. - ScraperObjectStats ProjectStatsEntry = {}; - - ProjectStatsEntry.statskey.objecttype = byProject; - ProjectStatsEntry.statskey.objectID = project; - - for (auto const& entry : mScraperStats) - { - ProjectStatsEntry.statsvalue.dTC += entry.second.statsvalue.dTC; - ProjectStatsEntry.statsvalue.dRAT += entry.second.statsvalue.dRAT; - ProjectStatsEntry.statsvalue.dRAC += entry.second.statsvalue.dRAC; - ProjectStatsEntry.statsvalue.dMag += entry.second.statsvalue.dMag; - } - - // Insert project level map entry. - mScraperStats[ProjectStatsEntry.statskey] = ProjectStatsEntry; - - return true; + return bResult; } @@ -1421,14 +1361,22 @@ bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerialize in.push(boostio::gzip_decompressor()); in.push(ingzss); + bool bResult = ProcessProjectStatsFromStreamByCPID(project, in, projectmag, mBeaconMap, mScraperStats); + + return bResult; +} + + + +bool ProcessProjectStatsFromStreamByCPID(const std::string& project, boostio::filtering_istream& sUncompressedIn, + const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats) +{ std::vector vXML; // Lets vector the user blocks std::string line; - double dProjectTC = 0.0; - double dProjectRAT = 0.0; double dProjectRAC = 0.0; - while (std::getline(in, line)) + while (std::getline(sUncompressedIn, line)) { if(line[0] == '#') continue; @@ -1450,6 +1398,8 @@ bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerialize statsentry.statsvalue.dTC = (sTC.empty()) ? 0.0 : std::stod(sTC); statsentry.statsvalue.dRAT = (sRAT.empty()) ? 0.0 : std::stod(sRAT); statsentry.statsvalue.dRAC = (sRAC.empty()) ? 0.0 : std::stod(sRAC); + // At the individual (byCPIDbyProject) level the AvgRAC is the same as the RAC. + statsentry.statsvalue.dAvgRAC = statsentry.statsvalue.dRAC; // Mag is dealt with on the second pass... so is left at 0.0 on the first pass. statsentry.statskey.objecttype = byCPIDbyProject; @@ -1459,8 +1409,6 @@ bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerialize mScraperStats[statsentry.statskey] = statsentry; // Increment project - dProjectTC += statsentry.statsvalue.dTC; - dProjectRAT += statsentry.statsvalue.dRAT; dProjectRAC += statsentry.statsvalue.dRAC; } @@ -1477,6 +1425,8 @@ bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerialize statsentry.statsvalue.dTC = entry.second.statsvalue.dTC; statsentry.statsvalue.dRAT = entry.second.statsvalue.dRAT; statsentry.statsvalue.dRAC = entry.second.statsvalue.dRAC; + // As per the above the individual (byCPIDbyProject) level the AvgRAC is the same as the RAC. + statsentry.statsvalue.dAvgRAC = entry.second.statsvalue.dAvgRAC; statsentry.statsvalue.dMag = MagRound(entry.second.statsvalue.dRAC / dProjectRAC * projectmag); // Update map entry with the magnitude. @@ -1490,21 +1440,26 @@ bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerialize ProjectStatsEntry.statskey.objecttype = byProject; ProjectStatsEntry.statskey.objectID = project; + unsigned int nCPIDCount = 0; for (auto const& entry : mScraperStats) { ProjectStatsEntry.statsvalue.dTC += entry.second.statsvalue.dTC; ProjectStatsEntry.statsvalue.dRAT += entry.second.statsvalue.dRAT; ProjectStatsEntry.statsvalue.dRAC += entry.second.statsvalue.dRAC; ProjectStatsEntry.statsvalue.dMag += entry.second.statsvalue.dMag; + + nCPIDCount++; } + //Compute AvgRAC for project across CPIDs and set. + (nCPIDCount > 0) ? ProjectStatsEntry.statsvalue.dAvgRAC = ProjectStatsEntry.statsvalue.dRAC / nCPIDCount : ProjectStatsEntry.statsvalue.dAvgRAC = 0.0; + // Insert project level map entry. mScraperStats[ProjectStatsEntry.statskey] = ProjectStatsEntry; return true; -} - +} @@ -1567,6 +1522,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() // ObjectID is blank string for network-wide. NetworkWideStatsEntry.statskey.objectID = ""; + unsigned int nCPIDProjectCount = 0; for (auto const& beaconentry : Consensus.mBeaconMap) { ScraperObjectStats CPIDStatsEntry = {}; @@ -1574,6 +1530,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() CPIDStatsEntry.statskey.objecttype = byCPID; CPIDStatsEntry.statskey.objectID = beaconentry.first; + unsigned int nProjectCount = 0; for (auto const& innerentry : mScraperStats) { // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, @@ -1589,9 +1546,15 @@ ScraperStats GetScraperStatsByConsensusBeaconList() CPIDStatsEntry.statsvalue.dRAT += innerentry.second.statsvalue.dRAT; CPIDStatsEntry.statsvalue.dRAC += innerentry.second.statsvalue.dRAC; CPIDStatsEntry.statsvalue.dMag += innerentry.second.statsvalue.dMag; + + nProjectCount++; + nCPIDProjectCount++; } } + // Compute CPID AvgRAC across the projects for that CPID and set. + (nProjectCount > 0) ? CPIDStatsEntry.statsvalue.dAvgRAC = CPIDStatsEntry.statsvalue.dRAC / nProjectCount : CPIDStatsEntry.statsvalue.dAvgRAC = 0.0; + // Insert the byCPID entry into the overall map. mScraperStats[CPIDStatsEntry.statskey] = CPIDStatsEntry; @@ -1602,6 +1565,9 @@ ScraperStats GetScraperStatsByConsensusBeaconList() NetworkWideStatsEntry.statsvalue.dMag += CPIDStatsEntry.statsvalue.dMag; } + // Compute Network AvgRAC across all ByCPIDByProject elements and set. + (nCPIDProjectCount > 0) ? NetworkWideStatsEntry.statsvalue.dAvgRAC = NetworkWideStatsEntry.statsvalue.dRAC / nCPIDProjectCount : NetworkWideStatsEntry.statsvalue.dAvgRAC = 0.0; + // Insert the (single) network-wide entry into the overall map. mScraperStats[NetworkWideStatsEntry.statskey] = NetworkWideStatsEntry; @@ -1657,6 +1623,7 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg // ObjectID is blank string for network-wide. NetworkWideStatsEntry.statskey.objectID = ""; + unsigned int nCPIDProjectCount = 0; for (auto const& beaconentry : mBeaconMap) { ScraperObjectStats CPIDStatsEntry = {}; @@ -1664,6 +1631,7 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg CPIDStatsEntry.statskey.objecttype = byCPID; CPIDStatsEntry.statskey.objectID = beaconentry.first; + unsigned int nProjectCount = 0; for (auto const& innerentry : mScraperStats) { // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, @@ -1679,9 +1647,15 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg CPIDStatsEntry.statsvalue.dRAT += innerentry.second.statsvalue.dRAT; CPIDStatsEntry.statsvalue.dRAC += innerentry.second.statsvalue.dRAC; CPIDStatsEntry.statsvalue.dMag += innerentry.second.statsvalue.dMag; + + nProjectCount++; + nCPIDProjectCount++; } } + // Compute CPID AvgRAC across the projects for that CPID and set. + (nProjectCount > 0) ? CPIDStatsEntry.statsvalue.dAvgRAC = CPIDStatsEntry.statsvalue.dRAC / nProjectCount : CPIDStatsEntry.statsvalue.dAvgRAC = 0.0; + // Insert the byCPID entry into the overall map. mScraperStats[CPIDStatsEntry.statskey] = CPIDStatsEntry; @@ -1692,10 +1666,13 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg NetworkWideStatsEntry.statsvalue.dMag += CPIDStatsEntry.statsvalue.dMag; } + // Compute Network AvgRAC across all ByCPIDByProject elements and set. + (nCPIDProjectCount > 0) ? NetworkWideStatsEntry.statsvalue.dAvgRAC = NetworkWideStatsEntry.statsvalue.dRAC / nCPIDProjectCount : NetworkWideStatsEntry.statsvalue.dAvgRAC = 0.0; + // Insert the (single) network-wide entry into the overall map. mScraperStats[NetworkWideStatsEntry.statskey] = NetworkWideStatsEntry; - _log(INFO, "GetScraperStatsByConsensusBeaconList", "Completed stats processing"); + _log(INFO, "GetScraperStatsByConvergedManifest", "Completed stats processing"); return mScraperStats; } @@ -2209,8 +2186,6 @@ bool LoadBeaconListFromConvergedManifest(ConvergedManifest& StructConvergedManif } - - bool ScraperDeleteCScraperManifest(uint256 nManifestHash) { // This deletes a manifest. @@ -2226,6 +2201,80 @@ bool ScraperDeleteCScraperManifest(uint256 nManifestHash) } +/*********************** +* Neural Network * +************************/ + + +std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats) +{ + stringbuilder xmlout; + + xmlout.append(""); + + // The in the SB core data are actually the project level + for (auto const& entry : mScraperStats) + { + if (entry.first.objecttype == byProject) + { + xmlout.append(entry.first.objectID); + xmlout.append(","); + xmlout.fixeddoubleappend(entry.second.statsvalue.dAvgRAC, 0); + xmlout.append(","); + xmlout.fixeddoubleappend(entry.second.statsvalue.dRAC, 0); + xmlout.append(";"); + } + } + + // Find the single network wide NN entry and put in string. + ScraperObjectStatsKey StatsKey; + StatsKey.objecttype = NetworkWide; + StatsKey.objectID = ""; + + const auto iter = mScraperStats.find(StatsKey); + + xmlout.append("NeuralNetwork"); + xmlout.append(","); + xmlout.fixeddoubleappend(iter->second.statsvalue.dAvgRAC, 0); + xmlout.append(","); + xmlout.fixeddoubleappend(iter->second.statsvalue.dRAC, 0); + xmlout.append(";"); + + xmlout.append("btc,0;grc,0;"); + + xmlout.append(""); + + // The in the SB core data are actually at the CPID level. + for (auto const& entry : mScraperStats) + { + if (entry.first.objecttype == byCPID) + { + xmlout.append(entry.first.objectID); + xmlout.append(","); + xmlout.fixeddoubleappend(entry.second.statsvalue.dMag, 0); + xmlout.append(";"); + } + } + + xmlout.append(""); + + std::string sSBCoreData = xmlout.value(); + + _log(INFO, "GenerateSBCoreDataFromScraperStats", "Generated SB Core Data."); + + return sSBCoreData; +} +//*/ + + + + + +/*********************** +* RPC Functions * +************************/ UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp) { diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 549a1118e7..6573ba08cf 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -158,6 +158,7 @@ struct ScraperObjectStatsValue double dTC; double dRAT; double dRAC; + double dAvgRAC; double dMag; }; @@ -227,6 +228,8 @@ ScraperStats GetScraperStatsByConsensusBeaconList(); ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConvergedManifest); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); +bool ProcessProjectStatsFromStreamByCPID(const std::string& project, boostio::filtering_istream& sUncompressedIn, + const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); bool IsScraperAuthorizedToBroadcastManifests(); @@ -235,6 +238,7 @@ mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper(); mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests(); bool ScraperDeleteCScraperManifest(uint256 nManifestHash); bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifest); +std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats); double MagRound(double dMag) { @@ -740,6 +744,11 @@ class stringbuilder builtstring << value; } + void fixeddoubleappend(double value, unsigned int precision) + { + builtstring << std::fixed << std::setprecision(precision) << value; + } + void cleanappend(const std::string& value) { builtstring << value.substr(1, value.size()); From 44833da1fbb136ebd4f60139b385db491a15f5b3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 21 Dec 2018 14:12:19 -0500 Subject: [PATCH 074/359] Implement some file/stream error checking in ProcessProjectRacFileByCPID. Also some other minor cleanups. --- src/ScraperProxy/scraper.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 0c4ded10a7..d44372b0e6 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -18,7 +18,7 @@ CCriticalSection cs_StructScraperFileManifest; bool WhitelistPopulated(); bool UserpassPopulated(); bool DownloadProjectRacFilesByCPID(); -bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag); +bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag, BeaconConsensus& Consensus); bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); void AuthenticationETagClear(); @@ -586,6 +586,10 @@ bool DownloadProjectRacFilesByCPID() return false; } + // Get a consensus map of Beacons. + BeaconConsensus Consensus = GetConsensusBeaconList(); + _log(INFO, "DownloadProjectRacFiles", "Getting consensus map of Beacons."); + for (const auto& prjs : vwhitelist) { _log(INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.first); @@ -695,7 +699,7 @@ bool DownloadProjectRacFilesByCPID() continue; } - ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag); + ProcessProjectRacFileByCPID(prjs.first, rac_file.string(), sRacETag, Consensus); } // After processing, update global structure with the timestamp of the latest file in the manifest. @@ -717,11 +721,11 @@ bool DownloadProjectRacFilesByCPID() // This version uses a consensus beacon map rather than the teamid to filter statistics. -bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag) +bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag, BeaconConsensus& Consensus) { - // Get a consensus map of Beacons. - BeaconConsensus Consensus = GetConsensusBeaconList(); - + // Set fileerror flag to true until made false by the completion of one successful injection of user stats into stream. + bool bfileerror = true; + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) @@ -740,12 +744,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil std::string gzetagfile = ""; - // If einstein we store different -// if (file.string().find("einstein") != std::string::npos) -// gzetagfile = "einstein_user.csv.gz"; - -// else - gzetagfile = project + "-" + etag + ".csv" + ".gz"; + gzetagfile = project + "-" + etag + ".csv" + ".gz"; std::string gzetagfile_no_path = gzetagfile; // Put path in. @@ -780,13 +779,16 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil << ExtractXML(data, "", "") << "," << cpid << std::endl; + + // If we get here at least once then there is at least one CPID being put in the file. + // So set the bfileerror flag to false. + bfileerror = false; } else builder.append(line); } - // TODO: Error out on stream errors. - /* + // TODO: More error checking on stream errors. if (bfileerror) { _log(CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); @@ -804,7 +806,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::remove(file); return false; - }*/ + } _log(INFO, "ProcessProjectRacFileByCPID", "Finished processing " + file.string()); From ff6c63820817f2bf6c06cf86dcc214517b79ee07 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sat, 22 Dec 2018 07:17:16 +0100 Subject: [PATCH 075/359] Move NN files to a subfolder. --- src/Makefile.am | 4 ++-- src/Makefile.qt.include | 2 +- src/main.cpp | 2 +- src/miner.cpp | 2 +- src/{ => neuralnet}/neuralnet.cpp | 0 src/{ => neuralnet}/neuralnet.h | 0 src/{ => neuralnet}/neuralnet_stub.cpp | 0 src/rpcblockchain.cpp | 2 +- src/rpcmining.cpp | 2 +- src/util.cpp | 2 +- 10 files changed, 8 insertions(+), 8 deletions(-) rename src/{ => neuralnet}/neuralnet.cpp (100%) rename src/{ => neuralnet}/neuralnet.h (100%) rename src/{ => neuralnet}/neuralnet_stub.cpp (100%) diff --git a/src/Makefile.am b/src/Makefile.am index d718ea934c..86cb915926 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -86,7 +86,7 @@ GRIDCOIN_CORE_H = \ main.h \ miner.h \ mruset.h \ - neuralnet.h \ + neuralnet/neuralnet.h \ netbase.h \ net.h \ pbkdf2.h \ @@ -177,7 +177,7 @@ libgridcoin_util_a-version.$(OBJEXT): obj/build.h libgridcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) libgridcoin_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libgridcoin_util_a_SOURCES = $(GRIDCOIN_CORE_CPP) \ - neuralnet_stub.cpp \ + neuralnet/neuralnet_stub.cpp \ $(GRIDCOIN_CORE_H) if TARGET_WINDOWS diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 0b05f47b59..c120cbd1c4 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -334,7 +334,7 @@ qt_libgridcoinqt_a_SOURCES = $(GRIDCOINRESEARCH_QT_CPP) $(GRIDCOINRESEARCH_QT_H) $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(RES_STYLESHEETS) if TARGET_WINDOWS -qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) neuralnet.cpp +qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) neuralnet/neuralnet.cpp qt_libgridcoinqt_a_CXXFLAGS += -DUNICODE endif diff --git a/src/main.cpp b/src/main.cpp index 557079ece5..f51af1b59b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,7 +21,7 @@ #include "boinc.h" #include "beacon.h" #include "miner.h" -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" #include "backup.h" #include "appcache.h" #include "tally.h" diff --git a/src/miner.cpp b/src/miner.cpp index 076581b4f3..cdff8782ca 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -10,7 +10,7 @@ #include "cpid.h" #include "main.h" #include "appcache.h" -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" #include "contract/contract.h" #include "util.h" diff --git a/src/neuralnet.cpp b/src/neuralnet/neuralnet.cpp similarity index 100% rename from src/neuralnet.cpp rename to src/neuralnet/neuralnet.cpp diff --git a/src/neuralnet.h b/src/neuralnet/neuralnet.h similarity index 100% rename from src/neuralnet.h rename to src/neuralnet/neuralnet.h diff --git a/src/neuralnet_stub.cpp b/src/neuralnet/neuralnet_stub.cpp similarity index 100% rename from src/neuralnet_stub.cpp rename to src/neuralnet/neuralnet_stub.cpp diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index fc9d0fd204..d3fc4e1036 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -12,7 +12,7 @@ #include "block.h" #include "txdb.h" #include "beacon.h" -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" #include "backup.h" #include "appcache.h" #include "tally.h" diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 9f62064313..f6f965b997 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -9,7 +9,7 @@ #include "init.h" #include "miner.h" #include "rpcserver.h" -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" #include "global_objects_noui.hpp" using namespace std; diff --git a/src/util.cpp b/src/util.cpp index b064dccabe..4911c7b7e7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -34,7 +34,7 @@ namespace boost { #include #include -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" #ifdef WIN32 #ifdef _MSC_VER From 2b2e1248e6a20cd8910a3572ee4a7d586c72e842 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sat, 22 Dec 2018 10:46:28 +0100 Subject: [PATCH 076/359] Make interface out of the NeuralNet functions. Needs to be test built for Windows. --- src/Makefile.am | 3 + src/Makefile.qt.include | 2 +- src/init.cpp | 3 +- src/main.cpp | 24 +++--- src/miner.cpp | 6 +- src/neuralnet/neuralnet.cpp | 81 ++++++------------ src/neuralnet/neuralnet.h | 138 +++++++++++++++++++++---------- src/neuralnet/neuralnet_stub.cpp | 72 ++++++++-------- src/neuralnet/neuralnet_stub.h | 24 ++++++ src/neuralnet/neuralnet_win.cpp | 65 +++++++++++++++ src/neuralnet/neuralnet_win.h | 25 ++++++ src/rpcblockchain.cpp | 10 +-- src/rpcmining.cpp | 2 +- src/util.cpp | 2 +- 14 files changed, 295 insertions(+), 162 deletions(-) create mode 100644 src/neuralnet/neuralnet_stub.h create mode 100644 src/neuralnet/neuralnet_win.cpp create mode 100644 src/neuralnet/neuralnet_win.h diff --git a/src/Makefile.am b/src/Makefile.am index 86cb915926..f127bd6499 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -87,6 +87,8 @@ GRIDCOIN_CORE_H = \ miner.h \ mruset.h \ neuralnet/neuralnet.h \ + neuralnet/neuralnet_stub.h \ + neuralnet/neuralnet_win.h \ netbase.h \ net.h \ pbkdf2.h \ @@ -178,6 +180,7 @@ libgridcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(GRIDCOIN_INCLUDES) libgridcoin_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libgridcoin_util_a_SOURCES = $(GRIDCOIN_CORE_CPP) \ neuralnet/neuralnet_stub.cpp \ + neuralnet/neuralnet.cpp \ $(GRIDCOIN_CORE_H) if TARGET_WINDOWS diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index c120cbd1c4..1d7ab0f638 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -334,7 +334,7 @@ qt_libgridcoinqt_a_SOURCES = $(GRIDCOINRESEARCH_QT_CPP) $(GRIDCOINRESEARCH_QT_H) $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(RES_STYLESHEETS) if TARGET_WINDOWS -qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) neuralnet/neuralnet.cpp +qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) neuralnet/neuralnet_win.cpp qt_libgridcoinqt_a_CXXFLAGS += -DUNICODE endif diff --git a/src/init.cpp b/src/init.cpp index 4e486dc521..425d8b4770 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -13,6 +13,7 @@ #include "ui_interface.h" #include "tally.h" #include "beacon.h" +#include "neuralnet/neuralnet.h" #include #include @@ -374,7 +375,7 @@ bool AppInit2(ThreadHandlerPtr threads) LogPrintf("Boost Version: %s", s.str()); - //Placeholder: Load Remote CPIDs Here + NN::SetInstance(NN::CreateNeuralNet()); nNodeLifespan = GetArg("-addrlifespan", 7); fUseFastIndex = GetBoolArg("-fastindex", false); diff --git a/src/main.cpp b/src/main.cpp index f51af1b59b..025e86de19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -318,20 +318,20 @@ bool UpdateNeuralNetworkQuorumData() std::string sTimestamp = TimestampToHRDate(superblock_time); std::string data = "" + sAge + "" + consensus_hash + "" + sBlock + "" + sTimestamp + "" + msPrimaryCPID + ""; - NN::ExecuteDotNetStringFunction("SetQuorumData",data); + NN::GetInstance()->ExecuteDotNetStringFunction("SetQuorumData",data); return true; } bool FullSyncWithDPORNodes() { - if(!NN::IsEnabled()) + if(!NN::GetInstance()->IsEnabled()) return false; // 3-30-2016 : First try to get the master database from another neural network node if these conditions occur: // The foreign node is fully synced. The foreign nodes quorum hash matches the supermajority hash. My hash != supermajority hash. double dCurrentPopularity = 0; std::string sCurrentNeuralSupermajorityHash = GetCurrentNeuralNetworkSupermajorityHash(dCurrentPopularity); std::string sMyNeuralHash = ""; - sMyNeuralHash = NN::GetNeuralHash(); + sMyNeuralHash = NN::GetInstance()->GetNeuralHash(); if (!sMyNeuralHash.empty() && !sCurrentNeuralSupermajorityHash.empty() && sMyNeuralHash != sCurrentNeuralSupermajorityHash) { bool bNodeOnline = RequestSupermajorityNeuralData(); @@ -355,7 +355,7 @@ bool FullSyncWithDPORNodes() std::string data = "" + sWhitelist + "" + cpiddata + "" + sAge + "" + consensus_hash + "" + sBlock + "" + sTimestamp + "" + msPrimaryCPID + ""; - NN::SynchronizeDPOR(data); + NN::GetInstance()->SynchronizeDPOR(data); return true; } @@ -4622,7 +4622,7 @@ void GridcoinServices() { // First verify my node has a synced contract std::string contract; - contract = NN::GetNeuralContract(); + contract = NN::GetInstance()->GetNeuralContract(); if (VerifySuperblock(contract, pindexBest)) { AsyncNeuralRequest("quorum","gridcoin",25); @@ -6940,7 +6940,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (neural_request=="neural_data") { - pfrom->PushMessage("ndata_nresp", NN::GetNeuralContract()); + pfrom->PushMessage("ndata_nresp", NN::GetInstance()->GetNeuralContract()); } else if (neural_request=="neural_hash") { @@ -6950,17 +6950,17 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, supercfwd::SendResponse(pfrom,r_hash); } else - pfrom->PushMessage("hash_nresp", NN::GetNeuralHash()); + pfrom->PushMessage("hash_nresp", NN::GetInstance()->GetNeuralHash()); } else if (neural_request=="explainmag") { - neural_response = NN::ExecuteDotNetStringFunction("ExplainMag",neural_request_id); + neural_response = NN::GetInstance()->ExecuteDotNetStringFunction("ExplainMag",neural_request_id); pfrom->PushMessage("expmag_nresp", neural_response); } else if (neural_request=="quorum") { // 7-12-2015 Resolve discrepencies in w nodes to speak to each other - pfrom->PushMessage("quorum_nresp", NN::GetNeuralContract()); + pfrom->PushMessage("quorum_nresp", NN::GetInstance()->GetNeuralContract()); } else if (neural_request=="supercfwdr") { @@ -7077,7 +7077,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { std::string results = ""; //Resolve discrepancies - results = NN::ExecuteDotNetStringFunction("ResolveDiscrepancies",neural_contract); + results = NN::GetInstance()->ExecuteDotNetStringFunction("ResolveDiscrepancies",neural_contract); if (fDebug && !results.empty()) LogPrintf("Quorum Resolution: %s ",results); } @@ -7094,7 +7094,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, std::string results = ""; //Resolve discrepancies LogPrintf("Sync neural network data from supermajority"); - results = NN::ExecuteDotNetStringFunction("ResolveCurrentDiscrepancies",neural_contract); + results = NN::GetInstance()->ExecuteDotNetStringFunction("ResolveCurrentDiscrepancies",neural_contract); if (fDebug && !results.empty()) LogPrintf("Quorum Resolution: %s ",results); // Resume the full DPOR sync at this point now that we have the supermajority data if (results=="SUCCESS") FullSyncWithDPORNodes(); @@ -7688,7 +7688,7 @@ void HarvestCPIDs(bool cleardata) msPrimaryCPID = structcpid.cpid; //Let the Neural Network know what your CPID is so it can be charted: std::string sXML = "PrimaryCPID" + msPrimaryCPID + ""; - std::string sData = NN::ExecuteDotNetStringFunction("WriteKey",sXML); + std::string sData = NN::GetInstance()->ExecuteDotNetStringFunction("WriteKey",sXML); //Try to get a neural RAC report AsyncNeuralRequest("explainmag",msPrimaryCPID,5); } diff --git a/src/miner.cpp b/src/miner.cpp index cdff8782ca..356bc283af 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -998,7 +998,7 @@ namespace supercfwd } void SendResponse(CNode* fromNode, const std::string& req_hash) { - const std::string nn_hash(NN::GetNeuralHash()); + const std::string nn_hash(NN::GetInstance()->GetNeuralHash()); const bool& fDebug10= fDebug; //temporary if(req_hash==sCacheHash) { @@ -1008,7 +1008,7 @@ namespace supercfwd } else if(req_hash==nn_hash) { - std::string nn_data= PackBinarySuperblock(NN::GetNeuralContract()); + std::string nn_data= PackBinarySuperblock(NN::GetInstance()->GetNeuralContract()); if(fDebug10) LogPrintf("supercfwd.SendResponse: %s requested %s, sending our nn binary contract (size %d)",fromNode->addrName,req_hash,nn_data.length()); fromNode->PushMessage("neural", std::string("supercfwdr"), std::move(nn_data)); @@ -1060,7 +1060,7 @@ void AddNeuralContractOrVote(const CBlock &blocknew, MiningCPID &bb) std::string consensus_hash = GetNeuralNetworkSupermajorityHash(popularity); /* Retrive the neural Contract */ - const std::string& sb_contract = NN::GetNeuralContract(); + const std::string& sb_contract = NN::GetInstance()->GetNeuralContract(); const std::string& sb_hash = GetQuorumHash(sb_contract); if(!sb_contract.empty()) diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index a1908799db..470180254d 100644 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -1,67 +1,32 @@ #include "neuralnet.h" -#include "version.h" -#include "sync.h" -#include "util.h" +#include "neuralnet_stub.h" -#include -#include +#if defined(QT_GUI) && defined(WIN32) +#include "neuralnet_win.h" +#endif -#include -#include -#include -#include -#include -#include -#include +using namespace NN; -// Old VB based NeuralNet. -extern std::string qtGetNeuralHash(std::string data); -extern std::string qtGetNeuralContract(std::string data); -extern double qtExecuteGenericFunction(std::string function,std::string data); -extern std::string qtExecuteDotNetStringFunction(std::string function,std::string data); -extern void qtSyncWithDPORNodes(std::string data); -int64_t IsNeural(); - -// While transitioning to dotnet the NeuralNet implementation has been split -// into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. -// After the transition both Win32 implementations can be removed. -namespace NN +namespace { - // Win32 with Qt enabled. - bool IsEnabled() - { - return GetArgument("disableneuralnetwork", "false") == "false"; - } - - std::string GetNeuralVersion() - { - int neural_id = static_cast(IsNeural()); - return std::to_string(CLIENT_VERSION_MINOR) + "." + std::to_string(neural_id); - } - - std::string GetNeuralHash() - { - return qtGetNeuralHash(""); - } - - std::string GetNeuralContract() - { - return qtGetNeuralContract(""); - } + INeuralNetPtr instance; +} - bool SynchronizeDPOR(const std::string& data) - { - qtSyncWithDPORNodes(data); - return true; - } +INeuralNetPtr NN::CreateNeuralNet() +{ +#if defined(QT_GUI) && defined(WIN32) + return std::make_shared(); +#else + return std::make_shared(); +#endif +} - std::string ExecuteDotNetStringFunction(std::string function, std::string data) - { - return qtExecuteDotNetStringFunction(function, data); - } +void NN::SetInstance(const INeuralNetPtr &obj) +{ + instance = obj; +} - int64_t IsNeuralNet() - { - return IsNeural(); - } +INeuralNetPtr NN::GetInstance() +{ + return instance; } diff --git a/src/neuralnet/neuralnet.h b/src/neuralnet/neuralnet.h index 113507fbdc..d6ae4f38ba 100644 --- a/src/neuralnet/neuralnet.h +++ b/src/neuralnet/neuralnet.h @@ -1,70 +1,120 @@ #pragma once #include - -extern std::string qtGetNeuralHash(std::string data); -extern std::string qtGetNeuralContract(std::string data); -extern double qtExecuteGenericFunction(std::string function,std::string data); -extern void qtSyncWithDPORNodes(std::string data); - +#include namespace NN { //! - //! \brief Check is current system supports neural net operations. - //! - //! Validates the currently running system to see if neural network is - //! supported by thte system and not disabled by the user. - //! - //! \note Calling further functions on a disabled neural network is - //! undefined behavior. - //! - //! \return \c true if neural network is enabled, \c false otherwise. + //! \brief NeuralNet interface. //! - bool IsEnabled(); + struct INeuralNet + { + //! + //! \brief Destructor. + //! + virtual ~INeuralNet() = default; + + //! + //! \brief Check is current system supports neural net operations. + //! + //! Validates the currently running system to see if neural network is + //! supported by thte system and not disabled by the user. + //! + //! \note Calling further functions on a disabled neural network is + //! undefined behavior. + //! + //! \return \c true if neural network is enabled, \c false otherwise. + //! + virtual bool IsEnabled() = 0; + + //! + //! \brief Get application neural version. + //! + //! Fetches the application version with the neural network magic suffix + //! (\c 1999) if the neural net is enabled. + //! + //! \return Current application version with proper neural suffix. + //! + virtual std::string GetNeuralVersion() = 0; + + //! + //! \brief Get current neural hash from neural net. + //! + //! \note This is a synchoronous operation. + //! + //! \return Current neural hash. This might be empty if no has has + //! been calculated yet. + //! + virtual std::string GetNeuralHash() = 0; + + //! + //! \brief Get the most recently updated neural network contract. + //! + //! Synchronously queries the neural network process for the current + //! neural contract. + //! + //! \return Most recent neural contract if available. + //! + virtual std::string GetNeuralContract() = 0; + + //! + //! \brief Synchronize DPOR data. + //! + //! Asynchronously asks the neural net to download BOINC statistic files + //! and calculate CPID magnitudes. If called while synchronization is + //! already in progress this will do nothing. + //! + //! \param data CPID and quorum data to pass to the neural net. + //! + virtual bool SynchronizeDPOR(const std::string& data) = 0; + + //! + //! \brief ExecuteDotNetStringFunction + //! \param function Function to execute. + //! \param data Function payload. + //! \return Function call's return string. + //! \todo Replace this with concrete functions. + //! + virtual std::string ExecuteDotNetStringFunction(std::string function, std::string data) = 0; + + virtual int64_t IsNeuralNet() = 0; + }; //! - //! \brief Get application neural version. - //! - //! Fetches the application version with the neural network magic suffix - //! (\c 1999) if the neural net is enabled. - //! - //! \return Current application version with proper neural suffix. + //! \brief INeuralNet smart pointer. //! - std::string GetNeuralVersion(); + typedef std::shared_ptr INeuralNetPtr; //! - //! \brief Get current neural hash from neural net. + //! \brief Neuralnet factory. //! - //! \note This is a synchoronous operation. + //! Evaluates host platform and configuration flags to instantiate an + //! appropriate neuralnet object. //! - //! \return Current neural hash. This might be empty if no has has - //! been calculated yet. + //! \return A new INeuralNet instance. //! - std::string GetNeuralHash(); + INeuralNetPtr CreateNeuralNet(); //! - //! \brief Get the most recently updated neural network contract. + //! \brief Set global neuralnet object. //! - //! Synchronously queries the neural network process for the current - //! neural contract. + //! Sets the global object used for neuralnet access. This should be called + //! during application initialization: //! - //! \return Most recent neural contract if available. + //! \code + //! NN::SetInstance(NN::CreateNeuralNet()); + //! \endcode //! - std::string GetNeuralContract(); - + //! It can also be used to inject mocks in unit tests. //! - //! \brief Synchronize DPOR data. + //! \param obj New global neuralnet instance. //! - //! Asynchronously asks the neural net to download BOINC statistic files - //! and calculate CPID magnitudes. If called while synchronization is - //! already in progress this will do nothing. + void SetInstance(const INeuralNetPtr& obj); + //! - //! \param data CPID and quorum data to pass to the neural net. + //! \brief Get globl neuralnet instance. + //! \return Current global neuralnet instance. //! - bool SynchronizeDPOR(const std::string& data); - - std::string ExecuteDotNetStringFunction(std::string function, std::string data); - - int64_t IsNeuralNet(); + INeuralNetPtr GetInstance(); } diff --git a/src/neuralnet/neuralnet_stub.cpp b/src/neuralnet/neuralnet_stub.cpp index 99b5455b9e..ec677356be 100644 --- a/src/neuralnet/neuralnet_stub.cpp +++ b/src/neuralnet/neuralnet_stub.cpp @@ -1,40 +1,40 @@ +#include "neuralnet_stub.h" + #include -#include "neuralnet.h" -namespace NN +using namespace NN; + +bool NeuralNetStub::IsEnabled() +{ + return false; +} + +std::string NeuralNetStub::GetNeuralVersion() +{ + return "0"; +} + +std::string NeuralNetStub::GetNeuralHash() +{ + return std::string(); +} + +std::string NeuralNetStub::GetNeuralContract() +{ + return std::string(); +} + +bool NeuralNetStub::SynchronizeDPOR(const std::string& data) +{ + return false; +} + +std::string NeuralNetStub::ExecuteDotNetStringFunction(std::string function, std::string data) +{ + return std::string(); +} + +int64_t NeuralNetStub::IsNeuralNet() { - bool IsEnabled() - { - return false; - } - - std::string GetNeuralVersion() - { - return "0"; - } - - std::string GetNeuralHash() - { - return std::string(); - } - - std::string GetNeuralContract() - { - return std::string(); - } - - bool SynchronizeDPOR(const std::string& data) - { - return false; - } - - std::string ExecuteDotNetStringFunction(std::string function, std::string data) - { - return std::string(); - } - - int64_t IsNeuralNet() - { - return 0; - } + return 0; } diff --git a/src/neuralnet/neuralnet_stub.h b/src/neuralnet/neuralnet_stub.h new file mode 100644 index 0000000000..f9c3aa0f30 --- /dev/null +++ b/src/neuralnet/neuralnet_stub.h @@ -0,0 +1,24 @@ +#pragma once + +#include "neuralnet.h" + +namespace NN +{ + //! + //! \brief NeuralNet stub implementation. + //! + //! A neuralnet implementation which does nothing. + //! + class NeuralNetStub : public INeuralNet + { + private: + // Documentation in interface. + bool IsEnabled(); + std::string GetNeuralVersion(); + std::string GetNeuralHash(); + std::string GetNeuralContract(); + bool SynchronizeDPOR(const std::string& data); + std::string ExecuteDotNetStringFunction(std::string function, std::string data); + int64_t IsNeuralNet(); + }; +} diff --git a/src/neuralnet/neuralnet_win.cpp b/src/neuralnet/neuralnet_win.cpp new file mode 100644 index 0000000000..93275896bd --- /dev/null +++ b/src/neuralnet/neuralnet_win.cpp @@ -0,0 +1,65 @@ +#include "neuralnet.h" +#include "version.h" +#include "sync.h" +#include "util.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// Old VB based NeuralNet. +extern std::string qtGetNeuralHash(std::string data); +extern std::string qtGetNeuralContract(std::string data); +extern double qtExecuteGenericFunction(std::string function,std::string data); +extern std::string qtExecuteDotNetStringFunction(std::string function,std::string data); +extern void qtSyncWithDPORNodes(std::string data); +int64_t IsNeural(); + +// While transitioning to dotnet the NeuralNet implementation has been split +// into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. +// After the transition both Win32 implementations can be removed. + +// Win32 with Qt enabled. +bool NeuralNetWin32::IsEnabled() +{ + return GetArgument("disableneuralnetwork", "false") == "false"; +} + +std::string NeuralNetWin32::GetNeuralVersion() +{ + int neural_id = static_cast(IsNeural()); + return std::to_string(CLIENT_VERSION_MINOR) + "." + std::to_string(neural_id); +} + +std::string NeuralNetWin32::GetNeuralHash() +{ + return qtGetNeuralHash(""); +} + +std::string NeuralNetWin32::GetNeuralContract() +{ + return qtGetNeuralContract(""); +} + +bool NeuralNetWin32::SynchronizeDPOR(const std::string& data) +{ + qtSyncWithDPORNodes(data); + return true; +} + +std::string NeuralNetWin32::ExecuteDotNetStringFunction(std::string function, std::string data) +{ + return qtExecuteDotNetStringFunction(function, data); +} + +int64_t NeuralNetWin32::IsNeuralNet() +{ + return IsNeural(); +} diff --git a/src/neuralnet/neuralnet_win.h b/src/neuralnet/neuralnet_win.h new file mode 100644 index 0000000000..f1f425a591 --- /dev/null +++ b/src/neuralnet/neuralnet_win.h @@ -0,0 +1,25 @@ +#pragma once + +#include "neuralnet.h" + +namespace NN +{ + //! + //! \brief Win32 neuralnet implementation. + //! + //! A neuralnet implementation bridge which calls the original .NET + //! implementation for data scraping and processing. + //! + class NeuralNetWin32 : public INeuralNet + { + private: + // Documentation in interface. + bool IsEnabled(); + std::string GetNeuralVersion(); + std::string GetNeuralHash(); + std::string GetNeuralContract(); + bool SynchronizeDPOR(const std::string& data); + std::string ExecuteDotNetStringFunction(std::string function, std::string data); + int64_t IsNeuralNet(); + }; +} diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index d3fc4e1036..18b1acea62 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1358,7 +1358,7 @@ UniValue myneuralhash(const UniValue& params, bool fHelp) UniValue res(UniValue::VOBJ); - std::string myNeuralHash = NN::GetNeuralHash(); + std::string myNeuralHash = NN::GetInstance()->GetNeuralHash(); res.pushKV("My Neural Hash", myNeuralHash.c_str()); @@ -1597,14 +1597,14 @@ UniValue currentcontractaverage(const UniValue& params, bool fHelp) UniValue res(UniValue::VOBJ); - std::string contract = NN::GetNeuralContract(); + std::string contract = NN::GetInstance()->GetNeuralContract(); double out_beacon_count = 0; double out_participant_count = 0; double out_avg = 0; double avg = GetSuperblockAvgMag(contract, out_beacon_count, out_participant_count, out_avg, false, nBestHeight); bool bValid = VerifySuperblock(contract, pindexBest); //Show current contract neural hash - std::string sNeuralHash = NN::GetNeuralHash(); + std::string sNeuralHash = NN::GetInstance()->GetNeuralHash(); std::string neural_hash = GetQuorumHash(contract); res.pushKV("Contract", contract); @@ -2253,8 +2253,8 @@ UniValue testnewcontract(const UniValue& params, bool fHelp) UniValue res(UniValue::VOBJ); - std::string contract = NN::GetNeuralContract(); - std::string myNeuralHash = NN::GetNeuralHash(); + std::string contract = NN::GetInstance()->GetNeuralContract(); + std::string myNeuralHash = NN::GetInstance()->GetNeuralHash(); // Convert to Binary std::string sBin = PackBinarySuperblock(contract); // Hash of current superblock diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index f6f965b997..5fa2f5baa3 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -76,7 +76,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp) obj.pushKV("PopularNeuralHash", neural_hash); obj.pushKV("NeuralPopularity", neural_popularity); //9-19-2015 - CM - obj.pushKV("MyNeuralHash", NN::GetNeuralHash()); + obj.pushKV("MyNeuralHash", NN::GetInstance()->GetNeuralHash()); obj.pushKV("CPID",msPrimaryCPID); diff --git a/src/util.cpp b/src/util.cpp index 4911c7b7e7..8ab3a0b8e9 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1446,7 +1446,7 @@ std::vector split(const std::string& s, const std::string& delim) std::string GetNeuralVersion() { std::string neural_v = "0"; - int64_t neural_id = NN::IsNeuralNet(); + int64_t neural_id = NN::GetInstance()->IsNeuralNet(); neural_v = ToString(CLIENT_VERSION_MINOR) + "." + ToString(neural_id); return neural_v; } From 60709fd5403ece842167b7fd18801fefa096100c Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 22 Dec 2018 15:08:42 -0500 Subject: [PATCH 077/359] Create new files for new NN interface plugin Also add a check for wallet sync at the start of scraper and NN thread init. Fix Windows NN compilation with new NN interface. --- src/Makefile.am | 4 +++ src/ScraperProxy/scraper.cpp | 28 ++++++++++++++++++--- src/neuralnet/neuralnet.cpp | 9 +++++++ src/neuralnet/neuralnet_native.cpp | 40 ++++++++++++++++++++++++++++++ src/neuralnet/neuralnet_native.h | 24 ++++++++++++++++++ src/neuralnet/neuralnet_win.cpp | 7 ++++-- 6 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 src/neuralnet/neuralnet_native.cpp create mode 100644 src/neuralnet/neuralnet_native.h diff --git a/src/Makefile.am b/src/Makefile.am index f127bd6499..b1a3b44cad 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -87,6 +87,7 @@ GRIDCOIN_CORE_H = \ miner.h \ mruset.h \ neuralnet/neuralnet.h \ + neuralnet/neuralnet_native.h \ neuralnet/neuralnet_stub.h \ neuralnet/neuralnet_win.h \ netbase.h \ @@ -138,6 +139,9 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ keystore.cpp \ main.cpp \ miner.cpp \ + neuralnet/neuralnet.cpp \ + neuralnet/neuralnet_native.cpp \ + neuralnet/neuralnet_stub.cpp \ netbase.cpp \ net.cpp \ noui.cpp \ diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index d44372b0e6..d3d886de79 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -135,6 +135,16 @@ void Scraper(bool fScraperStandalone) // The scraper thread loop... while (fScraperStandalone || !fShutdown) { + // Only proceed if wallet is in sync. Check every 5 seconds since no callback is available. + // We do NOT want to filter statistics with an out-of-date beacon list or project whitelist. + while (OutOfSyncByAge()) + { + _log(INFO, "Scraper", "Wallet not in sync. Sleeping for 8 seconds."); + MilliSleep(8000); + } + + _log(INFO, "Scraper", "Wallet is now in sync. Continuing."); + gridcoinrpc data; int64_t sbage = data.sbage(); @@ -305,6 +315,16 @@ void NeuralNetwork() while(!fShutdown) { + // Only proceed if wallet is in sync. Check every 5 seconds since no callback is available. + // We do NOT want to filter statistics with an out-of-date beacon list or project whitelist. + while (OutOfSyncByAge()) + { + _log(INFO, "NeuralNetwork", "Wallet not in sync. Sleeping for 8 seconds."); + MilliSleep(8000); + } + + _log(INFO, "NeuralNetwork", "Wallet is now in sync. Continuing."); + // These items are only run in this thread if not handled by the Scraper() thread. if (!fScraperActive) { @@ -318,17 +338,17 @@ void NeuralNetwork() LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + _log(INFO, "NeuralNetwork", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "Scraper", "StoreStats error occurred"); + _log(ERROR, "NeuralNetwork", "StoreStats error occurred"); else - _log(INFO, "Scraper", "Stored converged stats."); + _log(INFO, "NeuralNetwork", "Stored converged stats."); sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); if (fDebug) - _log(INFO, "Scraper", "SB Core Data\n" + sSBCoreData); + _log(INFO, "NeuralNetwork", "SB Core Data\n" + sSBCoreData); } } diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index 470180254d..c012fc9795 100644 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -1,5 +1,11 @@ #include "neuralnet.h" +#include "neuralnet_native.h" #include "neuralnet_stub.h" +#include "neuralnet_win.h" +#include "util.h" + +extern bool GetBoolArg(const std::string& strArg, bool fDefault); + #if defined(QT_GUI) && defined(WIN32) #include "neuralnet_win.h" @@ -14,6 +20,9 @@ namespace INeuralNetPtr NN::CreateNeuralNet() { + if (GetBoolArg("-usenewnn")) + return std::make_shared(); + #if defined(QT_GUI) && defined(WIN32) return std::make_shared(); #else diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp new file mode 100644 index 0000000000..4d3d77e5e1 --- /dev/null +++ b/src/neuralnet/neuralnet_native.cpp @@ -0,0 +1,40 @@ +#include "neuralnet_native.h" + +#include + +using namespace NN; + +bool NeuralNetNative::IsEnabled() +{ + return false; +} + +std::string NeuralNetNative::GetNeuralVersion() +{ + return "0"; +} + +std::string NeuralNetNative::GetNeuralHash() +{ + return std::string(); +} + +std::string NeuralNetNative::GetNeuralContract() +{ + return std::string(); +} + +bool NeuralNetNative::SynchronizeDPOR(const std::string& data) +{ + return false; +} + +std::string NeuralNetNative::ExecuteDotNetStringFunction(std::string function, std::string data) +{ + return std::string(); +} + +int64_t NeuralNetNative::IsNeuralNet() +{ + return 0; +} diff --git a/src/neuralnet/neuralnet_native.h b/src/neuralnet/neuralnet_native.h new file mode 100644 index 0000000000..0b25e4a0fd --- /dev/null +++ b/src/neuralnet/neuralnet_native.h @@ -0,0 +1,24 @@ +#pragma once + +#include "neuralnet.h" + +namespace NN +{ + //! + //! \brief NeuralNet native implementation. + //! + //! The new native C++ neuralnet implementation that uses the new integrated scraper. + //! + class NeuralNetNative : public INeuralNet + { + private: + // Documentation in interface. + bool IsEnabled(); + std::string GetNeuralVersion(); + std::string GetNeuralHash(); + std::string GetNeuralContract(); + bool SynchronizeDPOR(const std::string& data); + std::string ExecuteDotNetStringFunction(std::string function, std::string data); + int64_t IsNeuralNet(); + }; +} diff --git a/src/neuralnet/neuralnet_win.cpp b/src/neuralnet/neuralnet_win.cpp index 93275896bd..cc7f1d8fbf 100644 --- a/src/neuralnet/neuralnet_win.cpp +++ b/src/neuralnet/neuralnet_win.cpp @@ -1,4 +1,4 @@ -#include "neuralnet.h" +#include "neuralnet_win.h" #include "version.h" #include "sync.h" #include "util.h" @@ -22,6 +22,8 @@ extern std::string qtExecuteDotNetStringFunction(std::string function,std::strin extern void qtSyncWithDPORNodes(std::string data); int64_t IsNeural(); +using namespace NN; + // While transitioning to dotnet the NeuralNet implementation has been split // into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. // After the transition both Win32 implementations can be removed. @@ -29,7 +31,7 @@ int64_t IsNeural(); // Win32 with Qt enabled. bool NeuralNetWin32::IsEnabled() { - return GetArgument("disableneuralnetwork", "false") == "false"; +return GetArgument("disableneuralnetwork", "false") == "false"; } std::string NeuralNetWin32::GetNeuralVersion() @@ -63,3 +65,4 @@ int64_t NeuralNetWin32::IsNeuralNet() { return IsNeural(); } + From a2ac5387ab7bf9c660733b22252d6e9f7b7b0f34 Mon Sep 17 00:00:00 2001 From: TheCharlatan Date: Sun, 23 Dec 2018 00:52:26 +0100 Subject: [PATCH 078/359] Add boost iostreams to depends build system --- build-aux/m4/ax_boost_iostreams.m4 | 116 +++++++++++++++++++++++++++++ build-aux/m4/ax_boost_zlib.m4 | 90 ++++++++++++++++++++++ configure.ac | 5 +- depends/packages/boost.mk | 3 +- depends/packages/curl.mk | 6 +- depends/packages/zlib.mk | 3 +- 6 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 build-aux/m4/ax_boost_iostreams.m4 create mode 100644 build-aux/m4/ax_boost_zlib.m4 diff --git a/build-aux/m4/ax_boost_iostreams.m4 b/build-aux/m4/ax_boost_iostreams.m4 new file mode 100644 index 0000000000..8f27f85456 --- /dev/null +++ b/build-aux/m4/ax_boost_iostreams.m4 @@ -0,0 +1,116 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_boost_iostreams.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_IOSTREAMS +# +# DESCRIPTION +# +# Test for IOStreams library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_IOSTREAMS_LIB) +# +# And sets: +# +# HAVE_BOOST_IOSTREAMS +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 21 + +AC_DEFUN([AX_BOOST_IOSTREAMS], +[ + AC_ARG_WITH([boost-iostreams], + AS_HELP_STRING([--with-boost-iostreams@<:@=special-lib@:>@], + [use the IOStreams library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-iostreams=boost_iostreams-gcc-mt-d-1_33_1 ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_iostreams_lib="" + else + want_boost="yes" + ax_boost_user_iostreams_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::IOStreams library is available, + ax_cv_boost_iostreams, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include + @%:@include + ]], + [[std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0; + ]])], + ax_cv_boost_iostreams=yes, ax_cv_boost_iostreams=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_iostreams" = "xyes"; then + AC_DEFINE(HAVE_BOOST_IOSTREAMS,,[define if the Boost::IOStreams library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_iostreams_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_iostreams*.so* $BOOSTLIBDIR/libboost_iostream*.dylib* $BOOSTLIBDIR/libboost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_iostreams.*\)\.so.*$;\1;' -e 's;^lib\(boost_iostream.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + if test "x$link_iostreams" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_iostreams*.dll* $BOOSTLIBDIR/boost_iostreams*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_iostreams.*\)\.dll.*$;\1;' -e 's;^\(boost_iostreams.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_iostreams_lib boost_iostreams-$ax_boost_user_iostreams_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_IOSTREAMS_LIB="-l$ax_lib"; AC_SUBST(BOOST_IOSTREAMS_LIB) link_iostreams="yes"; break], + [link_iostreams="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_iostreams" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/build-aux/m4/ax_boost_zlib.m4 b/build-aux/m4/ax_boost_zlib.m4 new file mode 100644 index 0000000000..3037a17b19 --- /dev/null +++ b/build-aux/m4/ax_boost_zlib.m4 @@ -0,0 +1,90 @@ +# SYNOPSIS +# +# AX_BOOST_ZLIB +# +# DESCRIPTION +# +# Test for ZLib library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_ZLIB_LIB) +# +# And sets: +# +# HAVE_BOOST_ZLIB +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 21 + +AC_DEFUN([AX_BOOST_ZLIB], +[ + AC_ARG_WITH([boost-zlib], + AS_HELP_STRING([--with-boost-zlib@<:@=special-lib@:>@], + [use the ZLib library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-zlib=boost_zlib-gcc-mt-d-1_33_1 ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_zlib_lib="" + else + want_boost="yes" + ax_boost_user_zlib_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_DEFINE(HAVE_BOOST_ZLIB,,[define if the Boost::zlib library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_zlib_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_zlib*.so* $BOOSTLIBDIR/libboost_iostream*.dylib* $BOOSTLIBDIR/libboost_zlib*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_zlib.*\)\.so.*$;\1;' -e 's;^lib\(boost_iostream.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_zlib.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_ZLIB_LIB="-l$ax_lib"; AC_SUBST(BOOST_ZLIB_LIB) link_zlib="yes"; break], + [link_zlib="no"]) + done + if test "x$link_zlib" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_zlib*.dll* $BOOSTLIBDIR/boost_zlib*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_zlib.*\)\.dll.*$;\1;' -e 's;^\(boost_zlib.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_ZLIB_LIB="-l$ax_lib"; AC_SUBST(BOOST_ZLIB_LIB) link_zlib="yes"; break], + [link_zlib="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_zlib_lib boost_zlib-$ax_boost_user_zlib_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_ZLIB_LIB="-l$ax_lib"; AC_SUBST(BOOST_ZLIB_LIB) link_zlib="yes"; break], + [link_zlib="no"]) + done + + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/configure.ac b/configure.ac index 6f16ea08c5..a08621a9b5 100755 --- a/configure.ac +++ b/configure.ac @@ -758,10 +758,11 @@ dnl Check for boost libs AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) AX_BOOST_SYSTEM AX_BOOST_FILESYSTEM -AX_BOOST_IOSTREAMS AX_BOOST_PROGRAM_OPTIONS AX_BOOST_THREAD AX_BOOST_CHRONO +AX_BOOST_ZLIB +AX_BOOST_IOSTREAMS dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic dnl counter implementations. In 1.63 and later the std::atomic approach is default. @@ -828,7 +829,7 @@ fi if test x$use_boost = xyes; then -BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_IOSTREAMS_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB $BOOST_ZLIB_LIB" +BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_ZLIB_LIB $BOOST_IOSTREAMS_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB $BOOST_ZLIB_LIB" dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index a97621f49b..d1e9fc0f17 100755 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -3,13 +3,14 @@ $(package)_version=1_65_1 $(package)_download_path=https://dl.bintray.com/boostorg/release/1.65.1/source/ $(package)_file_name=$(package)_$($(package)_version).tar.bz2 $(package)_sha256_hash=9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30dcd3be81 +$(package)_dependencies=zlib define $(package)_set_vars $(package)_config_opts_release=variant=release $(package)_config_opts_debug=variant=debug $(package)_dependencies=zlib $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam -$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sZLIB_SOURCE=/home/jco/builds/zlib-1.2.11 -sZLIB_INCLUDE=$(host_prefix)/include -sZLIB_LIBPATH=$(host_prefix)/lib +$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sZLIB_SOURCE=$(host_prefix)/lib/zlib_source -sZLIB_INCLUDE=$(host_prefix)/include -sZLIB_LIBPATH=$(host_prefix)/lib $(package)_config_opts_linux=threadapi=pthread runtime-link=shared $(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static diff --git a/depends/packages/curl.mk b/depends/packages/curl.mk index c5defebe5a..302b6fabe0 100755 --- a/depends/packages/curl.mk +++ b/depends/packages/curl.mk @@ -4,6 +4,7 @@ $(package)_download_path=https://curl.haxx.se/download/ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_sha256_hash=d483b89062832e211c887d7cf1b65c902d591b48c11fe7d174af781681580b41 $(package)_dependencies=openssl + define $(package)_set_vars $(package)_config_opts=--disable-shared $(package)_config_opts+= --enable-static @@ -14,14 +15,15 @@ define $(package)_set_vars $(package)_config_opts_release+=--disable-debug-mode $(package)_config_opts_linux+=--with-pic endef + define $(package)_config_cmds $($(package)_autoconf) endef + define $(package)_build_cmds $(MAKE) endef + define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef -define $(package)_postprocess_cmds -endef diff --git a/depends/packages/zlib.mk b/depends/packages/zlib.mk index 9ab3273a48..821072ffc9 100755 --- a/depends/packages/zlib.mk +++ b/depends/packages/zlib.mk @@ -23,5 +23,6 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install $($(package)_build_opts) &&\ - $(MAKE) DESTDIR=$(host_prefix) install $($(package)_build_opts) + mkdir $($(package)_staging_dir)/$(host_prefix)/lib/zlib_source &&\ + cp -r * $($(package)_staging_dir)/$(host_prefix)/lib/zlib_source endef From a5e7309d66c664a16b1a0895ae7460b49d10dffc Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 22 Dec 2018 22:56:10 -0500 Subject: [PATCH 079/359] The beginning of the implementation of the new NN This is part 1 of hooking the scraper into the new NN interface. There are first draft implementations of ScraperGetNeuralContract ScraperGetNeuralHash and a stub for ScraperSynchronizeDPOR I restructured some of the code and implemented a second lock in preparation for the ScraperSynchronizeDPOR call. --- src/ScraperProxy/scraper.cpp | 135 +++++++++++++++++++---------- src/ScraperProxy/scraper.h | 3 + src/neuralnet/neuralnet.cpp | 4 +- src/neuralnet/neuralnet_native.cpp | 18 ++-- 4 files changed, 107 insertions(+), 53 deletions(-) mode change 100644 => 100755 src/neuralnet/neuralnet.cpp diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index d3d886de79..8caa1c88ce 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -13,6 +13,7 @@ std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); ScraperFileManifest StructScraperFileManifest; +CCriticalSection cs_Scraper; CCriticalSection cs_StructScraperFileManifest; bool WhitelistPopulated(); @@ -165,9 +166,14 @@ void Scraper(bool fScraperStandalone) while (GetAdjustedTime() - nScraperThreadStartTime < nBeforeSBSleep) { - // The only thing we do here while quiescent is cull manifests received - // from other scrapers. - ScraperDeleteCScraperManifests(); + // Take a lock on the whole scraper for this... + { + LOCK(cs_Scraper); + + // The only thing we do here while quiescent is cull manifests received + // from other scrapers. + ScraperDeleteCScraperManifests(); + } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); MilliSleep(nScraperSleep); @@ -186,9 +192,9 @@ void Scraper(bool fScraperStandalone) else _log(INFO, "Scraper", "Refreshing of whitelist completed"); - // Delete manifest entries not on whitelist. Take a lock on cs_StructScraperFileManifest for this. + // Delete manifest entries not on whitelist. Take a lock on cs_Scraper and cs_StructScraperFileManifest for this. { - LOCK(cs_StructScraperFileManifest); + LOCK2(cs_Scraper, cs_StructScraperFileManifest); ScraperFileManifestMap::iterator entry; @@ -272,32 +278,22 @@ void Scraper(bool fScraperStandalone) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; } + } - // Construct Converged Manifest and SB Core (this is here during development only.) - - ConvergedManifest StructConvergedManifest; - BeaconMap mBeaconMap; - std::string sSBCoreData; - - //ScraperConstructConvergedManifest also culls old CScraperManifests. - if (ScraperConstructConvergedManifest(StructConvergedManifest)) - { - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - - _log(INFO, "Scraper", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); - - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "Scraper", "StoreStats error occurred"); - else - _log(INFO, "Scraper", "Stored converged stats."); + // Periodically generate converged manifests and generate SB core and "contract" + // This will probably be reduced to the commented out call as we near final testing, + // because ScraperGetNeuralContract(false) is called from the neuralnet native interface + // with the boolean false, meaning don't store the stats. + // Lock both cs_Scraper and cs_StructScraperFileManifest. - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + //ConvergedManifest StructConvergedManifest; + std::string sSBCoreData; - if (fDebug) - _log(INFO, "Scraper", "SB Core Data\n" + sSBCoreData); - } + { + LOCK2(cs_Scraper, cs_StructScraperFileManifest); + //ScraperConstructConvergedManifest(StructConvergedManifest) + sSBCoreData = ScraperGetNeuralContract(true); } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -328,30 +324,22 @@ void NeuralNetwork() // These items are only run in this thread if not handled by the Scraper() thread. if (!fScraperActive) { - ConvergedManifest StructConvergedManifest; - BeaconMap mBeaconMap; + // Periodically generate converged manifests and generate SB core and "contract" + // This will probably be reduced to the commented out call as we near final testing, + // because ScraperGetNeuralContract(false) is called from the neuralnet native interface + // with the boolean false, meaning don't store the stats. + // Lock both cs_Scraper and cs_StructScraperFileManifest. + + //ConvergedManifest StructConvergedManifest; std::string sSBCoreData; - //ScraperConstructConvergedManifest also culls old CScraperManifests. - if(ScraperConstructConvergedManifest(StructConvergedManifest)) { - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - - _log(INFO, "NeuralNetwork", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); - - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "NeuralNetwork", "StoreStats error occurred"); - else - _log(INFO, "NeuralNetwork", "Stored converged stats."); - - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); - - if (fDebug) - _log(INFO, "NeuralNetwork", "SB Core Data\n" + sSBCoreData); + LOCK2(cs_Scraper, cs_StructScraperFileManifest); + //ScraperConstructConvergedManifest(StructConvergedManifest) + sSBCoreData = ScraperGetNeuralContract(true); } - } + } // Use the same sleep interval as the scraper. This defaults to 60 seconds. _log(INFO, "NeuralNetwork", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -2290,8 +2278,63 @@ std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats) } //*/ +std::string ScraperGetNeuralContract(bool bStoreConvergedStats) +{ + ConvergedManifest StructConvergedManifest; + BeaconMap mBeaconMap; + std::string sSBCoreData; + + // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then + // you can't make a SB core and you can't make a contract, so return the empty string. + if(ScraperConstructConvergedManifest(StructConvergedManifest)) + { + // This is to display the element count in the beacon map. + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + if (bStoreConvergedStats) + { + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); + else + _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + } + + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + + if (fDebug) + _log(INFO, "ScraperGetNeuralContract", "SB Core Data\n" + sSBCoreData); + + return sSBCoreData; + } + else + return std::string(""); +} + + +// Note: This is NOT meant to be compatible with the .net NN QuorumHashingAlgorithm. We have to get away from that and +// use a straightforward native hash of the contract string. The hash is returned as a string for compatibility +// purposes. This is silly and should be changed to a uint256. +std::string ScraperGetNeuralHash() +{ + std::string sNeuralContract = ScraperGetNeuralContract(false); + + uint256 nHash = Hash(sNeuralContract.begin(), sNeuralContract.end()); + + return nHash.GetHex(); +} + + +bool ScraperSynchronizeDPOR() +{ + // Currently stubbed out. + bool bStatus = true; + + return true; +} /*********************** diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 6573ba08cf..a2f10afcdc 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -239,6 +239,9 @@ mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests(); bool ScraperDeleteCScraperManifest(uint256 nManifestHash); bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifest); std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats); +std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false); +std::string ScraperGetNeuralHash(); +bool ScraperSynchronizeDPOR(); double MagRound(double dMag) { diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp old mode 100644 new mode 100755 index c012fc9795..aa55062cca --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -1,16 +1,16 @@ #include "neuralnet.h" #include "neuralnet_native.h" #include "neuralnet_stub.h" -#include "neuralnet_win.h" #include "util.h" -extern bool GetBoolArg(const std::string& strArg, bool fDefault); #if defined(QT_GUI) && defined(WIN32) #include "neuralnet_win.h" #endif +extern bool GetBoolArg(const std::string& strArg, bool fDefault); + using namespace NN; namespace diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index 4d3d77e5e1..4b7e852aab 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -2,31 +2,39 @@ #include +extern std::string GetArgument(const std::string& arg, const std::string& defaultvalue); +extern std::string ScraperGetNeuralContract(bool bStoreConvergedStats); +extern std::string ScraperGetNeuralHash(); +extern bool ScraperSynchronizeDPOR(); + using namespace NN; bool NeuralNetNative::IsEnabled() { - return false; + return GetArgument("disableneuralnetwork", "false") == "false"; } std::string NeuralNetNative::GetNeuralVersion() { - return "0"; + // This is the NN magic version number. TODO: Consider different number for new NN? + return std::to_string(1999); } std::string NeuralNetNative::GetNeuralHash() { - return std::string(); + return ScraperGetNeuralHash(); } std::string NeuralNetNative::GetNeuralContract() { - return std::string(); + return ScraperGetNeuralContract(false); } +// Note that the data argument is still used here for compatibility, but I don't think it will +// actually be used in the scraper. We will see. bool NeuralNetNative::SynchronizeDPOR(const std::string& data) { - return false; + return ScraperSynchronizeDPOR(); } std::string NeuralNetNative::ExecuteDotNetStringFunction(std::string function, std::string data) From cb04f95b54ea2e28127a4c3e7fc20a3e0087ab16 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sat, 22 Dec 2018 10:46:28 +0100 Subject: [PATCH 080/359] Make interface out of the NeuralNet functions. Needs to be test built for Windows. --- src/neuralnet/neuralnet.cpp | 20 ++++++++++++++++---- src/neuralnet/neuralnet_win.cpp | 5 ++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index aa55062cca..46d98ce40f 100755 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -1,7 +1,6 @@ #include "neuralnet.h" #include "neuralnet_native.h" #include "neuralnet_stub.h" -#include "util.h" @@ -18,6 +17,19 @@ namespace INeuralNetPtr instance; } +INeuralNetPtr NN::CreateNeuralNet() +{ +#if defined(QT_GUI) && defined(WIN32) + return std::make_shared(); +#else + return std::make_shared(); +#endif + +namespace +{ + INeuralNetPtr instance; +} + INeuralNetPtr NN::CreateNeuralNet() { if (GetBoolArg("-usenewnn")) @@ -31,11 +43,11 @@ INeuralNetPtr NN::CreateNeuralNet() } void NN::SetInstance(const INeuralNetPtr &obj) -{ + { instance = obj; -} + } INeuralNetPtr NN::GetInstance() -{ + { return instance; } diff --git a/src/neuralnet/neuralnet_win.cpp b/src/neuralnet/neuralnet_win.cpp index cc7f1d8fbf..4eb1974699 100644 --- a/src/neuralnet/neuralnet_win.cpp +++ b/src/neuralnet/neuralnet_win.cpp @@ -14,6 +14,8 @@ #include #include +using namespace NN; + // Old VB based NeuralNet. extern std::string qtGetNeuralHash(std::string data); extern std::string qtGetNeuralContract(std::string data); @@ -22,8 +24,6 @@ extern std::string qtExecuteDotNetStringFunction(std::string function,std::strin extern void qtSyncWithDPORNodes(std::string data); int64_t IsNeural(); -using namespace NN; - // While transitioning to dotnet the NeuralNet implementation has been split // into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. // After the transition both Win32 implementations can be removed. @@ -65,4 +65,3 @@ int64_t NeuralNetWin32::IsNeuralNet() { return IsNeural(); } - From ed47faf81fcf3f8397731095a7eec3867b6b36ad Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sun, 23 Dec 2018 11:02:04 +0100 Subject: [PATCH 081/359] Fix for neuralnet link errors. --- src/neuralnet/neuralnet.cpp | 39 ++++++++++++++------------------- src/neuralnet/neuralnet.h | 23 ++++++++++++++++++- src/neuralnet/neuralnet_win.cpp | 15 +++++++++++-- 3 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index 46d98ce40f..a0ed2f1ab6 100755 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -1,12 +1,9 @@ #include "neuralnet.h" #include "neuralnet_native.h" #include "neuralnet_stub.h" +#include "util.h" - - -#if defined(QT_GUI) && defined(WIN32) -#include "neuralnet_win.h" -#endif +#include extern bool GetBoolArg(const std::string& strArg, bool fDefault); @@ -15,19 +12,12 @@ using namespace NN; namespace { INeuralNetPtr instance; + std::vector factories; } -INeuralNetPtr NN::CreateNeuralNet() +void NN::RegisterFactory(const Factory &factory) { -#if defined(QT_GUI) && defined(WIN32) - return std::make_shared(); -#else - return std::make_shared(); -#endif - -namespace -{ - INeuralNetPtr instance; + factories.push_back(factory); } INeuralNetPtr NN::CreateNeuralNet() @@ -35,19 +25,24 @@ INeuralNetPtr NN::CreateNeuralNet() if (GetBoolArg("-usenewnn")) return std::make_shared(); -#if defined(QT_GUI) && defined(WIN32) - return std::make_shared(); -#else + // Try to instantiate via injected factories + for(auto factory : factories) + { + INeuralNetPtr obj = factory(); + if(obj) + return obj; + } + + // Fall back to stub implementation. return std::make_shared(); -#endif } void NN::SetInstance(const INeuralNetPtr &obj) - { +{ instance = obj; - } +} INeuralNetPtr NN::GetInstance() - { +{ return instance; } diff --git a/src/neuralnet/neuralnet.h b/src/neuralnet/neuralnet.h index d6ae4f38ba..4db26e663f 100644 --- a/src/neuralnet/neuralnet.h +++ b/src/neuralnet/neuralnet.h @@ -2,6 +2,7 @@ #include #include +#include namespace NN { @@ -13,7 +14,7 @@ namespace NN //! //! \brief Destructor. //! - virtual ~INeuralNet() = default; + virtual ~INeuralNet() {} //! //! \brief Check is current system supports neural net operations. @@ -86,12 +87,32 @@ namespace NN //! typedef std::shared_ptr INeuralNetPtr; + //! + //! \brief Factory function. + //! + typedef std::function Factory; + + //! + //! \brief Register factory function. + //! + //! Registers a factory function which will be called by + //! \p CreateNeuralNet. + //! + //! \param factory + //! + void RegisterFactory(const Factory& factory); + //! //! \brief Neuralnet factory. //! //! Evaluates host platform and configuration flags to instantiate an //! appropriate neuralnet object. //! + //! This creates an object using the following criterias and order: + //! 1) New neuralnet if enabled + //! 2) Old neuralnet if factory has been registered, see RegisterFactory(). + //! 3) A neural net stub. + //! //! \return A new INeuralNet instance. //! INeuralNetPtr CreateNeuralNet(); diff --git a/src/neuralnet/neuralnet_win.cpp b/src/neuralnet/neuralnet_win.cpp index 4eb1974699..6e0971c914 100644 --- a/src/neuralnet/neuralnet_win.cpp +++ b/src/neuralnet/neuralnet_win.cpp @@ -14,8 +14,6 @@ #include #include -using namespace NN; - // Old VB based NeuralNet. extern std::string qtGetNeuralHash(std::string data); extern std::string qtGetNeuralContract(std::string data); @@ -24,6 +22,19 @@ extern std::string qtExecuteDotNetStringFunction(std::string function,std::strin extern void qtSyncWithDPORNodes(std::string data); int64_t IsNeural(); +using namespace NN; + +namespace +{ + // Static factory registration. + bool registered = []() + { + NN::Factory factory([]() { return std::make_shared(); }); + NN::RegisterFactory(factory); + return true; + }; +} + // While transitioning to dotnet the NeuralNet implementation has been split // into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. // After the transition both Win32 implementations can be removed. From 9f5cf0ad7f691cd91c030aa0d5bdf26a99dd58ba Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 23 Dec 2018 21:32:00 -0500 Subject: [PATCH 082/359] Implementation of the new NN calls part 2 Initial version of ScraperSynchronizeDPOR. Implementation of single shot mode through Scraper() to support on command stats updates via ScraperSynchronizeDPOR. --- src/ScraperProxy/scraper.cpp | 288 ++++++++++++++++++++--------- src/ScraperProxy/scraper.h | 5 +- src/net.cpp | 2 +- src/neuralnet/neuralnet_native.cpp | 14 +- 4 files changed, 210 insertions(+), 99 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 8caa1c88ce..eb79e711ab 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -11,7 +11,7 @@ std::string lowercase(std::string s); std::string ExtractXML(const std::string XMLdata, const std::string key, const std::string key_end); std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); -ScraperFileManifest StructScraperFileManifest; +ScraperFileManifest StructScraperFileManifest = {}; CCriticalSection cs_Scraper; CCriticalSection cs_StructScraperFileManifest; @@ -38,9 +38,12 @@ extern void MilliSleep(int64_t n); extern BeaconConsensus GetConsensusBeaconList(); // This is the scraper thread... -void Scraper(bool fScraperStandalone) +void Scraper(bool fScraperStandalone, bool bSingleShot) { - _log(INFO, "Scraper", "Starting Scraper thread."); + if(!bSingleShot) + _log(INFO, "Scraper", "Starting Scraper thread."); + else + _log(INFO, "Scraper", "Running in single shot mode."); // This is necessary to maintain compatibility with Windows. pathScraper.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16())); @@ -54,82 +57,89 @@ void Scraper(bool fScraperStandalone) else _log(ERROR, "Scraper", "Hash for \"Hello world\" is " + Hash(sHashCheck.begin(), sHashCheck.end()).GetHex() + " and is NOT correct."); - // Check to see if the Scraper directory exists and is a directory. If not create it. - if(fs::exists(pathScraper)) + // Take a lock on cs_Scraper for the directory setup and file consistency check. + { - // If it is a normal file, this is not right. Remove the file and replace with the Scraper directory. - if(fs::is_regular_file(pathScraper)) - { - fs::remove(pathScraper); - fs::create_directory(pathScraper); - } - else - { - // Load the manifest file from the Scraper directory into mScraperFileManifest. + LOCK(cs_Scraper); - _log(INFO, "Scraper", "Loading Manifest"); - if (!LoadScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(ERROR, "Scraper", "Error occurred loading manifest"); + // Check to see if the Scraper directory exists and is a directory. If not create it. + if(fs::exists(pathScraper)) + { + // If it is a normal file, this is not right. Remove the file and replace with the Scraper directory. + if(fs::is_regular_file(pathScraper)) + { + fs::remove(pathScraper); + fs::create_directory(pathScraper); + } else - _log(INFO, "Scraper", "Loaded Manifest file into map."); - - // Align the Scraper directory with the Manifest file. - // First remove orphan files with no Manifest entry. - // Lock the manifest while it is being manipulated. { - LOCK(cs_StructScraperFileManifest); + // Load the manifest file from the Scraper directory into mScraperFileManifest. - // Check to see if the file exists in the manifest and if the hash matches. If it doesn't - // remove it. - ScraperFileManifestMap::iterator entry; + _log(INFO, "Scraper", "Loading Manifest"); + if (!LoadScraperFileManifest(pathScraper / "Manifest.csv.gz")) + _log(ERROR, "Scraper", "Error occurred loading manifest"); + else + _log(INFO, "Scraper", "Loaded Manifest file into map."); - for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) + // Align the Scraper directory with the Manifest file. + // First remove orphan files with no Manifest entry. + // Lock the manifest while it is being manipulated. { - std::string filename = dir.path().filename().string(); + LOCK(cs_StructScraperFileManifest); + + // Check to see if the file exists in the manifest and if the hash matches. If it doesn't + // remove it. + ScraperFileManifestMap::iterator entry; - if(dir.path().filename() != "Manifest.csv.gz" - && dir.path().filename() != "BeaconList.csv.gz" - && dir.path().filename() != "Stats.csv.gz" - && dir.path().filename() != "ConvergedStats.csv.gz" - && fs::is_regular_file(dir)) + for (fs::directory_entry& dir : fs::directory_iterator(pathScraper)) { - entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().string()); - if (entry == StructScraperFileManifest.mScraperFileManifest.end()) - { - fs::remove(dir.path()); - _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); - continue; - } + std::string filename = dir.path().filename().string(); - if (entry->second.hash != GetFileHash(dir)) + if(dir.path().filename() != "Manifest.csv.gz" + && dir.path().filename() != "BeaconList.csv.gz" + && dir.path().filename() != "Stats.csv.gz" + && dir.path().filename() != "ConvergedStats.csv.gz" + && fs::is_regular_file(dir)) { - _log(INFO, "Scraper", "File failed hash check. Removing file."); - fs::remove(dir.path()); + entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().string()); + if (entry == StructScraperFileManifest.mScraperFileManifest.end()) + { + fs::remove(dir.path()); + _log(WARNING, "Scraper", "Removing orphan file not in Manifest: " + filename); + continue; + } + + if (entry->second.hash != GetFileHash(dir)) + { + _log(INFO, "Scraper", "File failed hash check. Removing file."); + fs::remove(dir.path()); + } } } - } - // Now iterate through the Manifest map and remove entries with no file, or entries and files older than - // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time - //if fScraperRetainNonCurrentFiles is false. - for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) - { - ScraperFileManifestMap::iterator entry_copy = entry++; - - if (!fs::exists(pathScraper / entry_copy->first) - || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) - || (!fScraperRetainNonCurrentFiles && entry_copy->second.current == false)) + // Now iterate through the Manifest map and remove entries with no file, or entries and files older than + // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time + //if fScraperRetainNonCurrentFiles is false. + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) { - _log(WARNING, "Scraper", "Removing stale or orphan manifest entry: " + entry_copy->first); - DeleteScraperFileManifestEntry(entry_copy->second); + ScraperFileManifestMap::iterator entry_copy = entry++; + + if (!fs::exists(pathScraper / entry_copy->first) + || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) + || (!fScraperRetainNonCurrentFiles && entry_copy->second.current == false)) + { + _log(WARNING, "Scraper", "Removing stale or orphan manifest entry: " + entry_copy->first); + DeleteScraperFileManifestEntry(entry_copy->second); + } } } } } - } - else - fs::create_directory(pathScraper); + else + fs::create_directory(pathScraper); + // end LOCK(cs_Scraper) + } uint256 nmScraperFileManifestHash = 0; @@ -138,13 +148,15 @@ void Scraper(bool fScraperStandalone) { // Only proceed if wallet is in sync. Check every 5 seconds since no callback is available. // We do NOT want to filter statistics with an out-of-date beacon list or project whitelist. + // If called in singleshot mode, wallet will most likely be in sync, because the calling functions check + // beforehand. while (OutOfSyncByAge()) { _log(INFO, "Scraper", "Wallet not in sync. Sleeping for 8 seconds."); MilliSleep(8000); } - _log(INFO, "Scraper", "Wallet is now in sync. Continuing."); + _log(INFO, "Scraper", "Wallet is in sync. Continuing."); gridcoinrpc data; @@ -156,7 +168,8 @@ void Scraper(bool fScraperStandalone) // other scrapers while this one is quiescent. An unlikely but possible // situation because the nActiveBeforeSB may be set differently on other // scrapers. - if (sbage <= (86400 - nActiveBeforeSB) && sbage >= 0) + // If Scraper is called in singleshot mode, then skip the wait. + if (!bSingleShot && sbage <= (86400 - nActiveBeforeSB) && sbage >= 0) { // Don't let nBeforeSBSleep go less than zero, which could happen without max if wallet // started with sbage already older than 86400 - nActiveBeforeSB. @@ -285,23 +298,40 @@ void Scraper(bool fScraperStandalone) // because ScraperGetNeuralContract(false) is called from the neuralnet native interface // with the boolean false, meaning don't store the stats. // Lock both cs_Scraper and cs_StructScraperFileManifest. + // Don't do this if called with singleshot, because ScraperGetNeuralContract will be done afterwards by + // the functiont that called the singleshot. + if (!bSingleShot) + { + //ConvergedManifest StructConvergedManifest; - //ConvergedManifest StructConvergedManifest; - std::string sSBCoreData; + std::string sSBCoreData; - { - LOCK2(cs_Scraper, cs_StructScraperFileManifest); + { + LOCK2(cs_Scraper, cs_StructScraperFileManifest); - //ScraperConstructConvergedManifest(StructConvergedManifest) - sSBCoreData = ScraperGetNeuralContract(true); - } + //ScraperConstructConvergedManifest(StructConvergedManifest) + sSBCoreData = ScraperGetNeuralContract(true); + } - _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); - MilliSleep(nScraperSleep); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + MilliSleep(nScraperSleep); + } + else + // This will break from the outer while loop if in singleshot mode and end execution after one pass. + // otherwise in a continuous while loop with nScraperSleep between iterations. + break; } } +void ScraperSingleShot() +{ + // Going through Scraper function in single shot mode. + + _log(INFO, "ScraperSingleShot", "Calling Scraper function in single shot mode."); + + Scraper(false, true); +} // This is the non-scraper "neural-network" node thread... @@ -319,7 +349,7 @@ void NeuralNetwork() MilliSleep(8000); } - _log(INFO, "NeuralNetwork", "Wallet is now in sync. Continuing."); + _log(INFO, "NeuralNetwork", "Wallet is in sync. Continuing."); // These items are only run in this thread if not handled by the Scraper() thread. if (!fScraperActive) @@ -1753,10 +1783,31 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) return true; } +// The idea here is that there are two levels of authorization. The first level is whether any +// node can operate as a "scraper", in other words, download the stats files themselves. +// The second level, which is the IsScraperAuthorizedToBroadcastManifests() function, +// is to authorize a particular node to actually be able to publish manifests. +// The second function is intended to override the first, with the first being a network wide +// policy. So to be clear, if the network wide policy has IsScraperAuthorized() set to false +// then ONLY nodes that have IsScraperAuthorizedToBroadcastManifests() can download stats at all. +// If IsScraperAuthorized() is set to true, then you have two levels of operation allowed. +// Nodes can run -scraper and download stats for themselves. They will only be able to publish +// manifests if for that node IsScraperAuthorizedToBroadcastManifests() evaluates to true. +// This allows flexibility in network policy, and will allow us to convert from a scraper based +// approach to convergence back to individual node stats download and convergence without a lot of +// headaches. +bool IsScraperAuthorized() +{ + // Stubbed out for general scraper operation policy. + // Currently set to false + + return false; +} bool IsScraperAuthorizedToBroadcastManifests() { // Stub for check against public key in AppCache to authorize sending manifests. + // Currently set to true during development/early testing. return true; } @@ -2278,40 +2329,71 @@ std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats) } //*/ -std::string ScraperGetNeuralContract(bool bStoreConvergedStats) +std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDirectFromStatsUpdate) { + // If not in sync then immediately bail with a empty string. + if (OutOfSyncByAge()) + return std::string(""); + ConvergedManifest StructConvergedManifest; BeaconMap mBeaconMap; std::string sSBCoreData; - // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then - // you can't make a SB core and you can't make a contract, so return the empty string. - if(ScraperConstructConvergedManifest(StructConvergedManifest)) + // If bContractDirectFromStatsUpdate is set to true, this means that this is being called from + // ScraperSynchronizeDPOR() in fallback mode to force a single shot update of the stats files and + // direct generation of the contract from the single shot run. This will return immediately with a blank if + // IsScraperAuthorized() evaluates to false, because that means that by network policy, no non-scraper + // stats downloads are allowed by unauthorized scraper nodes. + if (!bContractDirectFromStatsUpdate) { - // This is to display the element count in the beacon map. - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then + // you can't make a SB core and you can't make a contract, so return the empty string. + if(ScraperConstructConvergedManifest(StructConvergedManifest)) + { + // This is to display the element count in the beacon map. + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); - if (bStoreConvergedStats) - { - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); - else - _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + if (bStoreConvergedStats) + { + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); + else + _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + } + + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + + if (fDebug) + _log(INFO, "ScraperGetNeuralContract", "SB Core Data\n" + sSBCoreData); + + return sSBCoreData; } + else + return std::string(""); + } + else if (IsScraperAuthorized()) + { + // This part is the "second trip through from ScraperSynchronizeDPOR() as a fallback, if + // authorized. + + // Do a single shot through the main scraper function to update all of the files. + ScraperSingleShot(); - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperStats); if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data\n" + sSBCoreData); return sSBCoreData; } - else - return std::string(""); + + // If we got here, then no contract so return empty string. + return std::string(""); } @@ -2320,7 +2402,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats) // purposes. This is silly and should be changed to a uint256. std::string ScraperGetNeuralHash() { - std::string sNeuralContract = ScraperGetNeuralContract(false); + std::string sNeuralContract = ScraperGetNeuralContract(false, false); uint256 nHash = Hash(sNeuralContract.begin(), sNeuralContract.end()); @@ -2330,10 +2412,32 @@ std::string ScraperGetNeuralHash() bool ScraperSynchronizeDPOR() { - // Currently stubbed out. - bool bStatus = true; + bool bStatus = false; - return true; + // First check to see if there is already a scraper convergence and a contract formable. If so, then no update needed. + // If the appropriate scrapers are running and the node is in communication, then this is most likely going to be + // the path, which means very little work. + std::string sNeuralContract = ScraperGetNeuralContract(false, false); + + if (sNeuralContract != "") + { + bStatus = true; + // Return immediately here if successful, otherwise fallback to direct download if authorized. + return bStatus; + } + else + { + // Try again with the bool bContractDirectFromStatsUpdate set to true. This will cause a one-shot sync of the + // Scraper file manifest to the stats sites and then a construction of the contract directly from resultant + // mScraperStats, if the network policy allows one-off individual node stats downloads (i.e. IsScraperAuthorized() + // is true). If IsScraperAuthorized() is false, then this will do nothing but return an empty string. + std::string sNeuralContract = ScraperGetNeuralContract(false, true); + } + + if (sNeuralContract != "") + bStatus = true; + + return bStatus; } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index a2f10afcdc..e42f7058a1 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -211,6 +211,8 @@ static const double SCRAPER_SUPERMAJORITY_RATIO = 2.0 / 3.0; void _log(logattribute eType, const std::string& sCall, const std::string& sMessage); void _nntester(logattribute eType, const std::string& sCall, const std::string& sMessage); +void Scraper(bool fScraperStandalone, bool bSingleShot = false); +void ScraperSingleShot(); bool ScraperDirectorySanity(); bool StoreBeaconList(const fs::path& file); bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap); @@ -232,6 +234,7 @@ bool ProcessProjectStatsFromStreamByCPID(const std::string& project, boostio::fi const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats); bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash); +bool IsScraperAuthorized(); bool IsScraperAuthorizedToBroadcastManifests(); bool ScraperSendFileManifestContents(std::string CManifestName); mmCSManifestsBinnedByScraper BinCScraperManifestsByScraper(); @@ -239,7 +242,7 @@ mmCSManifestsBinnedByScraper ScraperDeleteCScraperManifests(); bool ScraperDeleteCScraperManifest(uint256 nManifestHash); bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifest); std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats); -std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false); +std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); std::string ScraperGetNeuralHash(); bool ScraperSynchronizeDPOR(); diff --git a/src/net.cpp b/src/net.cpp index d0d1562c0e..fb86f84496 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -56,7 +56,7 @@ void ThreadMapPort2(void* parg); void ThreadDNSAddressSeed2(void* parg); bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); -extern void Scraper(bool fScraperStandalone); +extern void Scraper(bool fScraperStandalone, bool bSingleShot = false); extern void NeuralNetwork(); extern bool fScraperActive; diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index 4b7e852aab..7893a57683 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -1,9 +1,10 @@ #include "neuralnet_native.h" +#include "version.h" #include extern std::string GetArgument(const std::string& arg, const std::string& defaultvalue); -extern std::string ScraperGetNeuralContract(bool bStoreConvergedStats); +extern std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); extern std::string ScraperGetNeuralHash(); extern bool ScraperSynchronizeDPOR(); @@ -14,10 +15,11 @@ bool NeuralNetNative::IsEnabled() return GetArgument("disableneuralnetwork", "false") == "false"; } +// This is for compatibility std::string NeuralNetNative::GetNeuralVersion() { - // This is the NN magic version number. TODO: Consider different number for new NN? - return std::to_string(1999); + int64_t neural_id = IsNeuralNet(); + return std::to_string(CLIENT_VERSION_MINOR) + "." + std::to_string(neural_id); } std::string NeuralNetNative::GetNeuralHash() @@ -27,7 +29,7 @@ std::string NeuralNetNative::GetNeuralHash() std::string NeuralNetNative::GetNeuralContract() { - return ScraperGetNeuralContract(false); + return ScraperGetNeuralContract(false, false); } // Note that the data argument is still used here for compatibility, but I don't think it will @@ -44,5 +46,7 @@ std::string NeuralNetNative::ExecuteDotNetStringFunction(std::string function, s int64_t NeuralNetNative::IsNeuralNet() { - return 0; + // This is the NN version number. TODO: Consider different number for new NN? + int64_t nNeuralNetVersion = 1999; + return nNeuralNetVersion; } From 0a44bf12360a1413f1df01915a8b8a372053baa7 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 23 Dec 2018 22:00:04 -0500 Subject: [PATCH 083/359] Change block granularity for beacon consensus This changes the block granularity (mod) in GetConsensusBeaconList() to 4 * BLOCK_GRANULARITY or roughly one hour, to improve manifest consensus. --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 025e86de19..68d5326298 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5193,8 +5193,10 @@ BeaconConsensus GetConsensusBeaconList() BlockFinder MaxConsensusLadder; + // Use 4 times the BLOCK_GRANULARITY which moves the consensus block every hour. + // TODO: Make the mod a function of SCRAPER_CMANIFEST_RETENTION_TIME in scraper.h. CBlockIndex* pMaxConsensusLadder = MaxConsensusLadder.FindByHeight((pindexBest->nHeight - CONSENSUS_LOOKBACK) - - (pindexBest->nHeight - CONSENSUS_LOOKBACK) % BLOCK_GRANULARITY); + - (pindexBest->nHeight - CONSENSUS_LOOKBACK) % (BLOCK_GRANULARITY * 4)); Consensus.nBlockHash = pMaxConsensusLadder->GetBlockHash(); From ede40b207a5429cdfb6bb98546e00fd7238af5fe Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 24 Dec 2018 00:01:49 -0500 Subject: [PATCH 084/359] Change IsScraperAuthorized() to true Stub out to true instead of false for testing. --- src/ScraperProxy/scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index eb79e711ab..78995c3126 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1799,7 +1799,7 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) bool IsScraperAuthorized() { // Stubbed out for general scraper operation policy. - // Currently set to false + // Currently set to true for testing fallback operation. return false; } From 6eca5ff12a7bd034d840aa43eb151d2c5577e8c2 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 24 Dec 2018 00:01:49 -0500 Subject: [PATCH 085/359] Change IsScraperAuthorized() to true Stub out to true instead of false for testing. --- src/ScraperProxy/scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index eb79e711ab..78995c3126 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -1799,7 +1799,7 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) bool IsScraperAuthorized() { // Stubbed out for general scraper operation policy. - // Currently set to false + // Currently set to true for testing fallback operation. return false; } From 53d19c40f8479cf8b4f29de5694a39273820ba62 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 24 Dec 2018 10:55:55 -0500 Subject: [PATCH 086/359] Add global stats cache and ExplainMagnitude The global stats cache prevents repeated updating of the stats on calls of the neural contract. ExplainMagnitude is only partially completed. --- src/ScraperProxy/scraper.cpp | 195 +++++++++++++++++++++++++++++------ src/ScraperProxy/scraper.h | 7 ++ 2 files changed, 173 insertions(+), 29 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 78995c3126..832cb1eee3 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -13,8 +13,12 @@ std::vector vXMLData(const std::string& xmldata, int64_t teamid); int64_t teamid(const std::string& xmldata); ScraperFileManifest StructScraperFileManifest = {}; +// Global cache for converged scraper stats. Access must be through a lock. +ConvergedScraperStats ConvergedScraperStatsCache = {}; + CCriticalSection cs_Scraper; CCriticalSection cs_StructScraperFileManifest; +CCriticalSection cs_ConvergedScraperStatsCache; bool WhitelistPopulated(); bool UserpassPopulated(); @@ -1718,6 +1722,96 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg } +std::string ExplainMagnitude(std::string sCPID) +{ + stringbuilder out; + + // See if converged stats/contract update needed... + bool bConvergenceUpdateNeeded = true; + { + LOCK(cs_ConvergedScraperStatsCache); + + if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < nScraperSleep) + bConvergenceUpdateNeeded = false; + } + + if (bConvergenceUpdateNeeded) + // Don't need the output. + ScraperGetNeuralContract(false, false); + + // A purposeful copy here to avoid a long-term lock. May want to change to direct reference + // and allow locking during the output. + ScraperStats mScraperConvergedStats; + { + LOCK(cs_ConvergedScraperStatsCache); + + mScraperConvergedStats = ConvergedScraperStatsCache.mScraperConvergedStats; + } + + /* Work in progress... needs to be changed, basically a cut and paste from the + * other stats functions. + + ScraperObjectStats ProjectStats = {}; + + ProjectStats.statskey.objecttype = byProject; + ProjectStats.statskey.objectID = sCPID; + + for (auto const& entry : mScraperConvergedStats) + { + + std::string objectID = entry.first.objectID; + + std::size_t found = objectID.find(ProjectStats.statskey.objectID); + + if (entry.first.objecttype == byProject) + { + ProjectStats.statsvalue.dTC += entry.second.statsvalue.dTC; + ProjectStats.statsvalue.dRAT += entry.second.statsvalue.dRAT; + ProjectStats.statsvalue.dRAC += entry.second.statsvalue.dRAC; + ProjectStats.statsvalue.dMag += entry.second.statsvalue.dMag; + + //nProjectCount++; + //nCPIDProjectCount++; + } + } + + + + ScraperObjectStats CPIDStats = {}; + + CPIDStats.statskey.objecttype = byCPID; + CPIDStats.statskey.objectID = sCPID; + + for (auto const& entry : mScraperStats) + { + // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, + // otherwise dimension mixing will result. + + std::string objectID = entry.first.objectID; + + std::size_t found = objectID.find(CPIDStats.statskey.objectID); + + if (entry.first.objecttype == byCPIDbyProject && found!=std::string::npos) + { + const auto& project = mScraperStats + + CPIDStats.statsvalue.dTC += entry.second.statsvalue.dTC; + CPIDStats.statsvalue.dRAT += entry.second.statsvalue.dRAT; + CPIDStats.statsvalue.dRAC += entry.second.statsvalue.dRAC; + CPIDStats.statsvalue.dMag += entry.second.statsvalue.dMag; + + //nProjectCount++; + //nCPIDProjectCount++; + } + } + + */ + + //stub + + return std::string(""); +} + /*********************** * Scraper networking * ************************/ @@ -1801,7 +1895,7 @@ bool IsScraperAuthorized() // Stubbed out for general scraper operation policy. // Currently set to true for testing fallback operation. - return false; + return true; } bool IsScraperAuthorizedToBroadcastManifests() @@ -2335,61 +2429,104 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi if (OutOfSyncByAge()) return std::string(""); + // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep old, then simply report back the cache contents. + // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with + // the scraper loop if it is running, but that is ok. The scraper loop updates the time in the cache too. + bool bConvergenceUpdateNeeded = true; + { + LOCK(cs_ConvergedScraperStatsCache); + + if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < nScraperSleep) + bConvergenceUpdateNeeded = false; + } + ConvergedManifest StructConvergedManifest; BeaconMap mBeaconMap; std::string sSBCoreData; + // if bConvergenceUpdate is needed, and... // If bContractDirectFromStatsUpdate is set to true, this means that this is being called from // ScraperSynchronizeDPOR() in fallback mode to force a single shot update of the stats files and // direct generation of the contract from the single shot run. This will return immediately with a blank if // IsScraperAuthorized() evaluates to false, because that means that by network policy, no non-scraper // stats downloads are allowed by unauthorized scraper nodes. - if (!bContractDirectFromStatsUpdate) + // (If bConvergenceUpdate is not needed, then the scraper is operating by convergence already... + if (bConvergenceUpdateNeeded) { - // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then - // you can't make a SB core and you can't make a contract, so return the empty string. - if(ScraperConstructConvergedManifest(StructConvergedManifest)) + if (!bContractDirectFromStatsUpdate) { - // This is to display the element count in the beacon map. - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then + // you can't make a SB core and you can't make a contract, so return the empty string. + if(ScraperConstructConvergedManifest(StructConvergedManifest)) + { + // This is to display the element count in the beacon map. + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); - _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + // I know this involves a copy operation, but it minimizes the lock time on the cache... we may want to + // lock before and do a direct assignment, but that will lock the cache for the whole stats computation, + // which is not really necessary. + { + LOCK(cs_ConvergedScraperStatsCache); - if (bStoreConvergedStats) - { - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); + ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; + ConvergedScraperStatsCache.nTime = GetAdjustedTime(); + } + + _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (bStoreConvergedStats) + { + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); + else + _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + } + + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + + if (fDebug) + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence \n" + sSBCoreData); else - _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence \n"); + + return sSBCoreData; } + else + return std::string(""); + } + else if (IsScraperAuthorized()) + { + // This part is the "second trip through from ScraperSynchronizeDPOR() as a fallback, if + // authorized. + + // Do a single shot through the main scraper function to update all of the files. + ScraperSingleShot(); - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); + // Notice there is NO update to the ConvergedScraperStatsCache here, as that is not + // appropriate for the single shot. + ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperStats); if (fDebug) - _log(INFO, "ScraperGetNeuralContract", "SB Core Data\n" + sSBCoreData); + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from single shot\n" + sSBCoreData); + else + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from single shot\n"); return sSBCoreData; } - else - return std::string(""); } - else if (IsScraperAuthorized()) + else { - // This part is the "second trip through from ScraperSynchronizeDPOR() as a fallback, if - // authorized. + LOCK(cs_ConvergedScraperStatsCache); - // Do a single shot through the main scraper function to update all of the files. - ScraperSingleShot(); - - ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperStats); + sSBCoreData = GenerateSBCoreDataFromScraperStats(ConvergedScraperStatsCache.mScraperConvergedStats); if (fDebug) - _log(INFO, "ScraperGetNeuralContract", "SB Core Data\n" + sSBCoreData); - - return sSBCoreData; + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats\n" + sSBCoreData); + else + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats\n"); } // If we got here, then no contract so return empty string. diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index e42f7058a1..0312d3e6ae 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -178,6 +178,12 @@ struct ScraperObjectStatsKeyComp typedef std::map ScraperStats; +struct ConvergedScraperStats +{ + int64_t nTime; + ScraperStats mScraperConvergedStats; +}; + /********************* * Global Constants * *********************/ @@ -228,6 +234,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry); bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry); ScraperStats GetScraperStatsByConsensusBeaconList(); ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConvergedManifest); +std::string ExplainMagnitude(std::string sCPID); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool ProcessProjectStatsFromStreamByCPID(const std::string& project, boostio::filtering_istream& sUncompressedIn, From 13cac0ec9dd74b7b13741842153c2968c8beabfc Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 24 Dec 2018 18:35:45 -0500 Subject: [PATCH 087/359] Refine locking and add locking logging. --- src/ScraperProxy/scraper.cpp | 105 +++++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 10 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 832cb1eee3..a69fdfcf51 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -65,6 +65,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) { LOCK(cs_Scraper); + _log(INFO, "LOCK", "cs_Scraper"); // Check to see if the Scraper directory exists and is a directory. If not create it. if(fs::exists(pathScraper)) @@ -90,6 +91,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // Lock the manifest while it is being manipulated. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Check to see if the file exists in the manifest and if the hash matches. If it doesn't // remove it. @@ -136,6 +138,9 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) DeleteScraperFileManifestEntry(entry_copy->second); } } + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } } @@ -143,6 +148,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) fs::create_directory(pathScraper); // end LOCK(cs_Scraper) + _log(INFO, "ENDLOCK", "cs_Scraper"); } uint256 nmScraperFileManifestHash = 0; @@ -186,10 +192,14 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // Take a lock on the whole scraper for this... { LOCK(cs_Scraper); + _log(INFO, "LOCK", "cs_Scraper"); // The only thing we do here while quiescent is cull manifests received // from other scrapers. ScraperDeleteCScraperManifests(); + + // End LOCK(cs_Scraper) + _log(INFO, "ENDLOCK", "cs_Scraper"); } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -202,6 +212,10 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) else { + // Take a lock on cs_Scraper for the main activity portion of the loop. + LOCK(cs_Scraper); + _log(INFO, "LOCK", "cs_Scraper"); + // Refresh the whitelist if its available if (!data.wlimport()) _log(WARNING, "Scraper", "Refreshing of whitelist failed.. using old data"); @@ -209,9 +223,10 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) else _log(INFO, "Scraper", "Refreshing of whitelist completed"); - // Delete manifest entries not on whitelist. Take a lock on cs_Scraper and cs_StructScraperFileManifest for this. + // Delete manifest entries not on whitelist. Take a lock on cs_StructScraperFileManifest for this. { - LOCK2(cs_Scraper, cs_StructScraperFileManifest); + LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); ScraperFileManifestMap::iterator entry; @@ -236,6 +251,9 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) DeleteScraperFileManifestEntry(entry_copy->second); } } + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } AuthenticationETagClear(); @@ -248,6 +266,9 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) _log(INFO, "Scraper", "Stored Beacon List"); DownloadProjectRacFilesByCPID(); + + // End LOCK(cs_Scraper) + _log(INFO, "ENDLOCK", "cs_Scraper"); } _nntester(INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); @@ -276,14 +297,20 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) std::string sDefaultKey; { LOCK(pwalletMain->cs_wallet); + _log(INFO, "LOCK", "pwalletMain->cs_wallet"); + sDefaultKey = pwalletMain->vchDefaultKey.GetID().ToString(); + // End LOCK(pwalletMain->cs_wallet) + _log(INFO, "ENDLOCK", "pwalletMain->cs_wallet"); } // Publish and/or local delete CScraperManifests. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + // If the hash doesn't match (a new one is available), or there are none, then publish a new one. if (nmScraperFileManifestHash != StructScraperFileManifest.nFileManifestMapHash @@ -294,6 +321,9 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) } nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } @@ -312,12 +342,16 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) { LOCK2(cs_Scraper, cs_StructScraperFileManifest); + _log(INFO, "LOCK2", "cs_Scraper, cs_StructScraperFileManifest"); //ScraperConstructConvergedManifest(StructConvergedManifest) - sSBCoreData = ScraperGetNeuralContract(true); + sSBCoreData = ScraperGetNeuralContract(true, false); + + // END LOCK2(cs_Scraper, cs_StructScraperFileManifest); + _log(INFO, "ENDLOCK2", "cs_Scraper, cs_StructScraperFileManifest"); } - _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep / 1000) +" seconds"); MilliSleep(nScraperSleep); } else @@ -376,7 +410,7 @@ void NeuralNetwork() } // Use the same sleep interval as the scraper. This defaults to 60 seconds. - _log(INFO, "NeuralNetwork", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + _log(INFO, "NeuralNetwork", "Sleeping for " + std::to_string(nScraperSleep / 1000) +" seconds"); MilliSleep(nScraperSleep); } @@ -747,6 +781,7 @@ bool DownloadProjectRacFilesByCPID() // After processing, update global structure with the timestamp of the latest file in the manifest. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); int64_t nMaxTime = 0; for (const auto& entry : StructScraperFileManifest.mScraperFileManifest) @@ -755,6 +790,9 @@ bool DownloadProjectRacFilesByCPID() } StructScraperFileManifest.timestamp = nMaxTime; + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } return true; } @@ -897,6 +935,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Iterate mScraperFileManifest to find any prior records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles @@ -936,6 +975,9 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil _log(ERROR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); else _log(INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -1081,8 +1123,12 @@ bool StoreBeaconList(const fs::path& file) // Requires a lock. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); StructScraperFileManifest.nConsensusBlockHash = Consensus.nBlockHash; + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } if (fs::exists(file)) @@ -1225,8 +1271,12 @@ bool LoadScraperFileManifest(const fs::path& file) // global structure. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); InsertScraperFileManifestEntry(LoadEntry); + + // End LOCK(cs_StructScraperFileManifest + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } @@ -1257,6 +1307,7 @@ bool StoreScraperFileManifest(const fs::path& file) //Lock StructScraperFileManifest during serialize to string. { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Header. stream << "Hash," << "Current," << "Time," << "Project," << "Filename\n"; @@ -1272,6 +1323,9 @@ bool StoreScraperFileManifest(const fs::path& file) + entry.first + "\n"; stream << sScraperFileManifestEntry; } + + // end LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } _log(INFO, "StoreScraperFileManifest", "Finished processing manifest from map."); @@ -1518,12 +1572,16 @@ ScraperStats GetScraperStatsByConsensusBeaconList() unsigned int nActiveProjects = 0; { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { if (entry.second.current) nActiveProjects++; } + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; @@ -1534,6 +1592,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() { LOCK(cs_StructScraperFileManifest); + _log(INFO, "LOCK", "cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -1555,6 +1614,9 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } } } + + // End LOCK(cs_StructScraperFileManifest) + _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } // Now are are going to cut across projects and group by CPID. @@ -1730,9 +1792,14 @@ std::string ExplainMagnitude(std::string sCPID) bool bConvergenceUpdateNeeded = true; { LOCK(cs_ConvergedScraperStatsCache); + _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < nScraperSleep) bConvergenceUpdateNeeded = false; + + // End LOCK(cs_ConvergedScraperStatsCache) + _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } if (bConvergenceUpdateNeeded) @@ -1744,8 +1811,12 @@ std::string ExplainMagnitude(std::string sCPID) ScraperStats mScraperConvergedStats; { LOCK(cs_ConvergedScraperStatsCache); + _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); mScraperConvergedStats = ConvergedScraperStatsCache.mScraperConvergedStats; + + // End LOCK(cs_ConvergedScraperStatsCache) + _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } /* Work in progress... needs to be changed, basically a cut and paste from the @@ -2429,15 +2500,19 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi if (OutOfSyncByAge()) return std::string(""); - // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep old, then simply report back the cache contents. + // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep / 1000 old (for seconds), then simply report back the cache contents. // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with // the scraper loop if it is running, but that is ok. The scraper loop updates the time in the cache too. bool bConvergenceUpdateNeeded = true; { LOCK(cs_ConvergedScraperStatsCache); + _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); - if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < nScraperSleep) + if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < (nScraperSleep / 1000)) bConvergenceUpdateNeeded = false; + + // End LOCK(cs_ConvergedScraperStatsCache) + _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } ConvergedManifest StructConvergedManifest; @@ -2469,9 +2544,14 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi // which is not really necessary. { LOCK(cs_ConvergedScraperStatsCache); + _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; ConvergedScraperStatsCache.nTime = GetAdjustedTime(); + + // End LOCK(cs_ConvergedScraperStatsCache) + _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); @@ -2489,7 +2569,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence \n" + sSBCoreData); else - _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence \n"); + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence"); return sSBCoreData; } @@ -2512,7 +2592,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data from single shot\n" + sSBCoreData); else - _log(INFO, "ScraperGetNeuralContract", "SB Core Data from single shot\n"); + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from single shot"); return sSBCoreData; } @@ -2520,13 +2600,18 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi else { LOCK(cs_ConvergedScraperStatsCache); + _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + sSBCoreData = GenerateSBCoreDataFromScraperStats(ConvergedScraperStatsCache.mScraperConvergedStats); if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats\n" + sSBCoreData); else - _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats\n"); + _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats"); + + // End LOCK(cs_ConvergedScraperStatsCache) + _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } // If we got here, then no contract so return empty string. From 9fb54831fa6bb2e6b5746454d56326cca8826994 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 24 Dec 2018 23:00:54 -0500 Subject: [PATCH 088/359] Condition lock loggin to when fDebug is true. --- src/ScraperProxy/scraper.cpp | 76 ++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index a69fdfcf51..4f8e012ae6 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -65,7 +65,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) { LOCK(cs_Scraper); - _log(INFO, "LOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "LOCK", "cs_Scraper"); // Check to see if the Scraper directory exists and is a directory. If not create it. if(fs::exists(pathScraper)) @@ -91,7 +91,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // Lock the manifest while it is being manipulated. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Check to see if the file exists in the manifest and if the hash matches. If it doesn't // remove it. @@ -140,7 +140,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) } // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } } @@ -148,7 +148,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) fs::create_directory(pathScraper); // end LOCK(cs_Scraper) - _log(INFO, "ENDLOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_Scraper"); } uint256 nmScraperFileManifestHash = 0; @@ -192,14 +192,14 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // Take a lock on the whole scraper for this... { LOCK(cs_Scraper); - _log(INFO, "LOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "LOCK", "cs_Scraper"); // The only thing we do here while quiescent is cull manifests received // from other scrapers. ScraperDeleteCScraperManifests(); // End LOCK(cs_Scraper) - _log(INFO, "ENDLOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_Scraper"); } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); @@ -214,7 +214,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) { // Take a lock on cs_Scraper for the main activity portion of the loop. LOCK(cs_Scraper); - _log(INFO, "LOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "LOCK", "cs_Scraper"); // Refresh the whitelist if its available if (!data.wlimport()) @@ -226,7 +226,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // Delete manifest entries not on whitelist. Take a lock on cs_StructScraperFileManifest for this. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); ScraperFileManifestMap::iterator entry; @@ -253,7 +253,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) } // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } AuthenticationETagClear(); @@ -268,7 +268,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) DownloadProjectRacFilesByCPID(); // End LOCK(cs_Scraper) - _log(INFO, "ENDLOCK", "cs_Scraper"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_Scraper"); } _nntester(INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); @@ -297,19 +297,19 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) std::string sDefaultKey; { LOCK(pwalletMain->cs_wallet); - _log(INFO, "LOCK", "pwalletMain->cs_wallet"); + if (fDebug) _log(INFO, "LOCK", "pwalletMain->cs_wallet"); sDefaultKey = pwalletMain->vchDefaultKey.GetID().ToString(); // End LOCK(pwalletMain->cs_wallet) - _log(INFO, "ENDLOCK", "pwalletMain->cs_wallet"); + if (fDebug) _log(INFO, "ENDLOCK", "pwalletMain->cs_wallet"); } // Publish and/or local delete CScraperManifests. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // If the hash doesn't match (a new one is available), or there are none, then publish a new one. @@ -323,7 +323,7 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } @@ -781,7 +781,7 @@ bool DownloadProjectRacFilesByCPID() // After processing, update global structure with the timestamp of the latest file in the manifest. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); int64_t nMaxTime = 0; for (const auto& entry : StructScraperFileManifest.mScraperFileManifest) @@ -792,7 +792,7 @@ bool DownloadProjectRacFilesByCPID() StructScraperFileManifest.timestamp = nMaxTime; // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } return true; } @@ -935,7 +935,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Iterate mScraperFileManifest to find any prior records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles @@ -977,7 +977,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil _log(INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } _log(INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -1123,12 +1123,12 @@ bool StoreBeaconList(const fs::path& file) // Requires a lock. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); StructScraperFileManifest.nConsensusBlockHash = Consensus.nBlockHash; // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } if (fs::exists(file)) @@ -1271,12 +1271,12 @@ bool LoadScraperFileManifest(const fs::path& file) // global structure. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); InsertScraperFileManifestEntry(LoadEntry); // End LOCK(cs_StructScraperFileManifest - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } } @@ -1307,7 +1307,7 @@ bool StoreScraperFileManifest(const fs::path& file) //Lock StructScraperFileManifest during serialize to string. { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); // Header. stream << "Hash," << "Current," << "Time," << "Project," << "Filename\n"; @@ -1325,7 +1325,7 @@ bool StoreScraperFileManifest(const fs::path& file) } // end LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } _log(INFO, "StoreScraperFileManifest", "Finished processing manifest from map."); @@ -1572,7 +1572,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() unsigned int nActiveProjects = 0; { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -1581,7 +1581,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; @@ -1592,7 +1592,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() { LOCK(cs_StructScraperFileManifest); - _log(INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK", "cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -1616,7 +1616,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } // End LOCK(cs_StructScraperFileManifest) - _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_StructScraperFileManifest"); } // Now are are going to cut across projects and group by CPID. @@ -1792,14 +1792,14 @@ std::string ExplainMagnitude(std::string sCPID) bool bConvergenceUpdateNeeded = true; { LOCK(cs_ConvergedScraperStatsCache); - _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < nScraperSleep) bConvergenceUpdateNeeded = false; // End LOCK(cs_ConvergedScraperStatsCache) - _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } if (bConvergenceUpdateNeeded) @@ -1811,12 +1811,12 @@ std::string ExplainMagnitude(std::string sCPID) ScraperStats mScraperConvergedStats; { LOCK(cs_ConvergedScraperStatsCache); - _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); mScraperConvergedStats = ConvergedScraperStatsCache.mScraperConvergedStats; // End LOCK(cs_ConvergedScraperStatsCache) - _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } /* Work in progress... needs to be changed, basically a cut and paste from the @@ -2506,13 +2506,13 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi bool bConvergenceUpdateNeeded = true; { LOCK(cs_ConvergedScraperStatsCache); - _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < (nScraperSleep / 1000)) bConvergenceUpdateNeeded = false; // End LOCK(cs_ConvergedScraperStatsCache) - _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } ConvergedManifest StructConvergedManifest; @@ -2544,14 +2544,14 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi // which is not really necessary. { LOCK(cs_ConvergedScraperStatsCache); - _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; ConvergedScraperStatsCache.nTime = GetAdjustedTime(); // End LOCK(cs_ConvergedScraperStatsCache) - _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); @@ -2600,7 +2600,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi else { LOCK(cs_ConvergedScraperStatsCache); - _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); sSBCoreData = GenerateSBCoreDataFromScraperStats(ConvergedScraperStatsCache.mScraperConvergedStats); @@ -2611,7 +2611,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats"); // End LOCK(cs_ConvergedScraperStatsCache) - _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } // If we got here, then no contract so return empty string. From d7d7861b7775912b4e803a4e18d6192644b5f6b4 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 25 Dec 2018 04:27:27 -0500 Subject: [PATCH 089/359] Finish first version of ExplainMagnitude Implmement local node check as first option in rpc call before going to network. --- src/ScraperProxy/scraper.cpp | 154 +++++++++++++++-------------- src/ScraperProxy/scraper.h | 3 + src/neuralnet/neuralnet_native.cpp | 10 +- src/rpcblockchain.cpp | 43 +++++--- 4 files changed, 123 insertions(+), 87 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index 4f8e012ae6..a812b56a8b 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -342,13 +342,13 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) { LOCK2(cs_Scraper, cs_StructScraperFileManifest); - _log(INFO, "LOCK2", "cs_Scraper, cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "LOCK2", "cs_Scraper, cs_StructScraperFileManifest"); //ScraperConstructConvergedManifest(StructConvergedManifest) sSBCoreData = ScraperGetNeuralContract(true, false); // END LOCK2(cs_Scraper, cs_StructScraperFileManifest); - _log(INFO, "ENDLOCK2", "cs_Scraper, cs_StructScraperFileManifest"); + if (fDebug) _log(INFO, "ENDLOCK2", "cs_Scraper, cs_StructScraperFileManifest"); } _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep / 1000) +" seconds"); @@ -1786,8 +1786,6 @@ ScraperStats GetScraperStatsByConvergedManifest(ConvergedManifest& StructConverg std::string ExplainMagnitude(std::string sCPID) { - stringbuilder out; - // See if converged stats/contract update needed... bool bConvergenceUpdateNeeded = true; { @@ -1803,7 +1801,7 @@ std::string ExplainMagnitude(std::string sCPID) } if (bConvergenceUpdateNeeded) - // Don't need the output. + // Don't need the output but will use the global cache, which will be updated. ScraperGetNeuralContract(false, false); // A purposeful copy here to avoid a long-term lock. May want to change to direct reference @@ -1819,70 +1817,74 @@ std::string ExplainMagnitude(std::string sCPID) if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } - /* Work in progress... needs to be changed, basically a cut and paste from the - * other stats functions. + stringbuilder out; - ScraperObjectStats ProjectStats = {}; + out.append("CPID,Project,RAC,Project_Total_RAC,Project_Avg_RAC,Project Mag,Cumulative RAC,Cumulative Mag,Errors"); - ProjectStats.statskey.objecttype = byProject; - ProjectStats.statskey.objectID = sCPID; + double dCPIDCumulativeRAC = 0.0; + double dCPIDCumulativeMag = 0.0; for (auto const& entry : mScraperConvergedStats) { + // Only select the individual byCPIDbyProject stats for the selected CPID. - std::string objectID = entry.first.objectID; - - std::size_t found = objectID.find(ProjectStats.statskey.objectID); - - if (entry.first.objecttype == byProject) - { - ProjectStats.statsvalue.dTC += entry.second.statsvalue.dTC; - ProjectStats.statsvalue.dRAT += entry.second.statsvalue.dRAT; - ProjectStats.statsvalue.dRAC += entry.second.statsvalue.dRAC; - ProjectStats.statsvalue.dMag += entry.second.statsvalue.dMag; - - //nProjectCount++; - //nCPIDProjectCount++; - } - } - - - - ScraperObjectStats CPIDStats = {}; - - CPIDStats.statskey.objecttype = byCPID; - CPIDStats.statskey.objectID = sCPID; - - for (auto const& entry : mScraperStats) - { - // Only select the individual byCPIDbyProject stats for the selected CPID. Leave out the project rollup (byProj) ones, - // otherwise dimension mixing will result. - - std::string objectID = entry.first.objectID; - - std::size_t found = objectID.find(CPIDStats.statskey.objectID); + std::size_t found = entry.first.objectID.find(sCPID); if (entry.first.objecttype == byCPIDbyProject && found!=std::string::npos) { - const auto& project = mScraperStats - - CPIDStats.statsvalue.dTC += entry.second.statsvalue.dTC; - CPIDStats.statsvalue.dRAT += entry.second.statsvalue.dRAT; - CPIDStats.statsvalue.dRAC += entry.second.statsvalue.dRAC; - CPIDStats.statsvalue.dMag += entry.second.statsvalue.dMag; - - //nProjectCount++; - //nCPIDProjectCount++; + dCPIDCumulativeRAC += entry.second.statsvalue.dRAC; + dCPIDCumulativeMag += entry.second.statsvalue.dMag; + + std::string sInput = entry.first.objectID; + + // Remove ,CPID from key objectID to obtain referenced project. + std::string sProject = sInput.erase(sInput.find("," + sCPID), sCPID.length() + 1); + + ScraperObjectStatsKey ProjectKey; + + ProjectKey.objecttype = byProject; + ProjectKey.objectID = sProject; + + auto const& iProject = mScraperConvergedStats.find(ProjectKey); + + out.append(sCPID + ","); + out.append(sProject + ","); + out.fixeddoubleappend(iProject->second.statsvalue.dRAC, 2); + out.append(","); + out.fixeddoubleappend(iProject->second.statsvalue.dAvgRAC, 2); + out.append(","); + out.fixeddoubleappend(iProject->second.statsvalue.dMag, 2); + out.append(","); + out.fixeddoubleappend(dCPIDCumulativeRAC, 2); + out.append(","); + out.fixeddoubleappend(dCPIDCumulativeMag, 2); + out.append(","); + //The last field is for errors, but there are not any, so the is next. + out.append(""); } } - */ + // "Signature" + // TODO: Why the magic version number of 430 from .NET? Should this be a constant? + // Also convert GetAdjustTime to human readable time. + // Should we take a lock on cs_main to read GlobalCPUMiningCPID? + out.append("NN Host Version: 430, "); + out.append("NeuralHash: " + ConvergedScraperStatsCache.nContractHash.GetHex() + ", "); + out.append("SignatureCPID: " + GlobalCPUMiningCPID.cpid + ", "); + out.append("Time: " + std::to_string(GetAdjustedTime()) + ""); - //stub + //Totals + out.append("Total RAC: "); + out.fixeddoubleappend(dCPIDCumulativeRAC, 2); + out.append(""); + out.append("Total Mag: "); + out.fixeddoubleappend(dCPIDCumulativeMag, 2); - return std::string(""); + return out.value(); } + + /*********************** * Scraper networking * ************************/ @@ -2085,10 +2087,10 @@ bool ScraperSendFileManifestContents(std::string sCManifestName) std::string sinputfile = inputfile.string(); std::string suffix = ".csv.gz"; - std::string ETag = sinputfile.erase(sinputfile.find(sProject), sProject.length()); - ETag = sinputfile.erase(sinputfile.find(suffix), suffix.length()); - - ProjectEntry.ETag = ETag; + // Remove project- + sinputfile.erase(sinputfile.find(sProject), sProject.length()); + // Remove suffix. What is left is the ETag. + ProjectEntry.ETag = sinputfile.erase(sinputfile.find(suffix), suffix.length()); ProjectEntry.LastModified = entry.second.timestamp; @@ -2498,7 +2500,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi { // If not in sync then immediately bail with a empty string. if (OutOfSyncByAge()) - return std::string(""); + return std::string(); // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep / 1000 old (for seconds), then simply report back the cache contents. // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with @@ -2539,6 +2541,16 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (bStoreConvergedStats) + { + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); + else + _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); + } + // I know this involves a copy operation, but it minimizes the lock time on the cache... we may want to // lock before and do a direct assignment, but that will lock the cache for the whole stats computation, // which is not really necessary. @@ -2546,25 +2558,17 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi LOCK(cs_ConvergedScraperStatsCache); if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; ConvergedScraperStatsCache.nTime = GetAdjustedTime(); + ConvergedScraperStatsCache.nContractHash = Hash(sSBCoreData.begin(), sSBCoreData.end()); + ConvergedScraperStatsCache.sContract = sSBCoreData; // End LOCK(cs_ConvergedScraperStatsCache) if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); } - _log(INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); - - if (bStoreConvergedStats) - { - if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) - _log(ERROR, "ScraperGetNeuralContract", "StoreStats error occurred"); - else - _log(INFO, "ScraperGetNeuralContract", "Stored converged stats."); - } - - sSBCoreData = GenerateSBCoreDataFromScraperStats(mScraperConvergedStats); if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data from convergence \n" + sSBCoreData); @@ -2574,8 +2578,9 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi return sSBCoreData; } else - return std::string(""); + return std::string(); } + // If bContractDirectFromStatsUpdate is true, then this is the single shot pass. else if (IsScraperAuthorized()) { // This part is the "second trip through from ScraperSynchronizeDPOR() as a fallback, if @@ -2599,11 +2604,12 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi } else { + // If we are here, we are using cached information. + LOCK(cs_ConvergedScraperStatsCache); if (fDebug) _log(INFO, "LOCK", "cs_ConvergedScraperStatsCache"); - - sSBCoreData = GenerateSBCoreDataFromScraperStats(ConvergedScraperStatsCache.mScraperConvergedStats); + sSBCoreData = ConvergedScraperStatsCache.sContract; if (fDebug) _log(INFO, "ScraperGetNeuralContract", "SB Core Data from cached converged stats\n" + sSBCoreData); @@ -2612,10 +2618,10 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi // End LOCK(cs_ConvergedScraperStatsCache) if (fDebug) _log(INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + } - // If we got here, then no contract so return empty string. - return std::string(""); + return sSBCoreData; } diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index 0312d3e6ae..c0354ba4d3 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -33,6 +33,7 @@ #include "appcache.h" #include "beacon.h" #include "wallet.h" +#include "global_objects_noui.hpp" #include #include "net.h" @@ -182,6 +183,8 @@ struct ConvergedScraperStats { int64_t nTime; ScraperStats mScraperConvergedStats; + uint256 nContractHash; + std::string sContract; }; /********************* diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index 7893a57683..e31ea3f1c8 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -1,5 +1,6 @@ #include "neuralnet_native.h" #include "version.h" +#include "util.h" #include @@ -7,6 +8,7 @@ extern std::string GetArgument(const std::string& arg, const std::string& defaul extern std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); extern std::string ScraperGetNeuralHash(); extern bool ScraperSynchronizeDPOR(); +extern std::string ExplainMagnitude(std::string sCPID); using namespace NN; @@ -41,7 +43,13 @@ bool NeuralNetNative::SynchronizeDPOR(const std::string& data) std::string NeuralNetNative::ExecuteDotNetStringFunction(std::string function, std::string data) { - return std::string(); + if (function == "ExplainMag") + return ExplainMagnitude(data); + else + { + LogPrintf("ExecuteDotNetStringFunction(%s) not handled yet. Returning empty string.", function); + return std::string(); + } } int64_t NeuralNetNative::IsNeuralNet() diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 18b1acea62..84ccf50131 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1242,31 +1242,50 @@ UniValue explainmagnitude(const UniValue& params, bool fHelp) LOCK(cs_main); - if (bForce) + // First try local node before bothering network... + + std::string sNeuralResponse = NN::GetInstance()->ExecuteDotNetStringFunction("ExplainMag", GlobalCPUMiningCPID.cpid); + + if (sNeuralResponse.length() < 25) { - if (msNeuralResponse.length() < 25) + if (bForce) { - res.pushKV("Neural Response", "Empty; Requesting a response.."); - res.pushKV("WARNING", "Only force once and try again without force if response is not received. Doing too many force attempts gets a temporary ban from neural node responses"); + if (msNeuralResponse.length() < 25) + { + res.pushKV("Neural Response", "Empty; Requesting a response.."); + res.pushKV("WARNING", "Only force once and try again without force if response is not received. Doing too many force attempts gets a temporary ban from neural node responses"); - msNeuralResponse = ""; + msNeuralResponse = ""; - AsyncNeuralRequest("explainmag", GlobalCPUMiningCPID.cpid, 10); + AsyncNeuralRequest("explainmag", GlobalCPUMiningCPID.cpid, 10); + } } - } - if (msNeuralResponse.length() > 25) + if (msNeuralResponse.length() > 25) + { + res.pushKV("Neural Response", "true"); + + std::vector vMag = split(msNeuralResponse.c_str(),""); + + for (unsigned int i = 0; i < vMag.size(); i++) + res.pushKV(RoundToString(i+1,0),vMag[i].c_str()); + } + + else + res.pushKV("Neural Response", "false; Try again at a later time"); + + } + // the local response was good so use it instead. + else { - res.pushKV("Neural Response", "true"); + res.pushKV("Neural Response", "true (from THIS node)"); - std::vector vMag = split(msNeuralResponse.c_str(),""); + std::vector vMag = split(sNeuralResponse.c_str(),""); for (unsigned int i = 0; i < vMag.size(); i++) res.pushKV(RoundToString(i+1,0),vMag[i].c_str()); } - else - res.pushKV("Neural Response", "false; Try again at a later time"); return res; } From c91b1845dacb3f9dc37ff59090c892954b98648b Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 25 Dec 2018 14:48:25 -0500 Subject: [PATCH 090/359] Adjustments for proper NN operation This commit makes a few small adjustments to ensure the new NN is fully enabled when selected, and also that when running on Windows, the old NN is disabled if the new NN is selected. --- src/main.cpp | 5 +++- src/qt/bitcoingui.cpp | 56 ++++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 68d5326298..e058f65923 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -307,7 +307,10 @@ bool TimerMain(std::string timer_name, int max_ms) bool UpdateNeuralNetworkQuorumData() { - if (!bGlobalcomInitialized) return false; + //if (!bGlobalcomInitialized) return false; + // Changed to check if the -disableneuralnetwork was passed, not whether bGlobalcomInitialized, + // because it must support the new native NN too. + if (!NN::GetInstance()->IsEnabled()) return false; int64_t superblock_time = ReadCache(Section::SUPERBLOCK, "magnitudes").timestamp; int64_t superblock_age = GetAdjustedTime() - superblock_time; std::string myNeuralHash = ""; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index ccce081e1e..001026a1ab 100755 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -621,9 +621,15 @@ void BitcoinGUI::createMenuBar() community->addSeparator(); community->addAction(websiteAction); -#ifdef WIN32 // actions in this menu are on .NET dll side only show this menu for windows - QMenu *qmAdvanced = appMenuBar->addMenu(tr("&Advanced")); - qmAdvanced->addAction(miningAction); + // For right now, actions in this menu are on .NET dll side. Only show this menu for Windows and + // if the old .net NN is active. If the new native NN is used, disable. + // Once a graphical UI is created for the new native NN, then this will be changed. +#ifdef WIN32 + if(!GetBoolArg("-usenewnn")) + { + QMenu *qmAdvanced = appMenuBar->addMenu(tr("&Advanced")); + qmAdvanced->addAction(miningAction); + } #endif /* defined(WIN32) */ QMenu *help = appMenuBar->addMenu(tr("&Help")); @@ -1515,31 +1521,37 @@ std::string getMacAddress() } +// This function's name is misleading, it is also used to first instantiate globalcom as +// well as reinstantiate it. void ReinstantiateGlobalcom() { #ifdef WIN32 - if (bGlobalcomInitialized) - return; - - // Note, on Windows, if the performance counters are corrupted, rebuild them - // by going to an elevated command prompt and issue the command: lodctr /r - // (to rebuild the performance counters in the registry) - LogPrintf("Instantiating globalcom for Windows."); - try - { - globalcom = new QAxObject("BoincStake.Utilization"); - LogPrintf("Instantiated globalcom for Windows."); - } - catch(...) + // If the new native NN is selected we do not want to start up the old NN. + if(!GetBoolArg("-usenewnn")) { - LogPrintf("Failed to instantiate globalcom."); + if (bGlobalcomInitialized) + return; - return; - } + // Note, on Windows, if the performance counters are corrupted, rebuild them + // by going to an elevated command prompt and issue the command: lodctr /r + // (to rebuild the performance counters in the registry) + LogPrintf("Instantiating globalcom for Windows."); + try + { + globalcom = new QAxObject("BoincStake.Utilization"); + LogPrintf("Instantiated globalcom for Windows."); + } + catch(...) + { + LogPrintf("Failed to instantiate globalcom."); + + return; + } - bGlobalcomInitialized = true; - std::string sNetworkFlag = fTestNet ? "TESTNET" : "MAINNET"; - globalcom->dynamicCall("SetTestNetFlag(QString)", ToQstring(sNetworkFlag)); + bGlobalcomInitialized = true; + std::string sNetworkFlag = fTestNet ? "TESTNET" : "MAINNET"; + globalcom->dynamicCall("SetTestNetFlag(QString)", ToQstring(sNetworkFlag)); + } #endif } From 894734e0169e617e4ea1cdd02e2096e8cda4acd6 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 25 Dec 2018 18:31:39 -0500 Subject: [PATCH 091/359] Fix duplicate fclose under curl error This was causing an occasional segmentation fault. --- src/ScraperProxy/scraper.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index c0354ba4d3..a18987a233 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -452,13 +452,12 @@ class statscurl //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); - fclose(fp); + + if(fp) + fclose(fp); if (res > 0) { - if (fp) - fclose(fp); - _log(ERROR, "curl_http_download", "Failed to download file (" + curl_easy_strerror(res) + ")"); return false; @@ -584,13 +583,12 @@ class statscurl //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); res = curl_easy_perform(curl); - fclose(fp); + + if (fp) + fclose(fp); if (res > 0) { - if (fp) - fclose(fp); - _log(ERROR, "curl_http_download", "Failed to download file (" + curl_easy_strerror(res) + ")"); return false; From e2bad37ae5a7cf3b04ce9c483642350028d47aef Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 27 Dec 2018 00:38:08 -0500 Subject: [PATCH 092/359] Another attemot to fix rare segmentation fault. --- src/ScraperProxy/scraper.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index a812b56a8b..a884ca2e0e 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -806,6 +806,10 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // Set fileerror flag to true until made false by the completion of one successful injection of user stats into stream. bool bfileerror = true; + // If passed an empty file, immediately return false. + if (file.string().empty()) + return false; + std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) @@ -1439,9 +1443,8 @@ bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& fi in.push(ingzfile); // TODO implement file error handling - bool bcomplete = false; - bool bfileerror = false; - std::vector vXML; + // bool bcomplete = false; + // bool bfileerror = false; bool bResult = ProcessProjectStatsFromStreamByCPID(project, in, projectmag, mBeaconMap, mScraperStats); From a3e6cae4a94573ed4113862abe9c3ad0d0665c86 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 27 Dec 2018 00:42:18 -0500 Subject: [PATCH 093/359] Change SCRAPER_CMANIFEST_RETENTION_TIME to 48 hrs --- src/ScraperProxy/scraper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScraperProxy/scraper.h b/src/ScraperProxy/scraper.h index a18987a233..0442397ca0 100755 --- a/src/ScraperProxy/scraper.h +++ b/src/ScraperProxy/scraper.h @@ -198,7 +198,7 @@ static int64_t SCRAPER_FILE_RETENTION_TIME = 48 * 3600; // Define whether prior CScraperManifests are kept. static bool SCRAPER_CMANIFEST_RETAIN_NONCURRENT = true; // Define CManifest scraper object retention time. -static int64_t SCRAPER_CMANIFEST_RETENTION_TIME = 3 * 3600; +static int64_t SCRAPER_CMANIFEST_RETENTION_TIME = 48 * 3600; static bool SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES = false; static const double MAG_ROUND = 0.01; static const double NEURALNETWORKMULTIPLIER = 115000; From 04312ef89771bde6a55d4ee37b2a13879b060b1d Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Wed, 26 Dec 2018 10:37:46 +0100 Subject: [PATCH 094/359] Move old .NET calls into neuralnet_win. This greatly cleans up the GUI code as it no longer needs to track the QAxObject instantiation. It also isolates the old NN implementation, making it easier to replace. --- src/Makefile.qt.include | 2 +- src/neuralnet/neuralnet.h | 5 + src/neuralnet/neuralnet_native.cpp | 3 + src/neuralnet/neuralnet_native.h | 1 + src/neuralnet/neuralnet_stub.cpp | 3 + src/neuralnet/neuralnet_stub.h | 1 + src/neuralnet/neuralnet_win.cpp | 78 -------- src/qt/bitcoin.cpp | 10 +- src/qt/bitcoingui.cpp | 270 ++------------------------ src/qt/bitcoingui.h | 17 +- src/qt/neuralnet_win.cpp | 91 +++++++++ src/{neuralnet => qt}/neuralnet_win.h | 16 +- src/qt/sendcoinsentry.cpp | 4 - src/qt/transactiondescdialog.cpp | 2 - src/rpcblockchain.cpp | 1 - 15 files changed, 133 insertions(+), 371 deletions(-) delete mode 100644 src/neuralnet/neuralnet_win.cpp create mode 100644 src/qt/neuralnet_win.cpp rename src/{neuralnet => qt}/neuralnet_win.h (72%) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 1d7ab0f638..4ac3b87c1d 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -334,7 +334,7 @@ qt_libgridcoinqt_a_SOURCES = $(GRIDCOINRESEARCH_QT_CPP) $(GRIDCOINRESEARCH_QT_H) $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(RES_STYLESHEETS) if TARGET_WINDOWS -qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) neuralnet/neuralnet_win.cpp +qt_libgridcoinqt_a_SOURCES += $(GRIDCOIN_CORE_H) $(GRIDCOIN_CORE_CPP) qt/neuralnet_win.cpp qt_libgridcoinqt_a_CXXFLAGS += -DUNICODE endif diff --git a/src/neuralnet/neuralnet.h b/src/neuralnet/neuralnet.h index 4db26e663f..a723c5aee6 100644 --- a/src/neuralnet/neuralnet.h +++ b/src/neuralnet/neuralnet.h @@ -80,6 +80,11 @@ namespace NN virtual std::string ExecuteDotNetStringFunction(std::string function, std::string data) = 0; virtual int64_t IsNeuralNet() = 0; + + //! + //! \brief Show UI if available. + //! + virtual void Show() = 0; }; //! diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index e31ea3f1c8..eb0f2805ec 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -58,3 +58,6 @@ int64_t NeuralNetNative::IsNeuralNet() int64_t nNeuralNetVersion = 1999; return nNeuralNetVersion; } + +void NeuralNetNative::Show() +{} diff --git a/src/neuralnet/neuralnet_native.h b/src/neuralnet/neuralnet_native.h index 0b25e4a0fd..a0f2ad6266 100644 --- a/src/neuralnet/neuralnet_native.h +++ b/src/neuralnet/neuralnet_native.h @@ -20,5 +20,6 @@ namespace NN bool SynchronizeDPOR(const std::string& data); std::string ExecuteDotNetStringFunction(std::string function, std::string data); int64_t IsNeuralNet(); + void Show(); }; } diff --git a/src/neuralnet/neuralnet_stub.cpp b/src/neuralnet/neuralnet_stub.cpp index ec677356be..4d096f79d1 100644 --- a/src/neuralnet/neuralnet_stub.cpp +++ b/src/neuralnet/neuralnet_stub.cpp @@ -38,3 +38,6 @@ int64_t NeuralNetStub::IsNeuralNet() { return 0; } + +void NeuralNetStub::Show() +{} diff --git a/src/neuralnet/neuralnet_stub.h b/src/neuralnet/neuralnet_stub.h index f9c3aa0f30..6a204341e1 100644 --- a/src/neuralnet/neuralnet_stub.h +++ b/src/neuralnet/neuralnet_stub.h @@ -20,5 +20,6 @@ namespace NN bool SynchronizeDPOR(const std::string& data); std::string ExecuteDotNetStringFunction(std::string function, std::string data); int64_t IsNeuralNet(); + void Show(); }; } diff --git a/src/neuralnet/neuralnet_win.cpp b/src/neuralnet/neuralnet_win.cpp deleted file mode 100644 index 6e0971c914..0000000000 --- a/src/neuralnet/neuralnet_win.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "neuralnet_win.h" -#include "version.h" -#include "sync.h" -#include "util.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -// Old VB based NeuralNet. -extern std::string qtGetNeuralHash(std::string data); -extern std::string qtGetNeuralContract(std::string data); -extern double qtExecuteGenericFunction(std::string function,std::string data); -extern std::string qtExecuteDotNetStringFunction(std::string function,std::string data); -extern void qtSyncWithDPORNodes(std::string data); -int64_t IsNeural(); - -using namespace NN; - -namespace -{ - // Static factory registration. - bool registered = []() - { - NN::Factory factory([]() { return std::make_shared(); }); - NN::RegisterFactory(factory); - return true; - }; -} - -// While transitioning to dotnet the NeuralNet implementation has been split -// into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. -// After the transition both Win32 implementations can be removed. - -// Win32 with Qt enabled. -bool NeuralNetWin32::IsEnabled() -{ -return GetArgument("disableneuralnetwork", "false") == "false"; -} - -std::string NeuralNetWin32::GetNeuralVersion() -{ - int neural_id = static_cast(IsNeural()); - return std::to_string(CLIENT_VERSION_MINOR) + "." + std::to_string(neural_id); -} - -std::string NeuralNetWin32::GetNeuralHash() -{ - return qtGetNeuralHash(""); -} - -std::string NeuralNetWin32::GetNeuralContract() -{ - return qtGetNeuralContract(""); -} - -bool NeuralNetWin32::SynchronizeDPOR(const std::string& data) -{ - qtSyncWithDPORNodes(data); - return true; -} - -std::string NeuralNetWin32::ExecuteDotNetStringFunction(std::string function, std::string data) -{ - return qtExecuteDotNetStringFunction(function, data); -} - -int64_t NeuralNetWin32::IsNeuralNet() -{ - return IsNeural(); -} diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index cb9eb08485..c554fe5f85 100755 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -58,13 +58,6 @@ Q_IMPORT_PLUGIN(QSvgIconPlugin); static BitcoinGUI *guiref; static QSplashScreen *splashref; -//Global reference to globalcom - -#ifdef WIN32 -static QAxObject *globalcom; -#endif - - static void ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style) { // Message from network thread @@ -320,8 +313,7 @@ int main(int argc, char *argv[]) QObject::connect(timer, SIGNAL(timeout()), guiref, SLOT(timerfire())); - //Start globalcom - if (!threads->createThread(ThreadAppInit2,threads,"AppInit2 Thread")) + if (!threads->createThread(ThreadAppInit2,threads,"AppInit2 Thread")) { LogPrintf("Error; NewThread(ThreadAppInit2) failed"); return 1; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 001026a1ab..acf11f885f 100755 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -7,15 +7,7 @@ #include - -#if defined(WIN32) && defined(QT_GUI) -#include -#include -#include -#endif - #include -// include // Future Use #include @@ -51,6 +43,7 @@ #include "backup.h" #include "clicklabel.h" #include "univalue.h" +#include "neuralnet/neuralnet.h" #ifdef Q_OS_MAC #include "macdockiconhandler.h" @@ -100,34 +93,18 @@ extern CWallet* pwalletMain; extern QString ToQstring(std::string s); -extern void qtSetSessionInfo(std::string defaultgrcaddress, std::string cpid, double magnitude); -extern void qtSyncWithDPORNodes(std::string data); -extern double qtExecuteGenericFunction(std::string function,std::string data); extern std::string getMacAddress(); extern std::string FromQString(QString qs); extern std::string qtExecuteDotNetStringFunction(std::string function, std::string data); std::string ExtractXML(std::string XMLdata, std::string key, std::string key_end); - -extern std::string qtGetNeuralHash(std::string data); -extern std::string qtGetNeuralContract(std::string data); - -extern int64_t IsNeural(); - std::string getfilecontents(std::string filename); -int nRegVersion; void GetGlobalStatus(); bool IsConfigFileEmpty(); void HarvestCPIDs(bool cleardata); -void ReinstantiateGlobalcom(); - -#ifdef WIN32 -QAxObject *globalcom = NULL; -QAxObject *globalwire = NULL; -#endif QString ToQstring(std::string s) { @@ -243,164 +220,12 @@ BitcoinGUI::~BitcoinGUI() #endif } -int CreateRestorePoint() -{ - if (!bGlobalcomInitialized) - return 0; - -#ifdef WIN32 - globalcom->dynamicCall(fTestNet - ? "CreateRestorePointTestNet()" - : "CreateRestorePoint()"); -#endif - - return 1; -} - -//R Halford - 6/19/2015 - Let's clean up the windows side by removing all these functions and making a generic interface for comm between Windows and Linux; Start with one new generic function here: - -double qtExecuteGenericFunction(std::string function, std::string data) -{ - if (!bGlobalcomInitialized) return 0; - - int result = 0; - #if defined(WIN32) && defined(QT_GUI) - QString qsData = ToQstring(data); - QString qsFunction = ToQstring(function +"(Qstring)"); - std::string sFunction = function+"(Qstring)"; - if (data=="") - { - sFunction = function + "()"; - globalcom->dynamicCall(sFunction.c_str()); - } - else - { - result = globalcom->dynamicCall(sFunction.c_str(),qsData).toInt(); - } - #endif - return result; -} - - - -std::string qtExecuteDotNetStringFunction(std::string function, std::string data) -{ - std::string sReturnData = ""; - if (!bGlobalcomInitialized) return ""; - - #if defined(WIN32) && defined(QT_GUI) - if (!bGlobalcomInitialized) return "?"; - QString qsData = ToQstring(data); - QString qsFunction = ToQstring(function +"(Qstring)"); - std::string sFunction = function+"(Qstring)"; - QString qsReturnData = globalcom->dynamicCall(sFunction.c_str(),qsData).toString(); - sReturnData = FromQString(qsReturnData); - return sReturnData; - #endif - return sReturnData; -} - - - -void qtSyncWithDPORNodes(std::string data) -{ - - #if defined(WIN32) && defined(QT_GUI) - if (!bGlobalcomInitialized) return; - QString qsData = ToQstring(data); - if (fDebug3) LogPrintf("FullSyncWDporNodes"); - int result = globalcom->dynamicCall("SyncCPIDsWithDPORNodes(Qstring)",qsData).toInt(); - LogPrintf("Done syncing. %d", result); - #endif -} - - std::string FromQString(QString qs) { std::string sOut = qs.toUtf8().constData(); return sOut; } - - -std::string qtGetNeuralContract(std::string data) -{ - - #if defined(WIN32) && defined(QT_GUI) - try - { - if (!bGlobalcomInitialized) return "NA"; - QString qsData = ToQstring(data); - //if (fDebug3) LogPrintf("GNC# "); - QString sResult = globalcom->dynamicCall("GetNeuralContract()").toString(); - std::string result = FromQString(sResult); - return result; - } - catch(...) - { - return "?"; - } - #else - return "?"; - #endif -} - - - -std::string qtGetNeuralHash(std::string data) -{ - - #if defined(WIN32) && defined(QT_GUI) - try - { - if (!bGlobalcomInitialized) return "NA"; - - QString qsData = ToQstring(data); - QString sResult = globalcom->dynamicCall("GetNeuralHash()").toString(); - std::string result = FromQString(sResult); - return result; - } - catch(...) - { - return "?"; - } - #else - return "?"; - #endif -} - -void qtSetSessionInfo(std::string defaultgrcaddress, std::string cpid, double magnitude) -{ - - if (!bGlobalcomInitialized) return; - - #if defined(WIN32) && defined(QT_GUI) - std::string session = defaultgrcaddress + "" + cpid + "" + RoundToString(magnitude,1); - QString qsSession = ToQstring(session); - int result = globalcom->dynamicCall("SetSessionInfo(Qstring)",qsSession).toInt(); - LogPrintf("Set session info result %d", result); - #endif -} - -int64_t IsNeural() -{ - if (!bGlobalcomInitialized) return 0; - try - { - //NeuralNetwork - int nNeural = 0; -#ifdef WIN32 - nNeural = globalcom->dynamicCall("NeuralNetwork()").toInt(); -#endif - return nNeural; - } - catch(...) - { - LogPrintf("Exception"); - return 0; - } -} - void BitcoinGUI::setOptionsStyleSheet(QString qssFileName) { // setting the style sheets for the app @@ -501,13 +326,9 @@ void BitcoinGUI::createActions() aboutAction->setToolTip(tr("Show information about Gridcoin")); aboutAction->setMenuRole(QAction::AboutRole); - miningAction = new QAction(tr("&Neural Network"), this); - miningAction->setStatusTip(tr("Neural Network")); - miningAction->setMenuRole(QAction::TextHeuristicRole); - - newUserWizardAction = new QAction(tr("&New User Wizard"), this); - newUserWizardAction->setStatusTip(tr("New User Wizard")); - newUserWizardAction->setMenuRole(QAction::TextHeuristicRole); + showNeuralNetAction = new QAction(tr("&Neural Network"), this); + showNeuralNetAction->setStatusTip(tr("Neural Network")); + showNeuralNetAction->setMenuRole(QAction::TextHeuristicRole); diagnosticsAction = new QAction(tr("&Diagnostics"), this); diagnosticsAction->setStatusTip(tr("Diagnostics")); @@ -547,9 +368,8 @@ void BitcoinGUI::createActions() connect(lockWalletAction, SIGNAL(triggered()), this, SLOT(lockWallet())); connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab())); connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab())); - connect(miningAction, SIGNAL(triggered()), this, SLOT(miningClicked())); + connect(showNeuralNetAction, SIGNAL(triggered()), this, SLOT(miningClicked())); connect(diagnosticsAction, SIGNAL(triggered()), this, SLOT(diagnosticsClicked())); - connect(newUserWizardAction, SIGNAL(triggered()), this, SLOT(newUserWizardClicked())); } void BitcoinGUI::setIcons() @@ -572,8 +392,7 @@ void BitcoinGUI::setIcons() boincAction->setIcon(QPixmap(":/images/boinc")); quitAction->setIcon(QPixmap(":/icons/quit")); aboutAction->setIcon(QPixmap(":/images/gridcoin")); - miningAction->setIcon(QPixmap(":/images/gridcoin")); - newUserWizardAction->setIcon(QPixmap(":/images/gridcoin")); + showNeuralNetAction->setIcon(QPixmap(":/images/gridcoin")); diagnosticsAction->setIcon(QPixmap(":/images/gridcoin")); optionsAction->setIcon(QPixmap(":/icons/options")); toggleHideAction->setIcon(QPixmap(":/images/gridcoin")); @@ -628,7 +447,7 @@ void BitcoinGUI::createMenuBar() if(!GetBoolArg("-usenewnn")) { QMenu *qmAdvanced = appMenuBar->addMenu(tr("&Advanced")); - qmAdvanced->addAction(miningAction); + qmAdvanced->addAction(showNeuralNetAction); } #endif /* defined(WIN32) */ @@ -1184,24 +1003,11 @@ void BitcoinGUI::diagnosticsClicked() diagnosticsDialog->activateWindow(); } -void BitcoinGUI::newUserWizardClicked() -{ -#ifdef WIN32 - if (!bGlobalcomInitialized) return; - globalcom->dynamicCall("ShowNewUserWizard()"); -#endif -} - void BitcoinGUI::miningClicked() { - -#ifdef WIN32 - if (!bGlobalcomInitialized) return; - globalcom->dynamicCall("ShowMiningConsole()"); -#endif + NN::GetInstance()->Show(); } - // links to websites and services outside the gridcoin client void BitcoinGUI::bxClicked() { @@ -1520,66 +1326,12 @@ std::string getMacAddress() return myMac; } - -// This function's name is misleading, it is also used to first instantiate globalcom as -// well as reinstantiate it. -void ReinstantiateGlobalcom() -{ -#ifdef WIN32 - // If the new native NN is selected we do not want to start up the old NN. - if(!GetBoolArg("-usenewnn")) - { - if (bGlobalcomInitialized) - return; - - // Note, on Windows, if the performance counters are corrupted, rebuild them - // by going to an elevated command prompt and issue the command: lodctr /r - // (to rebuild the performance counters in the registry) - LogPrintf("Instantiating globalcom for Windows."); - try - { - globalcom = new QAxObject("BoincStake.Utilization"); - LogPrintf("Instantiated globalcom for Windows."); - } - catch(...) - { - LogPrintf("Failed to instantiate globalcom."); - - return; - } - - bGlobalcomInitialized = true; - std::string sNetworkFlag = fTestNet ? "TESTNET" : "MAINNET"; - globalcom->dynamicCall("SetTestNetFlag(QString)", ToQstring(sNetworkFlag)); - } -#endif -} - void BitcoinGUI::timerfire() { try { - if ( (nRegVersion==0 || Timer("start",10)) && !bGlobalcomInitialized) - { - ReinstantiateGlobalcom(); - nRegVersion=9999; - - static bool bNewUserWizardNotified = false; - if (!bNewUserWizardNotified) - { - bNewUserWizardNotified=true; - NewUserWizard(); - } -#ifdef WIN32 - if (!bGlobalcomInitialized) return; - - nRegVersion = globalcom->dynamicCall("Version()").toInt(); - sRegVer = boost::lexical_cast(nRegVersion); -#endif - } - - - if (bGlobalcomInitialized) + // TODO: Check if these SetRPCResponse calls are really needed. + /*if (bGlobalcomInitialized) { //R Halford - Allow .NET to talk to Core: 6-21-2015 #ifdef WIN32 @@ -1604,7 +1356,7 @@ void BitcoinGUI::timerfire() } } #endif - } + }*/ if (Timer("status_update",5)) { diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 03bfb96e82..a5a1252380 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -6,12 +6,6 @@ #include #include -#if defined(WIN32) && defined(QT_GUI) -#include -#include -#include -#endif - class TransactionTableModel; class ClientModel; class WalletModel; @@ -95,14 +89,9 @@ class BitcoinGUI : public QMainWindow QAction *boincAction; QAction *chatAction; QAction *exchangeAction; - - QAction *miningAction; - + QAction *showNeuralNetAction; QAction *votingAction; - - QAction *newUserWizardAction; QAction *diagnosticsAction; - QAction *verifyMessageAction; QAction *aboutAction; QAction *receiveCoinsAction; @@ -203,12 +192,8 @@ private slots: void boincClicked(); void boincStatsClicked(); void chatClicked(); - void miningClicked(); - void diagnosticsClicked(); - - void newUserWizardClicked(); #ifndef Q_OS_MAC /** Handle tray icon clicked */ diff --git a/src/qt/neuralnet_win.cpp b/src/qt/neuralnet_win.cpp new file mode 100644 index 0000000000..2858010145 --- /dev/null +++ b/src/qt/neuralnet_win.cpp @@ -0,0 +1,91 @@ +#include "neuralnet_win.h" +#include "version.h" +#include "sync.h" +#include "util.h" + +#include +#include +#include +#include + +#include +#include +#include + +extern bool fTestNet; + +using namespace NN; + +namespace +{ + // Static factory registration. + bool registered = []() + { + NN::Factory factory([]() { return std::make_shared(); }); + NN::RegisterFactory(factory); + return true; + }; +} + +// While transitioning to dotnet the NeuralNet implementation has been split +// into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. +// After the transition both Win32 implementations can be removed. + +// Win32 with Qt enabled. +NeuralNetWin32::NeuralNetWin32() + : globalcom(new QAxObject("BoincStake.Utilization")) +{ + LogPrintf("Initializing Neuralnet"); + globalcom->dynamicCall("SetTestNetFlag(QString)", QString(fTestNet ? "TESTNET" : "MAINNET")); +} + +bool NeuralNetWin32::IsEnabled() +{ + return GetArgument("disableneuralnetwork", "false") == "false"; +} + +std::string NeuralNetWin32::GetNeuralVersion() +{ + int neural_id = static_cast(IsNeuralNet()); + return std::to_string(CLIENT_VERSION_MINOR) + "." + std::to_string(neural_id); +} + +std::string NeuralNetWin32::GetNeuralHash() +{ + QString res = globalcom->dynamicCall("GetNeuralHash()").toString(); + return res.toStdString(); +} + +std::string NeuralNetWin32::GetNeuralContract() +{ + return globalcom->dynamicCall("GetNeuralContract()").toString().toStdString(); +} + +bool NeuralNetWin32::SynchronizeDPOR(const std::string& data) +{ + int result = globalcom->dynamicCall( + "SyncCPIDsWithDPORNodes(Qstring)", + data.c_str()).toInt(); + + LogPrintf("Done syncing. %d", result); + return true; +} + +std::string NeuralNetWin32::ExecuteDotNetStringFunction(std::string function, std::string data) +{ + std::string request = function+"(Qstring)"; + QString result = globalcom->dynamicCall( + request.c_str(), + data.c_str()).toString(); + return result.toStdString(); +} + +int64_t NeuralNetWin32::IsNeuralNet() +{ + return globalcom->dynamicCall("NeuralNetwork()").toInt(); +} + +void NeuralNetWin32::Show() +{ + globalcom->dynamicCall("ShowMiningConsole()"); +} diff --git a/src/neuralnet/neuralnet_win.h b/src/qt/neuralnet_win.h similarity index 72% rename from src/neuralnet/neuralnet_win.h rename to src/qt/neuralnet_win.h index f1f425a591..11638cfa0a 100644 --- a/src/neuralnet/neuralnet_win.h +++ b/src/qt/neuralnet_win.h @@ -1,6 +1,13 @@ #pragma once -#include "neuralnet.h" +#include "neuralnet/neuralnet.h" + +#include +#include + +QT_BEGIN_NAMESPACE +class QAxObject; +QT_END_NAMESPACE namespace NN { @@ -12,6 +19,10 @@ namespace NN //! class NeuralNetWin32 : public INeuralNet { + public: + // Constructor + NeuralNetWin32(); + private: // Documentation in interface. bool IsEnabled(); @@ -21,5 +32,8 @@ namespace NN bool SynchronizeDPOR(const std::string& data); std::string ExecuteDotNetStringFunction(std::string function, std::string data); int64_t IsNeuralNet(); + void Show(); + + std::unique_ptr globalcom; }; } diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index 736658261e..faf3c33afa 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -10,10 +10,6 @@ #include #include - - -std::string qtExecuteDotNetStringFunction(std::string function, std::string data); - SendCoinsEntry::SendCoinsEntry(QWidget *parent) : QFrame(parent), ui(new Ui::SendCoinsEntry), diff --git a/src/qt/transactiondescdialog.cpp b/src/qt/transactiondescdialog.cpp index f263393b3b..699dfc3087 100644 --- a/src/qt/transactiondescdialog.cpp +++ b/src/qt/transactiondescdialog.cpp @@ -7,8 +7,6 @@ #include QString ToQString(std::string s); -std::string qtExecuteDotNetStringFunction(std::string function, std::string data); - TransactionDescDialog::TransactionDescDialog(const QModelIndex &idx, QWidget *parent) : QDialog(parent), diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 84ccf50131..30482d89e1 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -90,7 +90,6 @@ extern std::string GetPollXMLElementByPollTitle(std::string pollname, std::strin extern UniValue GetJSONBeaconReport(); void GatherNeuralHashes(); -void qtSyncWithDPORNodes(std::string data); extern bool TallyMagnitudesInSuperblock(); double GetTotalBalance(); From d46af00646c1920411b7d871c5f1e83d57ce20ea Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Wed, 26 Dec 2018 17:14:40 +0100 Subject: [PATCH 095/359] Ensure proper initialization order. --- src/neuralnet/neuralnet.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index a0ed2f1ab6..5cd886ef98 100755 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -12,12 +12,18 @@ using namespace NN; namespace { INeuralNetPtr instance; - std::vector factories; + + typedef std::vector FactoryCollection; + FactoryCollection& GetFactoryCollection() + { + static FactoryCollection factories; + return factories; + } } void NN::RegisterFactory(const Factory &factory) { - factories.push_back(factory); + GetFactoryCollection().push_back(factory); } INeuralNetPtr NN::CreateNeuralNet() @@ -26,7 +32,7 @@ INeuralNetPtr NN::CreateNeuralNet() return std::make_shared(); // Try to instantiate via injected factories - for(auto factory : factories) + for(auto factory : GetFactoryCollection()) { INeuralNetPtr obj = factory(); if(obj) From 357f61016d204fe2091b5175cc752b54dcfde9f9 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Wed, 26 Dec 2018 17:14:57 +0100 Subject: [PATCH 096/359] Move old neuralnet factory to bitcoingui.cpp. We cannot keep it in neuralnet_win32.cpp since it gets linked into an archive and is discarded during link time. --- src/qt/bitcoingui.cpp | 14 +++++++++++++- src/qt/neuralnet_win.cpp | 11 ----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index acf11f885f..559102b83c 100755 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -43,7 +43,7 @@ #include "backup.h" #include "clicklabel.h" #include "univalue.h" -#include "neuralnet/neuralnet.h" +#include "neuralnet_win.h" #ifdef Q_OS_MAC #include "macdockiconhandler.h" @@ -90,6 +90,18 @@ #include "boinc.h" #include "util.h" +namespace +{ +#ifdef WIN32 + // Static NN registration. + bool registered = []() + { + NN::Factory factory([]() { return std::make_shared(); }); + NN::RegisterFactory(factory); + return true; + }(); +#endif +} extern CWallet* pwalletMain; extern QString ToQstring(std::string s); diff --git a/src/qt/neuralnet_win.cpp b/src/qt/neuralnet_win.cpp index 2858010145..5bd93a0132 100644 --- a/src/qt/neuralnet_win.cpp +++ b/src/qt/neuralnet_win.cpp @@ -16,17 +16,6 @@ extern bool fTestNet; using namespace NN; -namespace -{ - // Static factory registration. - bool registered = []() - { - NN::Factory factory([]() { return std::make_shared(); }); - NN::RegisterFactory(factory); - return true; - }; -} - // While transitioning to dotnet the NeuralNet implementation has been split // into 3 implementations; Win32 with Qt, Win32 without Qt and the rest. // After the transition both Win32 implementations can be removed. From ad1b8f04df067ef63682cfeeea153bf7b7fa93ff Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 27 Dec 2018 08:59:30 +0100 Subject: [PATCH 097/359] Remove unused ToQstring. --- src/qt/bitcoingui.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 559102b83c..bdd2982852 100755 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -104,7 +104,6 @@ namespace } extern CWallet* pwalletMain; -extern QString ToQstring(std::string s); extern std::string getMacAddress(); extern std::string FromQString(QString qs); @@ -118,14 +117,6 @@ void GetGlobalStatus(); bool IsConfigFileEmpty(); void HarvestCPIDs(bool cleardata); -QString ToQstring(std::string s) -{ - QString str1 = QString::fromUtf8(s.c_str()); - return str1; -} - - - BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), clientModel(0), From 2418a21ab6cf2822d37f234e8aef272eab753d2b Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 27 Dec 2018 09:01:11 +0100 Subject: [PATCH 098/359] Remove unused/empty ResolveDiscrepancies. --- contrib/Installer/boinc/boinc/Utilization.vb | 6 ------ src/main.cpp | 7 ------- 2 files changed, 13 deletions(-) diff --git a/contrib/Installer/boinc/boinc/Utilization.vb b/contrib/Installer/boinc/boinc/Utilization.vb index 3e73ab3b26..2d53026bf0 100644 --- a/contrib/Installer/boinc/boinc/Utilization.vb +++ b/contrib/Installer/boinc/boinc/Utilization.vb @@ -270,12 +270,6 @@ Public Class Utilization ' Log("Responding to neural request for " + sCPID + " " + sOut) Return sOut End Function - Public Function ResolveDiscrepancies(sContract As String) As String - '7-25-2015 - Moving to QuorumHashingAlgorithm for this - disable this for the time being - 'Call ThreadResolveDiscrepanciesIn(sContract) - 'Return "Started Async Resolution." - Return "" - End Function Public Function ResolveCurrentDiscrepancies(sContract As String) As String Try Dim sPath As String = GetGridFolder() + "NeuralNetwork\contract.dat" diff --git a/src/main.cpp b/src/main.cpp index e058f65923..f3e4247e5d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7078,13 +7078,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, std::string neural_contract = ""; vRecv >> neural_contract; if (fDebug && neural_contract.length() > 100) LogPrintf("Quorum contract received %s",neural_contract.substr(0,80)); - if (neural_contract.length() > 10) - { - std::string results = ""; - //Resolve discrepancies - results = NN::GetInstance()->ExecuteDotNetStringFunction("ResolveDiscrepancies",neural_contract); - if (fDebug && !results.empty()) LogPrintf("Quorum Resolution: %s ",results); - } // Hook into miner for delegated sb staking supercfwd::QuorumResponseHook(pfrom,neural_contract); From e66ca62086cdd86a9bf3b0acb09f307ef36dfcde Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 27 Dec 2018 10:54:29 +0100 Subject: [PATCH 099/359] Replace ExecuteDotNetStringFunction with concrete calls. --- src/main.cpp | 109 ++++++++++++++--------------- src/neuralnet/neuralnet.h | 12 ++-- src/neuralnet/neuralnet_native.cpp | 24 ++++--- src/neuralnet/neuralnet_native.h | 5 +- src/neuralnet/neuralnet_stub.cpp | 15 +++- src/neuralnet/neuralnet_stub.h | 5 +- src/qt/neuralnet_win.cpp | 30 ++++++-- src/qt/neuralnet_win.h | 5 +- src/rpcblockchain.cpp | 2 +- 9 files changed, 125 insertions(+), 82 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f3e4247e5d..39c874b801 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -321,7 +321,7 @@ bool UpdateNeuralNetworkQuorumData() std::string sTimestamp = TimestampToHRDate(superblock_time); std::string data = "" + sAge + "" + consensus_hash + "" + sBlock + "" + sTimestamp + "" + msPrimaryCPID + ""; - NN::GetInstance()->ExecuteDotNetStringFunction("SetQuorumData",data); + NN::GetInstance()->SetQuorumData(data); return true; } @@ -6938,40 +6938,41 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } else if (strCommand == "neural") { - std::string neural_request = ""; - std::string neural_request_id = ""; - vRecv >> neural_request >> neural_request_id; // foreign node issued neural request with request ID: - std::string neural_response = "generic_response"; + std::string neural_request = ""; + std::string neural_request_id = ""; + vRecv >> neural_request >> neural_request_id; // foreign node issued neural request with request ID: + std::string neural_response = "generic_response"; - if (neural_request=="neural_data") - { - pfrom->PushMessage("ndata_nresp", NN::GetInstance()->GetNeuralContract()); - } - else if (neural_request=="neural_hash") - { + if (neural_request=="neural_data") + { + pfrom->PushMessage("ndata_nresp", NN::GetInstance()->GetNeuralContract()); + } + else if (neural_request=="neural_hash") + { if(0==neural_request_id.compare(0,13,"supercfwd.rqa")) { std::string r_hash; vRecv >> r_hash; supercfwd::SendResponse(pfrom,r_hash); } else - pfrom->PushMessage("hash_nresp", NN::GetInstance()->GetNeuralHash()); - } - else if (neural_request=="explainmag") - { - neural_response = NN::GetInstance()->ExecuteDotNetStringFunction("ExplainMag",neural_request_id); - pfrom->PushMessage("expmag_nresp", neural_response); - } - else if (neural_request=="quorum") - { + pfrom->PushMessage("hash_nresp", NN::GetInstance()->GetNeuralHash()); + } + else if (neural_request=="explainmag") + { + pfrom->PushMessage( + "expmag_nresp", + NN::GetInstance()->ExplainMagnitude(neural_request_id)); + } + else if (neural_request=="quorum") + { // 7-12-2015 Resolve discrepencies in w nodes to speak to each other pfrom->PushMessage("quorum_nresp", NN::GetInstance()->GetNeuralContract()); - } - else if (neural_request=="supercfwdr") - { - // this command could be done by reusing quorum_nresp, but I do not want to confuse the NN - supercfwd::QuorumResponseHook(pfrom,neural_request_id); - } + } + else if (neural_request=="supercfwdr") + { + // this command could be done by reusing quorum_nresp, but I do not want to confuse the NN + supercfwd::QuorumResponseHook(pfrom,neural_request_id); + } } else if (strCommand == "ping") { @@ -7084,19 +7085,18 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } else if (strCommand == "ndata_nresp") { - std::string neural_contract = ""; - vRecv >> neural_contract; - if (fDebug3 && neural_contract.length() > 100) LogPrintf("Quorum contract received %s",neural_contract.substr(0,80)); - if (neural_contract.length() > 10) - { - std::string results = ""; - //Resolve discrepancies - LogPrintf("Sync neural network data from supermajority"); - results = NN::GetInstance()->ExecuteDotNetStringFunction("ResolveCurrentDiscrepancies",neural_contract); - if (fDebug && !results.empty()) LogPrintf("Quorum Resolution: %s ",results); - // Resume the full DPOR sync at this point now that we have the supermajority data - if (results=="SUCCESS") FullSyncWithDPORNodes(); - } + std::string neural_contract; + vRecv >> neural_contract; + if (fDebug3 && neural_contract.length() > 100) LogPrintf("Quorum contract received %s",neural_contract.substr(0,80)); + if (neural_contract.length() > 10) + { + //Resolve discrepancies + LogPrintf("Sync neural network data from supermajority"); + const std::string& results = NN::GetInstance()->ResolveDiscrepancies(neural_contract); + if (fDebug && !results.empty()) LogPrintf("Quorum Resolution: %s ",results); + // Resume the full DPOR sync at this point now that we have the supermajority data + if (results=="SUCCESS") FullSyncWithDPORNodes(); + } } else if (strCommand == "alert") { @@ -7673,24 +7673,23 @@ void HarvestCPIDs(bool cleardata) if (structcpid.Iscpidvalid) { - // Verify the CPID is a valid researcher: - if (IsResearcher(structcpid.cpid)) - { - GlobalCPUMiningCPID.cpidhash = cpidhash; - GlobalCPUMiningCPID.email = email; - GlobalCPUMiningCPID.boincruntimepublickey = cpidhash; - LogPrintf("Setting bpk to %s", cpidhash); + // Verify the CPID is a valid researcher: + if (IsResearcher(structcpid.cpid)) + { + GlobalCPUMiningCPID.cpidhash = cpidhash; + GlobalCPUMiningCPID.email = email; + GlobalCPUMiningCPID.boincruntimepublickey = cpidhash; + LogPrintf("Setting bpk to %s", cpidhash); - if (structcpid.team=="gridcoin") - { - msPrimaryCPID = structcpid.cpid; - //Let the Neural Network know what your CPID is so it can be charted: - std::string sXML = "PrimaryCPID" + msPrimaryCPID + ""; - std::string sData = NN::GetInstance()->ExecuteDotNetStringFunction("WriteKey",sXML); - //Try to get a neural RAC report - AsyncNeuralRequest("explainmag",msPrimaryCPID,5); - } + if (structcpid.team=="gridcoin") + { + msPrimaryCPID = structcpid.cpid; + //Let the Neural Network know what your CPID is so it can be charted: + NN::GetInstance()->SetPrimaryCPID(msPrimaryCPID); + //Try to get a neural RAC report + AsyncNeuralRequest("explainmag",msPrimaryCPID,5); } + } } mvCPIDs[proj] = structcpid; diff --git a/src/neuralnet/neuralnet.h b/src/neuralnet/neuralnet.h index a723c5aee6..955111ce8a 100644 --- a/src/neuralnet/neuralnet.h +++ b/src/neuralnet/neuralnet.h @@ -70,16 +70,12 @@ namespace NN //! virtual bool SynchronizeDPOR(const std::string& data) = 0; - //! - //! \brief ExecuteDotNetStringFunction - //! \param function Function to execute. - //! \param data Function payload. - //! \return Function call's return string. - //! \todo Replace this with concrete functions. - //! - virtual std::string ExecuteDotNetStringFunction(std::string function, std::string data) = 0; + virtual std::string ExplainMagnitude(const std::string& cpid) = 0; + virtual std::string ResolveDiscrepancies(const std::string& contract) = 0; + virtual std::string SetPrimaryCPID(const std::string& cpid) = 0; virtual int64_t IsNeuralNet() = 0; + virtual void SetQuorumData(const std::string& data) = 0; //! //! \brief Show UI if available. diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index eb0f2805ec..8b6845656c 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -41,15 +41,20 @@ bool NeuralNetNative::SynchronizeDPOR(const std::string& data) return ScraperSynchronizeDPOR(); } -std::string NeuralNetNative::ExecuteDotNetStringFunction(std::string function, std::string data) +std::string NeuralNetNative::ExplainMagnitude(const std::string& cpid) { - if (function == "ExplainMag") - return ExplainMagnitude(data); - else - { - LogPrintf("ExecuteDotNetStringFunction(%s) not handled yet. Returning empty string.", function); - return std::string(); - } + return ::ExplainMagnitude(cpid); +} + +std::string NeuralNetNative::ResolveDiscrepancies(const std::string &contract) +{ + // Preserved for backward compatibility for now. + return std::string("SUCCESS"); +} + +std::string NeuralNetNative::SetPrimaryCPID(const std::string &cpid) +{ + return std::string(); } int64_t NeuralNetNative::IsNeuralNet() @@ -59,5 +64,8 @@ int64_t NeuralNetNative::IsNeuralNet() return nNeuralNetVersion; } +void NeuralNetNative::SetQuorumData(const std::string& data) +{} + void NeuralNetNative::Show() {} diff --git a/src/neuralnet/neuralnet_native.h b/src/neuralnet/neuralnet_native.h index a0f2ad6266..3b5197bc56 100644 --- a/src/neuralnet/neuralnet_native.h +++ b/src/neuralnet/neuralnet_native.h @@ -18,8 +18,11 @@ namespace NN std::string GetNeuralHash(); std::string GetNeuralContract(); bool SynchronizeDPOR(const std::string& data); - std::string ExecuteDotNetStringFunction(std::string function, std::string data); + std::string ExplainMagnitude(const std::string& cpid); + std::string ResolveDiscrepancies(const std::string &contract); + std::string SetPrimaryCPID(const std::string &cpid); int64_t IsNeuralNet(); + void SetQuorumData(const std::string& data); void Show(); }; } diff --git a/src/neuralnet/neuralnet_stub.cpp b/src/neuralnet/neuralnet_stub.cpp index 4d096f79d1..55d576ffce 100644 --- a/src/neuralnet/neuralnet_stub.cpp +++ b/src/neuralnet/neuralnet_stub.cpp @@ -29,7 +29,17 @@ bool NeuralNetStub::SynchronizeDPOR(const std::string& data) return false; } -std::string NeuralNetStub::ExecuteDotNetStringFunction(std::string function, std::string data) +std::string NeuralNetStub::ExplainMagnitude(const std::string& data) +{ + return std::string(); +} + +std::string NeuralNetStub::ResolveDiscrepancies(const std::string &contract) +{ + return std::string(); +} + +std::string NeuralNetStub::SetPrimaryCPID(const std::string &cpid) { return std::string(); } @@ -39,5 +49,8 @@ int64_t NeuralNetStub::IsNeuralNet() return 0; } +void NeuralNetStub::SetQuorumData(const std::string& data) +{} + void NeuralNetStub::Show() {} diff --git a/src/neuralnet/neuralnet_stub.h b/src/neuralnet/neuralnet_stub.h index 6a204341e1..0df8b8545b 100644 --- a/src/neuralnet/neuralnet_stub.h +++ b/src/neuralnet/neuralnet_stub.h @@ -18,8 +18,11 @@ namespace NN std::string GetNeuralHash(); std::string GetNeuralContract(); bool SynchronizeDPOR(const std::string& data); - std::string ExecuteDotNetStringFunction(std::string function, std::string data); + std::string ExplainMagnitude(const std::string& data); + std::string ResolveDiscrepancies(const std::string &contract); + std::string SetPrimaryCPID(const std::string &cpid); int64_t IsNeuralNet(); + void SetQuorumData(const std::string& data); void Show(); }; } diff --git a/src/qt/neuralnet_win.cpp b/src/qt/neuralnet_win.cpp index 5bd93a0132..e239cfbd9a 100644 --- a/src/qt/neuralnet_win.cpp +++ b/src/qt/neuralnet_win.cpp @@ -60,13 +60,26 @@ bool NeuralNetWin32::SynchronizeDPOR(const std::string& data) return true; } -std::string NeuralNetWin32::ExecuteDotNetStringFunction(std::string function, std::string data) +std::string NeuralNetWin32::ExplainMagnitude(const std::string& data) { - std::string request = function+"(Qstring)"; - QString result = globalcom->dynamicCall( - request.c_str(), - data.c_str()).toString(); - return result.toStdString(); + return globalcom->dynamicCall( + "ExplainMag(QString)", + data.c_str()).toString().toStdString(); +} + +std::string NeuralNetWin32::ResolveDiscrepancies(const std::string& contract) +{ + return globalcom->dynamicCall( + "ResolveCurrentDiscrepancies(QString)", + contract.c_str()).toString().toStdString(); +} + +std::string NeuralNetWin32::SetPrimaryCPID(const std::string &cpid) +{ + std::string payload = "PrimaryCPID" + cpid + ""; + return globalcom->dynamicCall( + "WriteKey(QString)", + payload.c_str()).toString().toStdString(); } int64_t NeuralNetWin32::IsNeuralNet() @@ -74,6 +87,11 @@ int64_t NeuralNetWin32::IsNeuralNet() return globalcom->dynamicCall("NeuralNetwork()").toInt(); } +void NeuralNetWin32::SetQuorumData(const std::string& data) +{ + globalcom->dynamicCall("SetQuorumData(QString)", data.c_str()); +} + void NeuralNetWin32::Show() { globalcom->dynamicCall("ShowMiningConsole()"); diff --git a/src/qt/neuralnet_win.h b/src/qt/neuralnet_win.h index 11638cfa0a..c52898b689 100644 --- a/src/qt/neuralnet_win.h +++ b/src/qt/neuralnet_win.h @@ -30,8 +30,11 @@ namespace NN std::string GetNeuralHash(); std::string GetNeuralContract(); bool SynchronizeDPOR(const std::string& data); - std::string ExecuteDotNetStringFunction(std::string function, std::string data); + std::string ExplainMagnitude(const std::string& data); + std::string ResolveDiscrepancies(const std::string& contract); + std::string SetPrimaryCPID(const std::string& cpid); int64_t IsNeuralNet(); + void SetQuorumData(const std::string& data); void Show(); std::unique_ptr globalcom; diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 30482d89e1..abd3c18ee6 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1243,7 +1243,7 @@ UniValue explainmagnitude(const UniValue& params, bool fHelp) // First try local node before bothering network... - std::string sNeuralResponse = NN::GetInstance()->ExecuteDotNetStringFunction("ExplainMag", GlobalCPUMiningCPID.cpid); + std::string sNeuralResponse = NN::GetInstance()->ExplainMagnitude(GlobalCPUMiningCPID.cpid); if (sNeuralResponse.length() < 25) { From 443e5211866a8270a49ff70603ff7d6c5e7aac4f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 27 Dec 2018 12:47:41 -0500 Subject: [PATCH 100/359] Adjust logging for nBeforeSBSleep sleep. Change sleep interval defaults in init.cpp. --- src/ScraperProxy/scraper.cpp | 9 +++++---- src/init.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) mode change 100644 => 100755 src/init.cpp diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index a884ca2e0e..dd5adca48c 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -185,8 +185,6 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // started with sbage already older than 86400 - nActiveBeforeSB. int64_t nBeforeSBSleep = std::max(86400 - nActiveBeforeSB - sbage, (int64_t) 0); - _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); - while (GetAdjustedTime() - nScraperThreadStartTime < nBeforeSBSleep) { // Take a lock on the whole scraper for this... @@ -201,8 +199,11 @@ void Scraper(bool fScraperStandalone, bool bSingleShot) // End LOCK(cs_Scraper) if (fDebug) _log(INFO, "ENDLOCK", "cs_Scraper"); } - - _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep) +" milliseconds"); + + sbage = data.sbage(); + _log(INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); + _log(INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep / 1000) +" seconds"); + MilliSleep(nScraperSleep); } } diff --git a/src/init.cpp b/src/init.cpp old mode 100644 new mode 100755 index 425d8b4770..b17c00d0f5 --- a/src/init.cpp +++ b/src/init.cpp @@ -381,10 +381,10 @@ bool AppInit2(ThreadHandlerPtr threads) fUseFastIndex = GetBoolArg("-fastindex", false); nMinerSleep = GetArg("-minersleep", 8000); - // Default to 60 sec, clamp to 30 minimum, 600 maximum - converted to milliseconds. - nScraperSleep = std::min(std::max(GetArg("-scrapersleep", 60), (int64_t) 30), (int64_t) 600) * 1000; - // Default to 300 sec, clamp to 180 minimum, 86400 maximum (meaning active all of the time). - nActiveBeforeSB = std::min(std::max(GetArg("-activebeforesb", 300), (int64_t) 180), (int64_t) 86400); + // Default to 300 sec (5 min), clamp to 60 minimum, 600 maximum - converted to milliseconds. + nScraperSleep = std::min(std::max(GetArg("-scrapersleep", 300), (int64_t) 60), (int64_t) 600) * 1000; + // Default to 7200 sec (2 hrs), clamp to 300 minimum, 86400 maximum (meaning active all of the time). + nActiveBeforeSB = std::min(std::max(GetArg("-activebeforesb", 7200), (int64_t) 300), (int64_t) 86400); // Boolean to direct scraper to retain non-current stats files. fScraperRetainNonCurrentFiles = GetBoolArg("-ScraperRetainNonCurrentFiles"); From b4cdc498370772606ebeb1c5b52d40c7da0be4c6 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 27 Dec 2018 16:31:01 -0500 Subject: [PATCH 101/359] Change scraper logger to use human readable datetime --- src/ScraperProxy/scraper.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ScraperProxy/scraper.cpp b/src/ScraperProxy/scraper.cpp index dd5adca48c..02491428ff 100755 --- a/src/ScraperProxy/scraper.cpp +++ b/src/ScraperProxy/scraper.cpp @@ -519,7 +519,7 @@ void _log(logattribute eType, const std::string& sCall, const std::string& sMess stringbuilder string; - string.append(std::to_string(GetAdjustedTime())); + string.append(DateTimeStrFormat("%x %H:%M:%S", GetAdjustedTime())); string.append(" ["); string.append(sType); string.append("] <"); @@ -1870,12 +1870,11 @@ std::string ExplainMagnitude(std::string sCPID) // "Signature" // TODO: Why the magic version number of 430 from .NET? Should this be a constant? - // Also convert GetAdjustTime to human readable time. // Should we take a lock on cs_main to read GlobalCPUMiningCPID? out.append("NN Host Version: 430, "); out.append("NeuralHash: " + ConvergedScraperStatsCache.nContractHash.GetHex() + ", "); out.append("SignatureCPID: " + GlobalCPUMiningCPID.cpid + ", "); - out.append("Time: " + std::to_string(GetAdjustedTime()) + ""); + out.append("Time: " + DateTimeStrFormat("%x %H:%M:%S", GetAdjustedTime()) + ""); //Totals out.append("Total RAC: "); From 1e6e81b018121c8007f5d5e43481f973a2b37177 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 28 Dec 2018 13:26:53 +0100 Subject: [PATCH 102/359] Remove reward sharing. This is replaced by side staking. --- src/rpcblockchain.cpp | 16 ---------------- src/wallet.cpp | 36 ------------------------------------ 2 files changed, 52 deletions(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index fc9d0fd204..4c0d58c429 100755 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -38,7 +38,6 @@ CBlockIndex* GetHistoricalMagnitude(std::string cpid); extern std::string GetProvableVotingWeightXML(); bool AskForOutstandingBlocks(uint256 hashStart); bool ForceReorganizeToHash(uint256 NewHash); -extern std::string SendReward(std::string sAddress, int64_t nAmount); extern double GetMagnitudeByCpidFromLastSuperblock(std::string sCPID); extern std::string SuccessFail(bool f); extern UniValue GetUpgradedBeaconReport(); @@ -3123,21 +3122,6 @@ UniValue GetJSONVersionReport() return results; } -std::string SendReward(std::string sAddress, int64_t nAmount) -{ - CBitcoinAddress address(sAddress); - if (!address.IsValid()) return "Invalid Gridcoin address"; - // Wallet comments - CWalletTx wtx; - if (pwalletMain->IsLocked()) return "Error: Please enter the wallet passphrase with walletpassphrase first."; - std::string sMessageType = "REWARD"; - std::string sMessageValue = "" + sAddress + ""; - wtx.hashBoinc = sMessageType + sMessageValue; - string strError = pwalletMain->SendMoneyToDestinationWithMinimumBalance(address.Get(), nAmount, 1, wtx); - if (!strError.empty()) return strError; - return wtx.GetHash().GetHex().c_str(); -} - std::string SuccessFail(bool f) { return f ? "SUCCESS" : "FAIL"; diff --git a/src/wallet.cpp b/src/wallet.cpp index 247ac9dd94..3c644f6df4 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -25,7 +25,6 @@ using namespace std; -std::string SendReward(std::string sAddress, int64_t nAmount); int64_t GetRSAWeightByCPID(std::string cpid); MiningCPID DeserializeBoincBlock(std::string block); @@ -567,41 +566,6 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) // notify an external script when a wallet transaction comes in or is updated std::string strCmd = GetArg("-walletnotify", ""); - // Reward Sharing - Added 08-21-2016 - // if (IsCoinBase() || IsCoinStake()) - - if (wtxIn.IsCoinBase() || wtxIn.IsCoinStake()) - { - if (fDebug10) LogPrintf("CoinBase:CoinStake"); - CBlockIndex* pBlk = mapBlockIndex[wtxIn.hashBlock]; - CBlock blk; - bool r = blk.ReadFromDisk(pBlk); - if (r) - { - MiningCPID bb = DeserializeBoincBlock(blk.vtx[0].hashBoinc,blk.nVersion); - double dResearch = bb.ResearchSubsidy + bb.InterestSubsidy; - double dRewardShare = dResearch*.10; - // Only send Reward if > .10 GRC - if (dRewardShare > .10) - { - // Only send reward if Reward Sharing is set up in the conf file (RS=RewardReceiveAddress) - std::string sRewardAddress = GetArgument("RS",""); - if (!sRewardAddress.empty()) - { - // Ensure this Proof Of Stake Coinbase was Just Generated before sending the reward (prevent rescans from sending rewards): - LogPrintf("reward locktime %" PRId64 " curr time %" PRId64, wtxIn.nTime, GetAdjustedTime()); - LogPrintf(" reward shared %f", dRewardShare); - LogPrintf(" addr %s",sRewardAddress); - if (IsLockTimeWithinMinutes(wtxIn.nTime, GetAdjustedTime(), 10)) - { - std::string sResult = SendReward(sRewardAddress,CoinFromValue(dRewardShare)); - LogPrintf("Issuing Reward Share of %f GRC to %s. Response: %s",dRewardShare,sRewardAddress, sResult); - } - } - } - } - } - if (!strCmd.empty()) { boost::replace_all(strCmd, "%s", wtxIn.GetHash().GetHex()); From 86055caa47f1ad44da84be323d5e32f60631fcf6 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 28 Dec 2018 13:31:51 +0100 Subject: [PATCH 103/359] Remove the now unused SendMoneyToDestinationWithMinimumBalance. --- src/wallet.cpp | 15 --------------- src/wallet.h | 1 - 2 files changed, 16 deletions(-) diff --git a/src/wallet.cpp b/src/wallet.cpp index 3c644f6df4..26ab2cf8ba 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1856,21 +1856,6 @@ string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNe return ""; } - - - -string CWallet::SendMoneyToDestinationWithMinimumBalance(const CTxDestination& address, int64_t nValue, int64_t nMinimumBalanceRequired, CWalletTx& wtxNew) -{ - // Check amount - if (nValue + nTransactionFee > GetBalance()) return _("Insufficient funds"); - if (GetBalance() < nMinimumBalanceRequired) return _("Balance too low to create a smart contract."); - CScript scriptPubKey; - scriptPubKey.SetDestination(address); - return SendMoney(scriptPubKey, nValue, wtxNew, false); -} - - - string CWallet::SendMoneyToDestination(const CTxDestination& address, int64_t nValue, CWalletTx& wtxNew, bool fAskFee) { // Check amount diff --git a/src/wallet.h b/src/wallet.h index c2df3c8358..7f0988602b 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -195,7 +195,6 @@ class CWallet : public CCryptoKeyStore std::string SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, bool fAskFee=false); std::string SendMoneyToDestination(const CTxDestination &address, int64_t nValue, CWalletTx& wtxNew, bool fAskFee=false); - std::string SendMoneyToDestinationWithMinimumBalance(const CTxDestination& address, int64_t nValue, int64_t nMinimumBalanceRequired, CWalletTx& wtxNew); bool NewKeyPool(); bool TopUpKeyPool(unsigned int nSize = 0); From e794825c32ab1bcfb58439a2a1c6eaa213455b8e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 28 Dec 2018 11:42:25 -0500 Subject: [PATCH 104/359] Change GetConsensusBeaconList() to use MaxBeaconAge() for the lookback. --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 8430099f13..f08a7babda 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5204,7 +5204,7 @@ BeaconConsensus GetConsensusBeaconList() Consensus.nBlockHash = pMaxConsensusLadder->GetBlockHash(); const int64_t maxTime = pMaxConsensusLadder->nTime; - const int64_t minTime = maxTime - BEACON_LOOKBACK; + const int64_t minTime = maxTime - MaxBeaconAge(); for(const auto& item : ReadCacheSection(Section::BEACON)) { From 2aeef103f3c8ee23da5a3ce390d557500b9258cd Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 28 Dec 2018 08:08:12 +0100 Subject: [PATCH 105/359] Remove VB based NeuralNet. --- contrib/Installer/boinc/boinc.sln | 20 - .../boinc/boinc/BoincMasterProjectList.csv | 51 - contrib/Installer/boinc/boinc/Contact.ico | Bin 15086 -> 0 bytes .../boinc/boinc/GRCRunTimeInterpreter.vb | 166 - .../boinc/boinc/GRCWireFrameCopierClass.vb | 89 - .../boinc/boinc/GRCWireFrameSubsystem.vbproj | 162 - contrib/Installer/boinc/boinc/Head.prt | 1871 -------- contrib/Installer/boinc/boinc/MD5.vb | 119 - contrib/Installer/boinc/boinc/Mutex.vb | 48 - .../boinc/My Project/Application.Designer.vb | 13 - .../boinc/boinc/My Project/Application.myapp | 10 - .../boinc/boinc/My Project/AssemblyInfo.vb | 35 - .../boinc/My Project/Resources.Designer.vb | 133 - .../boinc/boinc/My Project/Resources.resx | 142 - .../boinc/My Project/Settings.Designer.vb | 73 - .../boinc/boinc/My Project/Settings.settings | 7 - contrib/Installer/boinc/boinc/OpenCL.vb | 5 - .../boinc/boinc/Resources/GradientB.png | Bin 518 -> 0 bytes .../boinc/boinc/Resources/GradientU.png | Bin 1192 -> 0 bytes .../boinc/boinc/Resources/gradient.jpg | Bin 4608 -> 0 bytes .../boinc/boinc/Resources/gradient75.png | Bin 853 -> 0 bytes .../boinc/boinc/Resources/gradient751.png | Bin 849 -> 0 bytes .../boinc/boinc/Resources/gradient752.png | Bin 845 -> 0 bytes .../boinc/boinc/Resources/gradient753.png | Bin 860 -> 0 bytes .../boinc/boinc/Resources/gradientmiddle.png | Bin 875 -> 0 bytes .../Installer/boinc/boinc/SpeechSynthesis.vb | 67 - contrib/Installer/boinc/boinc/Utilization.vb | 367 -- .../boinc/boinc/bin/Debug/BOINC/BOINC/COPYING | 674 --- .../boinc/bin/Debug/BOINC/BOINC/COPYRIGHT | 61 - .../BOINC/BOINC/LiberationSans-Regular.ttf | Bin 352308 -> 0 bytes .../BOINC/Skins/Default/background_image.png | Bin 482187 -> 0 bytes .../Debug/BOINC/BOINC/Skins/Default/skin.xml | 39 - .../Skins/Default/workunit_running_image.png | Bin 115 -> 0 bytes .../Default/workunit_suspended_image.png | Bin 394 -> 0 bytes .../Skins/Default/workunit_waiting_image.png | Bin 96 -> 0 bytes .../Debug/BOINC/BOINC/boinc_logo_black.jpg | Bin 33464 -> 0 bytes .../boinc/bin/Debug/BOINC/BOINC/ca-bundle.crt | 4059 ----------------- .../BOINC/BOINC/locale/ar/BOINC-Client.mo | Bin 455 -> 0 bytes .../BOINC/BOINC/locale/ar/BOINC-Manager.mo | Bin 44386 -> 0 bytes .../Debug/BOINC/BOINC/locale/ar/BOINC-Web.mo | Bin 633 -> 0 bytes .../BOINC/BOINC/locale/be/BOINC-Client.mo | Bin 455 -> 0 bytes .../BOINC/BOINC/locale/be/BOINC-Manager.mo | Bin 41411 -> 0 bytes .../Debug/BOINC/BOINC/locale/be/BOINC-Web.mo | Bin 668 -> 0 bytes .../BOINC/BOINC/locale/bg/BOINC-Client.mo | Bin 6138 -> 0 bytes .../BOINC/BOINC/locale/bg/BOINC-Manager.mo | Bin 96252 -> 0 bytes .../Debug/BOINC/BOINC/locale/bg/BOINC-Web.mo | Bin 45601 -> 0 bytes .../BOINC/BOINC/locale/ca/BOINC-Client.mo | Bin 4931 -> 0 bytes .../BOINC/BOINC/locale/ca/BOINC-Manager.mo | Bin 76980 -> 0 bytes .../Debug/BOINC/BOINC/locale/ca/BOINC-Web.mo | Bin 37107 -> 0 bytes .../BOINC/BOINC/locale/cs/BOINC-Client.mo | Bin 4849 -> 0 bytes .../BOINC/BOINC/locale/cs/BOINC-Manager.mo | Bin 73750 -> 0 bytes .../Debug/BOINC/BOINC/locale/cs/BOINC-Web.mo | Bin 34012 -> 0 bytes .../BOINC/BOINC/locale/da/BOINC-Client.mo | Bin 4749 -> 0 bytes .../BOINC/BOINC/locale/da/BOINC-Manager.mo | Bin 72881 -> 0 bytes .../Debug/BOINC/BOINC/locale/da/BOINC-Web.mo | Bin 20469 -> 0 bytes .../BOINC/BOINC/locale/de/BOINC-Client.mo | Bin 4852 -> 0 bytes .../BOINC/BOINC/locale/de/BOINC-Manager.mo | Bin 79596 -> 0 bytes .../Debug/BOINC/BOINC/locale/de/BOINC-Web.mo | Bin 37161 -> 0 bytes .../BOINC/BOINC/locale/el/BOINC-Client.mo | Bin 5441 -> 0 bytes .../BOINC/BOINC/locale/el/BOINC-Manager.mo | Bin 80909 -> 0 bytes .../Debug/BOINC/BOINC/locale/el/BOINC-Web.mo | Bin 9197 -> 0 bytes .../BOINC/BOINC/locale/es/BOINC-Client.mo | Bin 4983 -> 0 bytes .../BOINC/BOINC/locale/es/BOINC-Manager.mo | Bin 74823 -> 0 bytes .../Debug/BOINC/BOINC/locale/es/BOINC-Web.mo | Bin 37351 -> 0 bytes .../BOINC/BOINC/locale/fa/BOINC-Client.mo | Bin 455 -> 0 bytes .../BOINC/BOINC/locale/fa/BOINC-Manager.mo | Bin 715 -> 0 bytes .../Debug/BOINC/BOINC/locale/fa/BOINC-Web.mo | Bin 535 -> 0 bytes .../BOINC/BOINC/locale/fi/BOINC-Client.mo | Bin 4598 -> 0 bytes .../BOINC/BOINC/locale/fi/BOINC-Manager.mo | Bin 75065 -> 0 bytes .../Debug/BOINC/BOINC/locale/fi/BOINC-Web.mo | Bin 34773 -> 0 bytes .../BOINC/BOINC/locale/fr/BOINC-Client.mo | Bin 4989 -> 0 bytes .../BOINC/BOINC/locale/fr/BOINC-Manager.mo | Bin 80770 -> 0 bytes .../Debug/BOINC/BOINC/locale/fr/BOINC-Web.mo | Bin 38132 -> 0 bytes .../BOINC/BOINC/locale/gl/BOINC-Client.mo | Bin 455 -> 0 bytes .../BOINC/BOINC/locale/gl/BOINC-Manager.mo | Bin 45391 -> 0 bytes .../Debug/BOINC/BOINC/locale/gl/BOINC-Web.mo | Bin 1573 -> 0 bytes .../BOINC/BOINC/locale/he/BOINC-Client.mo | Bin 4777 -> 0 bytes .../BOINC/BOINC/locale/he/BOINC-Manager.mo | Bin 71223 -> 0 bytes .../Debug/BOINC/BOINC/locale/he/BOINC-Web.mo | Bin 7595 -> 0 bytes .../BOINC/BOINC/locale/hr/BOINC-Client.mo | Bin 613 -> 0 bytes .../BOINC/BOINC/locale/hr/BOINC-Manager.mo | Bin 8088 -> 0 bytes .../Debug/BOINC/BOINC/locale/hr/BOINC-Web.mo | Bin 681 -> 0 bytes .../BOINC/BOINC/locale/hu/BOINC-Client.mo | Bin 5082 -> 0 bytes .../BOINC/BOINC/locale/hu/BOINC-Manager.mo | Bin 74260 -> 0 bytes .../Debug/BOINC/BOINC/locale/hu/BOINC-Web.mo | Bin 30235 -> 0 bytes .../BOINC/BOINC/locale/it_IT/BOINC-Client.mo | Bin 4920 -> 0 bytes .../BOINC/BOINC/locale/it_IT/BOINC-Manager.mo | Bin 79091 -> 0 bytes .../BOINC/BOINC/locale/it_IT/BOINC-Web.mo | Bin 36761 -> 0 bytes .../BOINC/BOINC/locale/ja/BOINC-Client.mo | Bin 5353 -> 0 bytes .../BOINC/BOINC/locale/ja/BOINC-Manager.mo | Bin 74201 -> 0 bytes .../Debug/BOINC/BOINC/locale/ja/BOINC-Web.mo | Bin 32842 -> 0 bytes .../BOINC/BOINC/locale/ko/BOINC-Client.mo | Bin 5153 -> 0 bytes .../BOINC/BOINC/locale/ko/BOINC-Manager.mo | Bin 80994 -> 0 bytes .../Debug/BOINC/BOINC/locale/ko/BOINC-Web.mo | Bin 38887 -> 0 bytes .../BOINC/BOINC/locale/lt/BOINC-Client.mo | Bin 4817 -> 0 bytes .../BOINC/BOINC/locale/lt/BOINC-Manager.mo | Bin 44240 -> 0 bytes .../Debug/BOINC/BOINC/locale/lt/BOINC-Web.mo | Bin 8144 -> 0 bytes .../BOINC/BOINC/locale/lv/BOINC-Client.mo | Bin 4779 -> 0 bytes .../BOINC/BOINC/locale/lv/BOINC-Manager.mo | Bin 74726 -> 0 bytes .../Debug/BOINC/BOINC/locale/lv/BOINC-Web.mo | Bin 681 -> 0 bytes .../BOINC/BOINC/locale/ms/BOINC-Client.mo | Bin 456 -> 0 bytes .../BOINC/BOINC/locale/ms/BOINC-Manager.mo | Bin 534 -> 0 bytes .../Debug/BOINC/BOINC/locale/ms/BOINC-Web.mo | Bin 24737 -> 0 bytes .../BOINC/BOINC/locale/nb/BOINC-Client.mo | Bin 4833 -> 0 bytes .../BOINC/BOINC/locale/nb/BOINC-Manager.mo | Bin 72386 -> 0 bytes .../Debug/BOINC/BOINC/locale/nb/BOINC-Web.mo | Bin 9004 -> 0 bytes .../BOINC/BOINC/locale/nl/BOINC-Client.mo | Bin 4860 -> 0 bytes .../BOINC/BOINC/locale/nl/BOINC-Manager.mo | Bin 76321 -> 0 bytes .../Debug/BOINC/BOINC/locale/nl/BOINC-Web.mo | Bin 37116 -> 0 bytes .../BOINC/BOINC/locale/nn/BOINC-Client.mo | Bin 455 -> 0 bytes .../BOINC/BOINC/locale/nn/BOINC-Manager.mo | Bin 715 -> 0 bytes .../Debug/BOINC/BOINC/locale/nn/BOINC-Web.mo | Bin 535 -> 0 bytes .../BOINC/BOINC/locale/pl/BOINC-Client.mo | Bin 4384 -> 0 bytes .../BOINC/BOINC/locale/pl/BOINC-Manager.mo | Bin 71445 -> 0 bytes .../Debug/BOINC/BOINC/locale/pl/BOINC-Web.mo | Bin 23502 -> 0 bytes .../BOINC/BOINC/locale/pt_BR/BOINC-Client.mo | Bin 2975 -> 0 bytes .../BOINC/BOINC/locale/pt_BR/BOINC-Manager.mo | Bin 33747 -> 0 bytes .../BOINC/BOINC/locale/pt_BR/BOINC-Web.mo | Bin 684 -> 0 bytes .../BOINC/BOINC/locale/pt_PT/BOINC-Client.mo | Bin 4929 -> 0 bytes .../BOINC/BOINC/locale/pt_PT/BOINC-Manager.mo | Bin 79202 -> 0 bytes .../BOINC/BOINC/locale/pt_PT/BOINC-Web.mo | Bin 37040 -> 0 bytes .../BOINC/BOINC/locale/ro/BOINC-Client.mo | Bin 4935 -> 0 bytes .../BOINC/BOINC/locale/ro/BOINC-Manager.mo | Bin 77527 -> 0 bytes .../Debug/BOINC/BOINC/locale/ro/BOINC-Web.mo | Bin 36726 -> 0 bytes .../BOINC/BOINC/locale/ru/BOINC-Client.mo | Bin 6420 -> 0 bytes .../BOINC/BOINC/locale/ru/BOINC-Manager.mo | Bin 104946 -> 0 bytes .../Debug/BOINC/BOINC/locale/ru/BOINC-Web.mo | Bin 50235 -> 0 bytes .../BOINC/BOINC/locale/sk/BOINC-Client.mo | Bin 4815 -> 0 bytes .../BOINC/BOINC/locale/sk/BOINC-Manager.mo | Bin 73875 -> 0 bytes .../Debug/BOINC/BOINC/locale/sk/BOINC-Web.mo | Bin 3591 -> 0 bytes .../BOINC/BOINC/locale/sl/BOINC-Client.mo | Bin 2968 -> 0 bytes .../BOINC/BOINC/locale/sl/BOINC-Manager.mo | Bin 56461 -> 0 bytes .../Debug/BOINC/BOINC/locale/sl/BOINC-Web.mo | Bin 7017 -> 0 bytes .../BOINC/BOINC/locale/sv_SE/BOINC-Client.mo | Bin 4744 -> 0 bytes .../BOINC/BOINC/locale/sv_SE/BOINC-Manager.mo | Bin 75869 -> 0 bytes .../BOINC/BOINC/locale/sv_SE/BOINC-Web.mo | Bin 2185 -> 0 bytes .../BOINC/BOINC/locale/tr/BOINC-Client.mo | Bin 4952 -> 0 bytes .../BOINC/BOINC/locale/tr/BOINC-Manager.mo | Bin 77571 -> 0 bytes .../Debug/BOINC/BOINC/locale/tr/BOINC-Web.mo | Bin 36384 -> 0 bytes .../BOINC/BOINC/locale/uk/BOINC-Client.mo | Bin 6254 -> 0 bytes .../BOINC/BOINC/locale/uk/BOINC-Manager.mo | Bin 104055 -> 0 bytes .../Debug/BOINC/BOINC/locale/uk/BOINC-Web.mo | Bin 49025 -> 0 bytes .../BOINC/BOINC/locale/zh_CN/BOINC-Client.mo | Bin 4717 -> 0 bytes .../BOINC/BOINC/locale/zh_CN/BOINC-Manager.mo | Bin 73154 -> 0 bytes .../BOINC/BOINC/locale/zh_CN/BOINC-Web.mo | Bin 33409 -> 0 bytes .../BOINC/BOINC/locale/zh_TW/BOINC-Client.mo | Bin 4560 -> 0 bytes .../BOINC/BOINC/locale/zh_TW/BOINC-Manager.mo | Bin 71582 -> 0 bytes .../BOINC/BOINC/locale/zh_TW/BOINC-Web.mo | Bin 32953 -> 0 bytes .../boinc/boinc/bin/Debug/BoincStake.tlb | Bin 22216 -> 0 bytes .../boinc/boinc/bin/Debug/BoincStake.xml | 257 -- .../boinc/boinc/bin/Debug/GRCSec.xml | 29 - .../Installer/boinc/boinc/bin/Debug/boinc.xml | 257 -- contrib/Installer/boinc/boinc/boinc.vbproj | 228 - .../Installer/boinc/boinc/boincstake.vbproj | 222 - .../boinc/boinc/clsBoincProjectDownload.vb | 456 -- .../boinc/boinc/clsQuorumHashingAlgorithm.cls | 64 - .../boinc/boinc/frmConfiguration.Designer.vb | 144 - .../boinc/boinc/frmConfiguration.resx | 414 -- .../Installer/boinc/boinc/frmConfiguration.vb | 24 - .../boinc/frmGRCWireFrameCanvas.Designer.vb | 75 - .../boinc/boinc/frmGRCWireFrameCanvas.vb | 241 - .../frmGRCWireFrameCanvasRenderer.Designer.vb | 51 - .../boinc/frmGRCWireFrameCanvasRenderer.resx | 123 - .../boinc/frmGRCWireFrameCanvasRenderer.vb | 272 -- .../boinc/boinc/frmMining.Designer.vb | 715 --- contrib/Installer/boinc/boinc/frmMining.resx | 206 - contrib/Installer/boinc/boinc/frmMining.vb | 830 ---- .../Installer/boinc/boinc/frmRain.Designer.vb | 153 - contrib/Installer/boinc/boinc/frmRain.resx | 414 -- contrib/Installer/boinc/boinc/frmRain.vb | 157 - .../Installer/boinc/boinc/headwireframe.txt | 1871 -------- .../boinc/boinc/modBoincLeaderboard.vb | 136 - contrib/Installer/boinc/boinc/modCgMiner.vb | 16 - contrib/Installer/boinc/boinc/modGRC.vb | 1154 ----- .../boinc/boinc/modGRCWireFrameColor.vb | 69 - .../boinc/boinc/modGRCWireFrameMatrix.vb | 171 - .../boinc/boinc/modGRCWireFrameObject.vb | 159 - .../boinc/boinc/modGRCWireFrameRender.vb | 296 -- .../boinc/boinc/modGRCWireFrameState.vb | 196 - .../boinc/boinc/modGRCWireFrameVector.vb | 85 - .../boinc/boinc/modPersistedDataSystem.vb | 1731 ------- contrib/Installer/boinc/boinc/modWinAPI.vb | 584 --- contrib/Installer/boinc/boinc/obj/.gitignore | 2 - contrib/Installer/boinc/boincTestHarness.frm | 44 - .../Installer/boinc/prjBoincTestHarness.vbp | 33 - .../Installer/boinc/prjBoincTestHarness.vbw | 1 - src/Makefile.qt.include | 2 +- src/qt/bitcoingui.cpp | 14 - src/qt/neuralnet_win.cpp | 98 - src/qt/neuralnet_win.h | 42 - 190 files changed, 1 insertion(+), 20246 deletions(-) delete mode 100644 contrib/Installer/boinc/boinc.sln delete mode 100644 contrib/Installer/boinc/boinc/BoincMasterProjectList.csv delete mode 100644 contrib/Installer/boinc/boinc/Contact.ico delete mode 100644 contrib/Installer/boinc/boinc/GRCRunTimeInterpreter.vb delete mode 100644 contrib/Installer/boinc/boinc/GRCWireFrameCopierClass.vb delete mode 100644 contrib/Installer/boinc/boinc/GRCWireFrameSubsystem.vbproj delete mode 100644 contrib/Installer/boinc/boinc/Head.prt delete mode 100644 contrib/Installer/boinc/boinc/MD5.vb delete mode 100644 contrib/Installer/boinc/boinc/Mutex.vb delete mode 100644 contrib/Installer/boinc/boinc/My Project/Application.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/My Project/Application.myapp delete mode 100644 contrib/Installer/boinc/boinc/My Project/AssemblyInfo.vb delete mode 100644 contrib/Installer/boinc/boinc/My Project/Resources.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/My Project/Resources.resx delete mode 100644 contrib/Installer/boinc/boinc/My Project/Settings.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/My Project/Settings.settings delete mode 100644 contrib/Installer/boinc/boinc/OpenCL.vb delete mode 100644 contrib/Installer/boinc/boinc/Resources/GradientB.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/GradientU.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradient.jpg delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradient75.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradient751.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradient752.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradient753.png delete mode 100644 contrib/Installer/boinc/boinc/Resources/gradientmiddle.png delete mode 100644 contrib/Installer/boinc/boinc/SpeechSynthesis.vb delete mode 100644 contrib/Installer/boinc/boinc/Utilization.vb delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYING delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYRIGHT delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/LiberationSans-Regular.ttf delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/background_image.png delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/skin.xml delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_running_image.png delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_suspended_image.png delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_waiting_image.png delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/boinc_logo_black.jpg delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/ca-bundle.crt delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/bg/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/bg/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/bg/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/cs/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/cs/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/cs/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fi/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fi/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fi/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fr/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fr/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fr/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/he/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/he/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/he/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hr/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hr/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hr/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hu/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hu/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hu/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ms/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ms/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ms/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nb/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nb/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nb/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pl/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pl/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pl/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_BR/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_BR/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_BR/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_PT/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_PT/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pt_PT/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ro/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ro/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ro/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ru/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ru/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ru/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sk/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sk/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sk/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sl/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sl/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sl/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sv_SE/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sv_SE/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/sv_SE/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/tr/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/tr/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/tr/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/uk/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/uk/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/uk/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_CN/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_CN/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_CN/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_TW/BOINC-Client.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_TW/BOINC-Manager.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/zh_TW/BOINC-Web.mo delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BoincStake.tlb delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/BoincStake.xml delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/GRCSec.xml delete mode 100644 contrib/Installer/boinc/boinc/bin/Debug/boinc.xml delete mode 100644 contrib/Installer/boinc/boinc/boinc.vbproj delete mode 100644 contrib/Installer/boinc/boinc/boincstake.vbproj delete mode 100644 contrib/Installer/boinc/boinc/clsBoincProjectDownload.vb delete mode 100644 contrib/Installer/boinc/boinc/clsQuorumHashingAlgorithm.cls delete mode 100644 contrib/Installer/boinc/boinc/frmConfiguration.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmConfiguration.resx delete mode 100644 contrib/Installer/boinc/boinc/frmConfiguration.vb delete mode 100644 contrib/Installer/boinc/boinc/frmGRCWireFrameCanvas.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmGRCWireFrameCanvas.vb delete mode 100644 contrib/Installer/boinc/boinc/frmGRCWireFrameCanvasRenderer.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmGRCWireFrameCanvasRenderer.resx delete mode 100644 contrib/Installer/boinc/boinc/frmGRCWireFrameCanvasRenderer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmMining.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmMining.resx delete mode 100644 contrib/Installer/boinc/boinc/frmMining.vb delete mode 100644 contrib/Installer/boinc/boinc/frmRain.Designer.vb delete mode 100644 contrib/Installer/boinc/boinc/frmRain.resx delete mode 100644 contrib/Installer/boinc/boinc/frmRain.vb delete mode 100644 contrib/Installer/boinc/boinc/headwireframe.txt delete mode 100644 contrib/Installer/boinc/boinc/modBoincLeaderboard.vb delete mode 100644 contrib/Installer/boinc/boinc/modCgMiner.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRC.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameColor.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameMatrix.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameObject.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameRender.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameState.vb delete mode 100644 contrib/Installer/boinc/boinc/modGRCWireFrameVector.vb delete mode 100644 contrib/Installer/boinc/boinc/modPersistedDataSystem.vb delete mode 100644 contrib/Installer/boinc/boinc/modWinAPI.vb delete mode 100644 contrib/Installer/boinc/boinc/obj/.gitignore delete mode 100644 contrib/Installer/boinc/boincTestHarness.frm delete mode 100644 contrib/Installer/boinc/prjBoincTestHarness.vbp delete mode 100644 contrib/Installer/boinc/prjBoincTestHarness.vbw delete mode 100644 src/qt/neuralnet_win.cpp delete mode 100644 src/qt/neuralnet_win.h diff --git a/contrib/Installer/boinc/boinc.sln b/contrib/Installer/boinc/boinc.sln deleted file mode 100644 index f6375fcbf2..0000000000 --- a/contrib/Installer/boinc/boinc.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "boinc", "boinc\boinc.vbproj", "{359913F7-DF2D-4632-9A0C-52E9FD0D4ED9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {359913F7-DF2D-4632-9A0C-52E9FD0D4ED9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {359913F7-DF2D-4632-9A0C-52E9FD0D4ED9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {359913F7-DF2D-4632-9A0C-52E9FD0D4ED9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {359913F7-DF2D-4632-9A0C-52E9FD0D4ED9}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/contrib/Installer/boinc/boinc/BoincMasterProjectList.csv b/contrib/Installer/boinc/boinc/BoincMasterProjectList.csv deleted file mode 100644 index 62f01abc64..0000000000 --- a/contrib/Installer/boinc/boinc/BoincMasterProjectList.csv +++ /dev/null @@ -1,51 +0,0 @@ -Project Name,Total RAC,Avg RAC,Whitelisted -albert@home,275,55,FALSE -asteroids@home,1024285.71,4800,TRUE -atlas@home,22333.33,340,TRUE -bitcoin utopia,1180630340,14396180,TRUE -burp,21500,690,TRUE -cas@home,3120,110,TRUE -citizen science grid,185333.33,1720,TRUE -climateprediction.net,42500,620,TRUE -collatz conjecture,29370100,219333.33,TRUE -constellation,120,20,FALSE -cosmology@home,101333.33,1000,TRUE -denis@home,867333.33,12500,TRUE -distributed data mining,87333.33,1880,TRUE -edges@home,40,20,FALSE -einstein@home,2225714.29,8560,TRUE -enigma@home,308000,2160,TRUE -find@home,56666.67,810,TRUE -gpugrid,15240510,141333.33,TRUE -gridcoin finance,24833.33,370,TRUE -lattice project,1240,105,FALSE -leiden classical,36833.33,405,TRUE -lhc@home,30333.33,220,TRUE -malariacontrol.net,137333.33,1000,TRUE -milkyway@home,2892857.14,11166.67,TRUE -mindmodeling@home,93333.33,770,TRUE -moo! wrapper,4230000,47000,TRUE -nfs@home,164666.67,2560,TRUE -numberfields@home,261333.33,3720,TRUE -poem@home,10897620,49166.67,TRUE -primaboinca,11666.67,1480,FALSE -primegrid,6047142.86,42500,TRUE -quake catcher network,145,50,FALSE -radioactive@home,240,120,FALSE -ralph@home,35,17.5,FALSE -rosetta@home,426666.67,1560,TRUE -sat@home,150666.67,2080,TRUE -seti@home,874000,2680,TRUE -seti@home beta,2880,320,FALSE -srbase,19166.67,4760,FALSE -sztaki desktop grid,21333.33,455,TRUE -theskynet pogs,266666.67,2520,TRUE -universe@home,232666.67,3480,TRUE -van der waerden numbers,45,22.5,FALSE -vlhcathome,25333.33,425,TRUE -volpex@uh,45,22.5,FALSE -world community grid,622666.67,2520,TRUE -wuprop@home,18666.67,140,TRUE -yafu,110000,2400,TRUE -yoyo@home,247333.33,2480,TRUE -,,, diff --git a/contrib/Installer/boinc/boinc/Contact.ico b/contrib/Installer/boinc/boinc/Contact.ico deleted file mode 100644 index 881da45dd4c5b0f044278763349605bbf18e5527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 0 Then - Me.CompilerErrors = oCResults.Errors - Throw New Exception("Compile Errors") - Else - ' No Errors On Compile, so continue to process... - oAssy = oCResults.CompiledAssembly - oExecInstance = oAssy.CreateInstance("dValuate.EvalRunTime") - oType = oExecInstance.GetType - oMethodInfo = oType.GetMethod("EvaluateIt") - oRetObj = oMethodInfo.Invoke(oExecInstance, Nothing) - Return oRetObj - End If - - Catch ex As Exception - ' Compile Time Errors Are Caught Here - ' Some other weird error - Debug.WriteLine(ex.Message) - Stop - End Try - - Catch ex As Exception - Debug.WriteLine(ex.Message) - Stop - End Try - - Return oRetObj - - End Function - - End Class - - - Private Function SampleRoutine() As StringBuilder - Dim oRetSB As New StringBuilder - Dim sText As String = "December 7, 2014" - oRetSB.Append("If Date.Parse(""" & sText & """) < System.DateTime.Now() Then " & vbCrLf) - oRetSB.Append(" Return ""OLD"" " & vbCrLf) - oRetSB.Append("Else " & vbCrLf) - oRetSB.Append(" Return ""NEW"" " & vbCrLf) - oRetSB.Append("End If " & vbCrLf) - oRetSB = New StringBuilder - oRetSB.AppendLine("MsgBox(" + Chr(34) + "Hello!" + Chr(34) + ",MsgBoxStyle.Critical," + Chr(34) + "Message Title" + Chr(34) + ")") - Return oRetSB - End Function - - Public Function CompileAndRunCode(ByVal VBCodeToExecute As String) As Object - - Dim sReturn_DataType As String - Dim sReturn_Value As String = "" - Try - - Dim ep As New cVBEvalProvider - ' Compile and run - Dim objResult As Object = ep.Eval(VBCodeToExecute) - If ep.CompilerErrors.Count <> 0 Then - Diagnostics.Debug.WriteLine("CompileAndRunCode: Compile Error Count = " & ep.CompilerErrors.Count) - Diagnostics.Debug.WriteLine(ep.CompilerErrors.Item(0)) - Return "ERROR" ' Forget it - End If - Dim t As Type = objResult.GetType() - If t.ToString() = "System.String" Then - sReturn_DataType = t.ToString - sReturn_Value = Convert.ToString(objResult) - Else - ' Some other type of data - End If - - Catch ex As Exception - Dim sErrMsg As String - sErrMsg = String.Format("{0}", ex.Message) - End Try - - Return sReturn_Value - - End Function -End Module - - - -Public Class GridcoinSmartContract - - Public Function ExecuteContract(Contract As String) - Try - GRCRunTimeInterpreter.CompileAndRunCode(Contract) - - Catch ex As Exception - Log("Error while executing contract " + ex.Message) - - End Try - End Function - -End Class \ No newline at end of file diff --git a/contrib/Installer/boinc/boinc/GRCWireFrameCopierClass.vb b/contrib/Installer/boinc/boinc/GRCWireFrameCopierClass.vb deleted file mode 100644 index 645c61fc77..0000000000 --- a/contrib/Installer/boinc/boinc/GRCWireFrameCopierClass.vb +++ /dev/null @@ -1,89 +0,0 @@ -Public Class BitBliter - -#Region " BitBlt Declaration" - Private Declare Auto Function BitBlt Lib "GDI32.DLL" ( _ - ByVal hdcDest As IntPtr, _ - ByVal nXDest As Integer, _ - ByVal nYDest As Integer, _ - ByVal nWidth As Integer, _ - ByVal nHeight As Integer, _ - ByVal hdcSrc As IntPtr, _ - ByVal nXSrc As Integer, _ - ByVal nYSrc As Integer, _ - ByVal dwRop As Int32) As Boolean -#End Region - -#Region " Members " - - ' Public Holders - Private MemGrp As Graphics - Private MemHdc As IntPtr - - Private LastSize As Size - - Private Copied As Boolean - -#End Region - -#Region " Interface " - 'Interface - - Public Sub Copy(ByVal srcGraphics As Graphics, ByVal Size As Size) - LastSize = Size ' Saving so we'l know how to Paste - ' check if already copied - If Copied Then DisposeObjects() ' so old objects are disposed - ' Creating a temporary Bitmap to create objects of - Dim srcBmp As New Bitmap(Size.Width, Size.Height, srcGraphics) - ' Creating Objects - MemGrp = Graphics.FromImage(srcBmp) 'Create a Graphics object - MemHdc = MemGrp.GetHdc 'Get the Device Context - - '>>> get the picture <<< - MyBitBlt(srcGraphics, MemHdc, Size.Width, Size.Height) - ' Dispose of the BMP - srcBmp.Dispose() - - Copied = True - End Sub - - Public Sub Paste(ByVal TargetGraphics As Graphics, ByVal X As Integer, ByVal Y As Integer) - Dim TargetHdc As IntPtr = TargetGraphics.GetHdc - - MyBitBlt(MemHdc, TargetHdc, LastSize.Width, LastSize.Height, X, Y) - - TargetGraphics.ReleaseHdc(TargetHdc) - End Sub - -#End Region - -#Region " Internals " - Const SRCCOPY As Integer = &HCC0020 - ' Wraping things up - Private Sub MyBitBlt(ByVal SourceGraphics As Graphics, ByVal TargetHDC As IntPtr, ByVal width As Integer, ByVal Height As Integer) - ' Creating a DeviceContext to capture from - Dim SourceHDC As IntPtr = SourceGraphics.GetHdc - ' Blitting (Copying) the data - BitBlt(TargetHDC, 0, 0, width, Height, SourceHDC, 0, 0, SRCCOPY) - ' Releasing the Device context used - SourceGraphics.ReleaseHdc(SourceHDC) - End Sub - Private Sub MyBitBlt(ByVal SourceHDC As IntPtr, ByVal TargetHDC As IntPtr, ByVal width As Integer, ByVal Height As Integer, ByVal PosX As Integer, ByVal PosY As Integer) - ' Copying data to a specific position on the target Device Context - BitBlt(TargetHDC, PosX, PosY, width, Height, SourceHDC, 0, 0, SRCCOPY) - End Sub - - ' Cleanning Up - ' Before Destroying this class, dispose of objects to reclaim memory - Protected Overrides Sub Finalize() - DisposeObjects() - MyBase.Finalize() - End Sub - - ' Disposing of objects - Private Sub DisposeObjects() - MemGrp.ReleaseHdc(MemHdc) ' Release Device Context - MemGrp.Dispose() ' Disposing of Graphics object - End Sub - -#End Region -End Class diff --git a/contrib/Installer/boinc/boinc/GRCWireFrameSubsystem.vbproj b/contrib/Installer/boinc/boinc/GRCWireFrameSubsystem.vbproj deleted file mode 100644 index a8b0c83b68..0000000000 --- a/contrib/Installer/boinc/boinc/GRCWireFrameSubsystem.vbproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {31546D58-E7BC-4735-BA44-13A691997AA7} - WIN32=True - WinExe - GRCWireFrameSubsystem.frmGRCWireFrameCanvas - GRCWireFrameSubsystem - GRCWireFrameSubsystem - WindowsForms - Off - v2.0 - - - 2.0 - - - - true - full - true - true - WIN32=True - bin\Debug\ - GRCWireFrameSubsystem.xml - x86 - 41999,42016,42017,42018,42019,42024,42030,42032,42036,42104,42105,42106,42107,42108,42109,42353,42354,42355 - - - pdbonly - false - true - WIN32=True - true - bin\Release\ - GRCWireFrameSubsystem.xml - Win32=True - x86 - 41999,42016,42017,42018,42019,42024,42030,42032,42036,42104,42105,42106,42107,42108,42109,42353,42354,42355 - - - - - - - - - - - - - - - - - - - - - - - - frmGRCWireFrameCanvasRenderer.vb - - - Form - - - - - - - - - - - - True - Application.myapp - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - frmGRCWireFrameCanvasRenderer.vb - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - - - - - - \ No newline at end of file diff --git a/contrib/Installer/boinc/boinc/Head.prt b/contrib/Installer/boinc/boinc/Head.prt deleted file mode 100644 index d3d0668490..0000000000 --- a/contrib/Installer/boinc/boinc/Head.prt +++ /dev/null @@ -1,1871 +0,0 @@ -"Head" -30 -166,188,199 -0,0,0 -0,0,0 -622,1241 -0.000000,-3.793730,-4.995950 -1.127210,-5.071600,-0.040322 -0.785256,-5.229040,-0.065073 --3.189580,-3.421360,-3.206770 --1.983690,-3.249930,-4.940150 -2.078590,-4.584570,-0.655420 -1.574950,-4.853430,-0.346305 --2.509210,-4.321090,-1.118850 --2.810700,-4.124980,-1.409970 -2.811540,-4.124980,-1.408300 -2.509870,-4.321090,-1.117370 --1.574750,-4.853430,-0.347238 --2.078200,-4.584570,-0.656651 --2.122600,2.120370,1.272030 --2.014900,3.612060,0.842470 --2.275320,2.924150,0.214188 --1.996550,-2.507550,1.225620 --2.185770,-2.954830,0.837276 --2.127340,-2.679880,1.162780 --0.584847,-4.293870,1.135890 -0.000000,-4.735770,0.492961 -0.000000,-4.317760,1.097640 --1.123730,-2.138200,1.695800 --1.494050,-2.558510,1.392200 --1.323950,-2.661410,1.682520 --3.280610,-2.479680,-1.423150 --3.513930,-3.131110,-1.842640 --3.167680,-2.974810,-1.375890 --3.821840,-1.868890,-2.118720 --3.900260,-2.303840,-1.951360 --3.887460,-2.137150,-1.924980 --3.831010,-1.318200,-2.493210 --3.612390,-1.014270,-2.472350 --3.936940,-1.015750,-2.684340 --3.969200,-2.298110,-2.324250 --3.942510,-0.619315,-2.707580 --3.803990,0.249379,-2.404060 --3.903240,0.377894,-2.668350 -2.275010,3.076130,0.520057 -1.588320,2.335100,1.561260 -2.121850,2.120370,1.273290 -2.126660,-2.679880,1.164030 -2.158000,-2.315710,1.014420 -1.995830,-2.507550,1.226800 -0.869062,-4.310720,1.146640 -0.584174,-4.293870,1.136240 -1.322960,-2.661410,1.683300 -1.238810,-2.178340,1.533190 -1.122720,-2.138200,1.696470 -3.168490,-2.974810,-1.374020 -3.604830,-2.517400,-1.781250 -3.281450,-2.479680,-1.421210 -3.888600,-2.137150,-1.922680 -3.970580,-2.298110,-2.321890 -3.823100,-1.868890,-2.116450 -3.938530,-1.015750,-2.682000 -3.832480,-1.318200,-2.490940 -4.084640,-1.704890,-2.940960 -3.904830,0.377894,-2.666030 -3.561730,-0.515317,-2.316240 -3.944120,-0.619315,-2.705250 --1.512440,-2.114760,1.386220 --1.340250,-2.003130,1.502510 --1.209180,-1.920960,1.660140 --1.709770,-2.129080,1.177150 -1.709080,-2.129080,1.178160 -1.208200,-1.920960,1.660860 -1.339360,-2.044010,1.503310 -1.511620,-2.224670,1.387110 -0.000000,-5.110250,-0.025199 --0.785217,-5.229040,-0.065539 -1.986610,-3.249930,-4.938970 -3.191480,-3.421360,-3.204880 --1.127190,-5.071600,-0.040990 --3.677310,-2.638730,-2.047260 --3.784070,-2.535330,-2.444260 --3.892860,-2.151050,-2.851110 --3.977060,-1.806650,-3.108800 --2.579170,-3.809540,-0.426578 --2.583330,-4.099800,-0.846227 --2.146140,-4.234740,-0.170014 --2.162590,0.877403,1.257400 --1.995480,0.761767,1.207610 --1.979490,0.844146,1.239000 --2.223480,0.708368,1.223900 --2.024220,0.621844,1.201880 --2.301780,1.061210,1.148010 --2.397030,0.756517,0.944858 --2.467790,1.270040,1.074490 --2.535390,0.842541,0.762719 --2.437010,0.597869,0.927833 --0.436426,1.051830,1.834960 --0.366133,0.878871,1.917880 -0.000000,1.032080,2.025880 --1.871720,1.710000,1.895500 --1.783310,1.461170,1.790110 --1.182480,1.437470,1.930080 --1.253010,1.621450,2.089430 --2.551730,2.814100,0.102641 --2.599450,2.583940,-0.003715 --2.506060,1.638010,0.723029 --2.384720,1.886060,0.936734 --2.570890,-1.579950,0.775422 --2.903710,-1.054820,0.395137 --3.024440,-1.084760,-0.186616 --2.747320,-2.086220,0.299591 --3.051970,-1.301820,-0.290998 --2.932200,-1.840340,-0.096359 --3.001600,1.114100,-0.425369 --2.818210,0.981080,0.008910 --2.749780,1.970650,-0.111668 --2.731050,0.744887,0.393844 --2.634740,1.110300,0.519617 --1.589250,2.335100,1.560320 --1.498370,3.332590,1.245530 --1.185180,1.824700,1.987360 --0.841261,1.669880,2.023310 --0.420481,1.497980,2.039040 --1.027780,2.297350,1.713300 -0.000000,1.434840,2.114540 -0.000000,1.827890,2.053380 -0.000000,3.215590,1.626790 --0.950971,3.182600,1.473540 --0.596267,0.962749,1.632320 --0.672730,1.394800,2.015460 --0.938420,1.189020,1.798720 --0.835250,1.473270,1.990110 --1.375570,1.246770,1.797080 --1.665760,1.877410,1.880670 --2.160100,1.809850,1.591990 --2.104010,1.672090,1.764920 --2.381750,1.398840,1.331790 --2.257980,1.320490,1.373050 --2.047840,1.379470,1.665980 --1.675760,1.210730,1.683690 --1.985370,1.083540,1.468980 --1.151310,1.049220,1.571980 --0.741905,0.838477,1.339670 --0.647152,0.848479,1.512340 --0.991344,1.045890,1.672850 --1.339380,1.097010,1.705500 --1.634000,1.026490,1.539670 --1.827870,0.968370,1.419190 --0.675003,0.625220,1.399300 --0.743834,0.682655,1.292570 --1.195440,0.584506,1.432060 --1.179060,0.479077,1.537410 --1.539600,0.569260,1.421120 --1.534540,0.432412,1.535320 --1.794290,0.634163,1.312170 --1.889210,0.496086,1.360840 --0.853203,0.409701,1.456250 --1.044900,0.258220,1.571890 --1.500430,0.195877,1.538840 --1.861650,0.335479,1.327210 --2.043950,0.259162,1.292890 --1.849400,0.093745,1.547660 --2.036740,0.441006,1.172620 --2.159070,0.403607,1.107210 --2.381720,0.388582,0.936211 --2.328640,0.187367,1.126600 --0.498190,0.764687,1.717170 --0.466187,0.391123,2.172540 --0.357382,0.492336,2.296300 --1.385730,0.007542,1.790270 --1.017220,0.108270,1.780750 --1.286730,-0.234522,1.978670 --0.952937,-0.099551,2.036930 --0.626093,0.525750,1.573170 --0.614165,0.257241,2.110880 --0.569293,0.123761,2.232320 --0.463499,-0.046825,2.472820 --0.583874,-0.086150,2.196820 --0.797217,-0.293187,2.076260 --0.686403,-0.220701,2.306670 --0.749194,-0.364237,2.443690 --0.820809,-0.601074,2.231240 --0.847185,-0.676250,1.908630 --0.759804,-0.749231,2.011770 --1.019370,-0.845343,1.771960 --0.801846,-0.948515,2.008890 --0.586071,-0.877771,2.169340 --0.753358,-0.693308,2.360980 --0.726239,-0.522245,2.545760 --0.616406,-0.619552,2.500950 --0.443461,-0.161571,2.696470 --0.549030,-0.327551,2.777160 --0.495357,-0.530921,2.719400 --0.473339,-1.048370,2.334610 --0.262909,-0.807196,2.582260 --0.249483,-0.716493,2.796020 --0.344611,-0.563616,3.152250 --0.322824,-0.391772,3.187160 --0.330000,-0.089759,3.001770 --0.302113,0.209664,2.702190 -0.000000,0.843970,2.324150 -0.000000,0.346162,2.822930 -0.000000,-0.044350,3.169320 -0.000000,-0.404860,3.417810 -0.000000,-0.680440,3.338430 -0.000000,-0.893934,3.091880 -0.000000,-0.969509,2.619220 -0.000000,-1.131120,2.442000 --1.650670,-0.404549,1.958760 --1.899450,-0.606529,1.937530 --1.696640,-0.996747,2.003100 --1.311790,-1.219780,1.656160 --2.009750,-1.447390,1.714210 --2.237530,-1.147700,1.660690 --1.541500,-1.742740,1.358310 --2.009110,-0.381148,1.761000 --2.399060,-0.846630,1.538370 --1.687780,-3.160190,1.430020 --1.206210,-3.240010,1.891420 --1.558710,-3.031200,1.521530 --1.023380,-2.845770,1.916360 --2.305260,-1.471240,1.430320 --2.143210,-1.832610,1.405150 --2.373650,-1.924130,0.873043 --2.158610,-2.315710,1.013140 --2.547720,-2.647510,0.577713 --2.246400,-2.543320,0.870625 --2.301470,-3.009670,0.708137 --2.241670,-3.536620,0.575973 --1.979520,-3.689200,0.779335 --2.074110,-3.387930,0.888552 --1.615100,-2.390450,1.278900 --1.995040,-2.840100,1.307310 --1.608520,-2.651490,1.375490 --2.006170,-3.164790,1.022890 --1.731440,-3.534660,1.143740 --1.627420,-3.953240,1.235700 --1.881180,-3.886390,0.601309 --1.380900,-4.105830,1.003720 --1.923360,-4.183830,0.488675 --1.304930,-4.220670,0.873554 --1.256650,-3.768230,1.956400 --1.144830,-4.041360,1.740290 --0.901666,-4.188240,1.404630 --0.869741,-4.310720,1.146130 --0.826438,-4.763250,0.691789 --0.674416,-4.175810,1.439920 -0.000000,-4.226210,1.409530 --0.681079,-4.096790,2.199390 --0.733318,-3.819400,2.445560 --0.901115,-3.283330,2.281580 -0.000000,-4.106710,2.355390 -0.000000,-3.533060,2.736300 -0.000000,-3.089260,2.623610 --0.743872,-2.904180,2.168290 -0.000000,-2.911860,2.419990 --1.239720,-2.134770,1.532450 --1.439030,-2.183030,1.377280 --0.917167,-2.275490,1.956100 --0.602033,-2.426380,2.278700 -0.000000,-2.571590,2.416300 --0.906316,-2.125970,1.994320 --0.630268,-2.294390,2.343990 -0.000000,-2.411080,2.515310 --1.030660,-1.770300,1.995070 --0.588913,-1.679250,2.409700 -0.000000,-1.771570,2.504630 --1.358430,-4.521820,0.452409 --1.784190,-4.340270,0.280927 --2.229130,-3.955910,0.301737 --2.062530,-3.786450,0.550630 --2.709260,-2.981360,0.212124 --2.453470,-3.580780,0.211057 --2.852830,-2.407290,0.108064 --2.909220,-3.826720,-1.136360 --2.777750,-3.465370,-0.561414 --3.053330,-2.812260,-0.669179 --3.167490,-2.371890,-0.705166 --3.262470,-2.075920,-1.640740 --3.603770,-2.517400,-1.783390 --3.586130,-1.448850,-1.864140 --3.911870,-2.386690,-2.095870 --4.082900,-1.704890,-2.943380 --4.015920,-2.013540,-2.632790 --3.560350,-0.515317,-2.318350 --4.166130,-0.758749,-3.422790 --4.121300,-0.815678,-3.563040 --4.154980,-0.270506,-3.457610 --4.054190,0.098727,-3.496450 --4.106570,0.029265,-3.322060 --3.921530,0.329369,-3.308440 --3.815690,0.568895,-2.713170 --3.758670,0.023288,-2.233610 --3.601780,-0.910249,-1.843160 --3.537150,-0.327181,-2.069630 --3.188720,-1.693410,-0.850337 --3.199410,-0.928846,-1.128160 --3.264640,-0.460338,-1.555930 --3.650570,0.108469,-2.135660 --3.729550,0.187636,-1.794810 --3.069950,-0.669828,-0.543333 --3.163530,-0.157172,-0.510937 --2.451680,-1.205890,1.255110 --2.724880,-0.696504,0.930325 --2.590880,-0.415051,1.158320 --2.204000,-0.004348,1.392200 --1.710980,-0.177054,1.789010 --2.270750,0.128294,1.210750 --2.643310,-0.208566,0.976692 --2.797480,-0.502781,0.746496 --2.947240,-0.669172,0.144963 --2.676780,0.005696,0.751041 --2.819680,-0.269231,0.532260 --2.934700,-0.256637,0.034512 --2.615090,0.285069,0.612148 --2.766370,0.169373,0.426312 --2.863030,0.267495,0.020554 --3.053590,0.450373,-0.433166 --2.580040,0.481480,0.704438 --2.754180,0.550371,0.361695 --2.849610,0.786575,0.014771 --2.578800,0.631464,0.742665 --3.688760,0.417510,-2.273810 --3.851150,0.808444,-1.845050 --3.416120,0.488240,-1.095120 --3.458870,1.037380,-1.040940 --4.105640,-0.235731,-3.646760 -3.515020,-3.131110,-1.840550 -3.785520,-2.535330,-2.442020 -3.678530,-2.638730,-2.045080 -3.894550,-2.151050,-2.848810 -3.978900,-1.806650,-3.106440 -2.146230,-4.234740,-0.168742 -2.583840,-4.099800,-0.844695 -2.579420,-3.809540,-0.425049 -1.978760,0.844146,1.240170 -1.994770,0.761767,1.208790 -2.161840,0.877403,1.258680 -2.023510,0.621844,1.203080 -2.222750,0.708368,1.225220 -2.396470,0.756517,0.946278 -2.301100,1.061210,1.149370 -2.534940,0.842541,0.764222 -2.467150,1.270040,1.075950 -2.436460,0.597869,0.929277 -0.364997,0.878871,1.918100 -0.435339,1.051830,1.835210 -1.251780,1.621450,2.090180 -1.181340,1.437470,1.930780 -1.782250,1.461170,1.791170 -1.870600,1.710000,1.896610 -2.384160,1.886060,0.938147 -2.505630,1.638010,0.724514 -2.599450,2.583940,-0.002174 -2.551670,2.814100,0.104153 -2.747150,-2.086220,0.301219 -3.024550,-1.084760,-0.184824 -2.903470,-1.054820,0.396858 -2.570430,-1.579950,0.776945 -2.932260,-1.840340,-0.094621 -3.052150,-1.301820,-0.289189 -2.749850,1.970650,-0.110039 -2.818200,0.981080,0.010580 -3.001850,1.114100,-0.423590 -2.634430,1.110300,0.521179 -2.730820,0.744887,0.395463 -2.014400,3.290120,0.843664 -1.497640,3.332590,1.246410 -1.026770,2.297350,1.713910 -0.419272,1.497980,2.039290 -0.840061,1.669880,2.023800 -1.184000,1.824700,1.988060 -0.950098,3.182600,1.474110 -0.937354,1.189020,1.799280 -0.671536,1.394800,2.015860 -0.595300,0.962749,1.632670 -0.834071,1.473270,1.990600 -1.374500,1.246770,1.797900 -2.102970,1.672090,1.766170 -2.159160,1.809850,1.593270 -1.664640,1.877410,1.881660 -2.380960,1.398840,1.333200 -2.046850,1.379470,1.667190 -2.257170,1.320490,1.374390 -1.674760,1.210730,1.684680 -1.984490,1.083540,1.470160 -0.990353,1.045890,1.673430 -0.646256,0.848479,1.512720 -0.741111,0.838477,1.340100 -1.150380,1.049220,1.572660 -1.633090,1.026490,1.540640 -1.338370,1.097010,1.706290 -1.827030,0.968370,1.420280 -1.178150,0.479077,1.538110 -1.194590,0.584506,1.432770 -0.743068,0.682655,1.293010 -0.674174,0.625220,1.399700 -1.533630,0.432412,1.536230 -1.538760,0.569260,1.422040 -1.888400,0.496086,1.361960 -1.793510,0.634163,1.313240 -1.043970,0.258220,1.572510 -0.852340,0.409701,1.456760 -1.499520,0.195877,1.539720 -1.860870,0.335479,1.328310 -1.848480,0.093745,1.548750 -2.043180,0.259162,1.294100 -2.158410,0.403607,1.108490 -2.036040,0.441006,1.173830 -2.381160,0.388582,0.937622 -2.327970,0.187367,1.127970 -0.356021,0.492336,2.296510 -0.464899,0.391123,2.172820 -0.497172,0.764687,1.717470 -1.016160,0.108270,1.781350 -1.384670,0.007542,1.791100 -0.951729,-0.099551,2.037490 -1.285550,-0.234522,1.979430 -0.612914,0.257241,2.111240 -0.625160,0.525750,1.573540 -0.462034,-0.046825,2.473090 -0.567970,0.123761,2.232650 -0.582572,-0.086150,2.197160 -0.685036,-0.220701,2.307080 -0.795986,-0.293187,2.076730 -0.819487,-0.601074,2.231720 -0.747746,-0.364237,2.444130 -0.758612,-0.749231,2.012220 -0.846053,-0.676250,1.909130 -0.800655,-0.948515,2.009370 -1.018320,-0.845343,1.772560 -0.584785,-0.877771,2.169680 -0.751959,-0.693308,2.361430 -0.724730,-0.522245,2.546190 -0.614923,-0.619552,2.501320 -0.441863,-0.161571,2.696730 -0.547384,-0.327551,2.777490 -0.493746,-0.530921,2.719690 -0.471956,-1.048370,2.334890 -0.261379,-0.807196,2.582420 -0.247826,-0.716493,2.796160 -0.342742,-0.563616,3.152460 -0.320935,-0.391772,3.187350 -0.328221,-0.089759,3.001960 -0.300511,0.209664,2.702370 -1.649500,-0.404549,1.959740 -1.695450,-0.996747,2.004100 -1.898300,-0.606529,1.938660 -1.310810,-1.219780,1.656930 -2.236550,-1.147700,1.662020 -2.008730,-1.447390,1.715400 -1.540700,-1.742740,1.359230 -2.398150,-0.846630,1.539800 -2.008070,-0.381148,1.762190 -1.557800,-3.031200,1.522450 -1.205090,-3.240010,1.892130 -1.686930,-3.160190,1.431030 -1.022250,-2.845770,1.916970 -1.493230,-2.558510,1.393090 -2.142380,-1.832610,1.406420 -2.304410,-1.471240,1.431690 -2.373130,-1.924130,0.874450 -2.547380,-2.647510,0.579223 -2.245890,-2.543320,0.871957 -2.185270,-2.954830,0.838571 -2.301050,-3.009670,0.709501 -2.241330,-3.536620,0.577301 -2.073580,-3.387930,0.889781 -1.979050,-3.689200,0.780508 -1.614350,-2.390450,1.279860 -1.607700,-2.651490,1.376450 -1.994260,-2.840100,1.308490 -2.005560,-3.164790,1.024080 -1.730760,-3.534660,1.144760 -1.626690,-3.953240,1.236670 -1.380300,-4.105830,1.004540 -1.880830,-3.886390,0.602423 -1.304410,-4.220670,0.874327 -1.923070,-4.183830,0.489815 -1.255490,-3.768230,1.957140 -1.143800,-4.041360,1.740970 -0.900834,-4.188240,1.405160 -0.826027,-4.763250,0.692279 -0.673562,-4.175810,1.440320 -0.679776,-4.096790,2.199800 -0.731869,-3.819400,2.446000 -0.899763,-3.283330,2.282110 -0.742587,-2.904180,2.168740 -1.438220,-2.296490,1.378130 -0.916008,-2.275490,1.956650 -0.600683,-2.426380,2.279050 -0.628879,-2.294390,2.344360 -0.905134,-2.125970,1.994860 -1.029480,-1.770300,1.995680 -0.587485,-1.679250,2.410050 -1.358160,-4.521820,0.453214 -1.784020,-4.340270,0.281984 -2.228950,-3.955910,0.303058 -2.062210,-3.786450,0.551853 -2.453340,-3.580780,0.212511 -2.709140,-2.981360,0.213730 -2.852770,-2.407290,0.109755 -2.778080,-3.465370,-0.559768 -2.909900,-3.826720,-1.134630 -3.053730,-2.812260,-0.667369 -3.167910,-2.371890,-0.703289 -3.263440,-2.075920,-1.638810 -3.587240,-1.448850,-1.862010 -3.901420,-2.303840,-1.949050 -3.913110,-2.386690,-2.093550 -3.613860,-1.014270,-2.470210 -4.017480,-2.013540,-2.630410 -4.168160,-0.758749,-3.420320 -4.123410,-0.815678,-3.560600 -4.157020,-0.270506,-3.455140 -3.923490,0.329369,-3.306120 -4.108540,0.029265,-3.319620 -4.056260,0.098727,-3.494040 -3.817300,0.568895,-2.710910 -3.805410,0.249379,-2.401800 -3.759990,0.023288,-2.231380 -3.602870,-0.910249,-1.841020 -3.538380,-0.327181,-2.067530 -3.189220,-1.693410,-0.848447 -3.200080,-0.928846,-1.126270 -3.265560,-0.460338,-1.554000 -3.730610,0.187636,-1.792600 -3.651830,0.108469,-2.133500 -3.070270,-0.669828,-0.541514 -3.163840,-0.157172,-0.509062 -2.450930,-1.205890,1.256560 -2.724330,-0.696504,0.931940 -2.590200,-0.415051,1.159860 -2.203180,-0.004348,1.393510 -1.709920,-0.177054,1.790030 -2.270030,0.128294,1.212100 -2.642730,-0.208566,0.978259 -2.797040,-0.502781,0.748154 -2.947150,-0.669172,0.146710 -2.676340,0.005696,0.752627 -2.819360,-0.269231,0.533931 -2.934670,-0.256637,0.036251 -2.614720,0.285069,0.613698 -2.766120,0.169373,0.427951 -2.863010,0.267495,0.022251 -3.053850,0.450373,-0.431357 -2.579620,0.481480,0.705967 -2.753960,0.550371,0.363327 -2.849600,0.786575,0.016460 -2.578360,0.631464,0.744193 -3.852240,0.808444,-1.842770 -3.690100,0.417510,-2.271630 -3.416770,0.488240,-1.093100 -3.459480,1.037380,-1.038890 -4.107800,-0.235731,-3.644330 --1.264420,-2.045270,1.499450 -1.263540,-2.087010,1.500200 --0.528530,-2.018130,2.241150 -0.000000,-2.068050,2.375890 -0.000000,-1.930110,2.307660 --0.527925,-1.861970,2.250810 --0.883022,-2.023290,1.924810 --0.914606,-1.896810,1.906580 --1.111650,-2.063490,1.621070 --1.145330,-1.980310,1.631510 -0.526591,-1.861970,2.251120 -0.527202,-2.018130,2.241460 -0.913476,-1.896810,1.907120 -0.881882,-2.023290,1.925340 -1.110690,-2.063490,1.621730 -1.144360,-1.980310,1.632190 --3.601810,2.264240,-5.205500 --3.610590,0.235709,-5.405360 --2.901020,4.244930,-2.521450 --3.106170,3.210410,-1.035450 --2.698270,4.098120,-1.093810 --1.771960,4.672890,0.055769 --1.578610,4.962980,-2.941430 -0.000000,6.008380,-2.769710 --1.055700,5.053640,0.607575 -0.000000,5.245840,0.805753 -3.613790,0.235709,-5.403220 -2.698920,4.574510,-1.092210 -3.910300,2.060090,-2.500060 -2.902520,4.721330,-2.519730 -1.580360,5.692740,-2.940490 --2.855190,3.713360,-0.389262 --2.467400,3.727070,0.266761 --3.576730,-1.507110,-4.634460 --2.046400,-1.335690,-6.367740 -0.000000,-2.011530,-7.405530 --2.081510,0.807126,-7.167190 -0.000000,0.897653,-8.034120 --3.924420,1.139380,-2.631550 --2.050160,3.149930,-6.453400 -0.000000,3.964090,-6.881710 --1.669350,4.949900,-5.425430 -0.000000,5.693870,-5.022140 --3.570450,3.921350,-4.491700 --3.908810,2.060090,-2.502380 --3.533450,2.618420,-1.239880 --2.234460,4.102310,-0.357324 --2.064700,3.646400,0.648232 --3.723710,2.035730,-1.851220 --3.514180,2.182680,-1.029340 --1.635130,3.702540,1.219340 --1.075740,3.967500,1.698320 -0.000000,4.322970,1.823510 -3.579470,-1.507110,-4.632340 -2.050170,-1.335690,-6.366530 -2.085760,0.807126,-7.165960 -3.604890,2.264240,-5.203360 -3.925980,1.139380,-2.629220 -2.053980,3.149930,-6.452180 -1.672570,4.949900,-5.424440 -3.573120,3.921350,-4.489580 -3.106780,3.210410,-1.033610 -3.534180,2.618420,-1.237780 -2.467240,4.203460,0.268223 -2.855420,3.713360,-0.387570 -1.771930,5.402640,0.056819 -2.234670,4.989460,-0.355999 -1.055340,5.421470,0.608201 -2.064310,4.311770,0.649455 -3.514790,2.182680,-1.027260 -3.724810,2.035730,-1.849020 -1.634410,4.432300,1.220310 -1.074740,4.335330,1.698950 -1,2,0 -3,4,0 -5,6,0 -6,1,0 -7,8,0 -8,3,0 -9,10,0 -10,5,0 -11,12,0 -12,7,0 -14,15,13 -17,18,16 -20,21,19 -23,24,22 -26,27,25 -29,30,28 -32,33,31 -34,28,31 -36,37,35 -39,40,38 -42,43,41 -44,45,21 -47,48,46 -50,51,49 -53,54,52 -54,56,55 -57,56,54 -59,60,58 -62,63,61 -63,64,61 -66,67,65 -67,68,65 -69,70,0 -2,69,0 -71,72,0 -72,9,0 -70,73,0 -73,11,0 -26,3,8 -74,75,26 -75,3,26 -76,3,75 -77,3,76 -79,12,78 -12,80,78 -82,83,81 -81,84,82 -84,85,82 -87,84,86 -84,81,86 -88,89,86 -89,87,86 -90,84,87 -92,93,91 -95,96,94 -96,97,94 -99,100,98 -100,101,98 -103,104,102 -104,105,102 -106,107,104 -107,105,104 -109,110,108 -111,112,109 -112,110,109 -110,112,99 -112,100,99 -101,13,98 -13,15,98 -113,114,13 -114,14,13 -116,117,115 -117,118,115 -117,119,118 -119,120,118 -121,122,120 -122,118,120 -118,122,113 -122,114,113 -91,124,123 -124,125,123 -126,125,124 -127,125,96 -125,126,96 -117,124,91 -124,117,126 -117,116,126 -91,93,117 -93,119,117 -129,130,128 -130,94,128 -131,130,129 -131,132,130 -132,133,130 -88,86,131 -86,132,131 -95,134,96 -134,127,96 -135,134,133 -134,95,133 -132,135,133 -86,81,132 -81,135,132 -137,138,136 -138,139,136 -141,136,140 -136,139,140 -125,139,123 -139,138,123 -125,127,139 -127,140,139 -127,134,140 -134,141,140 -134,135,141 -135,142,141 -135,81,142 -81,83,142 -144,145,143 -145,146,143 -147,148,145 -148,146,145 -149,150,147 -150,148,147 -143,146,151 -146,152,151 -148,153,146 -153,152,146 -150,154,148 -154,153,148 -154,155,153 -155,156,153 -154,157,155 -157,158,155 -157,85,158 -85,84,158 -90,159,84 -159,158,84 -159,160,158 -160,155,158 -161,162,92 -162,163,92 -153,164,152 -164,165,152 -164,166,165 -166,167,165 -165,167,168 -167,169,168 -168,169,161 -169,162,161 -169,170,162 -170,171,162 -169,167,170 -167,172,170 -167,173,172 -173,174,172 -174,173,175 -173,176,175 -177,178,173 -178,176,173 -179,180,177 -180,178,177 -180,181,178 -181,182,178 -182,176,178 -182,183,176 -183,175,176 -181,184,182 -184,183,182 -172,174,171 -174,185,171 -185,174,186 -174,175,186 -187,183,184 -187,186,183 -186,175,183 -188,181,180 -188,189,181 -189,184,181 -189,190,184 -190,187,184 -191,187,190 -191,192,187 -192,186,187 -192,193,186 -193,185,186 -193,194,185 -194,171,185 -171,194,162 -194,163,162 -163,195,92 -195,93,92 -163,194,195 -194,196,195 -194,193,196 -193,197,196 -193,192,197 -192,198,197 -192,191,198 -191,199,198 -191,190,199 -190,200,199 -190,189,200 -189,201,200 -189,188,201 -188,202,201 -167,166,173 -166,177,173 -166,203,177 -203,179,177 -204,205,203 -205,179,203 -206,179,205 -205,204,207 -204,208,207 -209,206,207 -206,205,207 -210,211,204 -211,208,204 -213,214,212 -213,215,214 -215,24,214 -212,214,23 -214,24,23 -208,216,207 -216,217,207 -219,217,218 -217,216,218 -207,217,209 -217,64,209 -105,220,102 -220,218,102 -218,220,219 -220,221,219 -217,219,64 -219,16,64 -219,221,16 -221,17,16 -221,220,17 -220,222,17 -220,223,222 -224,225,223 -225,222,223 -16,226,64 -16,227,226 -227,228,226 -228,212,23 -227,229,228 -229,212,228 -229,225,212 -225,230,212 -225,224,230 -224,231,230 -224,232,231 -232,233,231 -235,233,234 -233,232,234 -212,230,213 -230,236,213 -230,231,236 -231,237,236 -231,233,237 -233,238,237 -235,239,233 -239,238,233 -239,240,19 -240,20,19 -19,21,241 -21,242,241 -241,243,238 -243,237,238 -243,244,237 -244,236,237 -236,244,213 -244,245,213 -242,246,241 -246,243,241 -246,247,243 -247,244,243 -247,248,244 -248,245,244 -213,245,215 -245,249,215 -248,250,245 -250,249,245 -251,252,22 -252,23,22 -24,215,22 -215,253,22 -215,249,253 -249,254,253 -249,250,254 -250,255,254 -253,254,256 -254,257,256 -254,255,257 -255,258,257 -64,63,209 -63,259,209 -259,206,209 -259,180,206 -180,179,206 -259,260,180 -260,188,180 -261,202,260 -202,188,260 -239,235,240 -235,262,240 -20,240,69 -240,70,69 -240,262,70 -262,73,70 -235,234,262 -234,263,262 -262,263,73 -263,11,73 -11,263,12 -263,80,12 -263,234,80 -234,264,80 -232,265,234 -265,264,234 -266,267,220 -267,223,220 -265,223,264 -223,267,264 -266,220,268 -220,105,268 -268,105,107 -79,78,269 -78,270,269 -264,267,80 -267,78,80 -267,266,78 -266,270,78 -266,268,270 -268,271,270 -107,272,268 -272,271,268 -8,269,26 -269,27,26 -270,271,269 -271,27,269 -272,25,271 -25,27,271 -273,274,272 -274,25,272 -274,74,25 -74,26,25 -30,273,28 -273,275,28 -34,276,28 -276,29,28 -28,275,31 -275,32,31 -277,278,31 -278,34,31 -32,279,33 -279,35,33 -280,277,33 -277,31,33 -281,77,280 -77,277,280 -282,280,35 -280,33,35 -284,285,283 -286,285,37 -285,284,37 -37,284,35 -284,282,35 -279,287,35 -287,36,35 -288,32,275 -32,288,279 -288,289,279 -272,290,273 -290,275,273 -290,291,275 -291,288,275 -291,292,288 -292,289,288 -289,292,293 -292,294,293 -107,106,272 -106,290,272 -291,290,295 -290,106,295 -292,291,296 -291,295,296 -102,218,297 -218,216,297 -298,103,297 -103,102,297 -299,298,211 -298,297,211 -300,299,210 -299,211,210 -156,300,301 -300,210,301 -155,302,156 -302,300,156 -302,303,300 -303,299,300 -299,303,298 -303,304,298 -104,295,106 -104,103,295 -103,305,295 -103,298,305 -298,304,305 -302,160,303 -160,306,303 -306,307,303 -307,304,303 -305,304,308 -304,307,308 -295,305,296 -305,308,296 -159,309,160 -309,306,160 -306,309,307 -309,310,307 -307,310,308 -310,311,308 -296,308,312 -308,311,312 -309,159,313 -314,310,313 -310,309,313 -311,310,314 -312,311,315 -311,314,315 -312,315,108 -315,109,108 -316,111,313 -111,314,313 -314,111,315 -111,109,315 -89,112,316 -112,111,316 -89,88,112 -88,100,112 -131,101,88 -101,100,88 -131,129,101 -129,13,101 -128,94,115 -94,97,115 -13,129,113 -129,128,113 -113,128,118 -128,115,118 -293,294,317 -294,318,317 -296,294,292 -296,319,294 -312,319,296 -319,320,294 -320,318,294 -312,108,319 -108,320,319 -278,277,76 -277,77,76 -34,278,75 -278,76,75 -280,282,281 -282,321,281 -283,321,284 -321,282,284 -317,286,36 -286,37,36 -293,317,287 -317,36,287 -289,293,279 -293,287,279 -274,273,29 -273,30,29 -74,274,276 -274,29,276 -75,74,34 -74,276,34 -79,269,7 -269,8,7 -79,7,12 -241,238,19 -238,239,19 -265,232,224 -223,265,224 -229,17,225 -17,222,225 -23,226,228 -227,18,229 -18,17,229 -18,227,16 -256,22,253 -252,61,23 -61,226,23 -62,61,252 -61,64,226 -168,151,152 -151,168,143 -208,211,216 -211,297,216 -155,160,302 -203,301,204 -301,210,204 -164,153,301 -153,156,301 -166,164,203 -164,301,203 -168,152,165 -171,170,172 -90,316,159 -316,313,159 -87,89,90 -89,316,90 -150,85,154 -85,157,154 -149,82,150 -82,85,150 -138,137,143 -137,144,143 -161,138,168 -138,143,168 -123,138,161 -92,91,161 -91,123,161 -94,130,95 -130,133,95 -97,96,126 -116,115,126 -115,97,126 -322,9,72 -323,324,72 -324,322,72 -325,323,72 -326,325,72 -5,328,327 -328,329,327 -331,332,330 -334,332,333 -332,331,333 -334,335,332 -335,336,332 -337,338,335 -338,336,335 -339,335,334 -340,341,93 -343,344,342 -344,345,342 -347,348,346 -348,349,346 -351,352,350 -352,353,350 -354,355,350 -355,351,350 -357,358,356 -359,360,356 -360,357,356 -359,356,347 -356,348,347 -40,346,38 -346,349,38 -361,362,38 -362,39,38 -364,365,363 -365,366,363 -119,364,120 -364,363,120 -367,121,363 -121,120,363 -367,363,362 -363,39,362 -369,341,368 -341,370,368 -371,369,368 -368,372,371 -372,343,371 -364,341,369 -364,369,365 -369,371,365 -93,341,119 -341,364,119 -373,374,345 -374,375,345 -376,374,373 -378,376,377 -376,373,377 -336,338,378 -338,376,378 -379,344,372 -344,343,372 -379,380,344 -380,377,344 -378,377,380 -332,336,380 -336,378,380 -382,383,381 -383,384,381 -384,385,381 -385,386,381 -381,368,382 -368,370,382 -372,368,386 -368,381,386 -379,372,385 -372,386,385 -380,379,387 -379,385,387 -332,380,330 -380,387,330 -389,390,388 -390,391,388 -392,393,388 -393,389,388 -394,395,392 -395,393,392 -388,391,396 -391,397,396 -398,392,396 -392,388,396 -399,394,398 -394,392,398 -401,399,400 -399,398,400 -403,399,402 -399,401,402 -333,403,334 -403,402,334 -404,339,402 -339,334,402 -405,404,401 -404,402,401 -407,408,406 -408,340,406 -410,398,409 -398,396,409 -412,410,411 -410,409,411 -411,409,413 -409,414,413 -413,414,407 -414,408,407 -416,413,415 -413,407,415 -411,413,417 -413,416,417 -419,411,418 -411,417,418 -419,418,420 -418,421,420 -422,423,420 -423,419,420 -424,425,422 -425,423,422 -424,422,426 -427,426,420 -426,422,420 -428,427,421 -427,420,421 -429,426,428 -426,427,428 -418,417,430 -417,415,430 -418,430,421 -430,431,421 -432,429,428 -431,432,421 -432,428,421 -433,424,426 -434,433,429 -433,426,429 -435,434,432 -434,429,432 -436,435,432 -437,436,431 -436,432,431 -438,437,430 -437,431,430 -439,438,415 -438,430,415 -439,415,406 -415,407,406 -195,406,93 -406,340,93 -439,406,196 -406,195,196 -438,439,197 -439,196,197 -437,438,198 -438,197,198 -436,437,199 -437,198,199 -435,436,200 -436,199,200 -434,435,201 -435,200,201 -433,434,202 -434,201,202 -412,411,423 -411,419,423 -440,412,425 -412,423,425 -441,442,425 -442,440,425 -443,441,425 -442,441,444 -441,445,444 -443,446,441 -446,445,441 -447,448,444 -448,442,444 -450,451,449 -452,450,46 -450,449,46 -449,451,46 -451,453,46 -455,444,454 -444,445,454 -454,42,455 -42,456,455 -454,445,65 -445,446,65 -457,350,456 -350,353,456 -457,456,458 -456,42,458 -42,454,43 -454,65,43 -459,458,41 -458,42,41 -457,458,460 -458,459,460 -457,460,461 -462,463,460 -463,461,460 -43,65,464 -466,43,465 -43,464,465 -465,453,451 -467,466,451 -466,465,451 -462,467,468 -467,451,468 -463,462,469 -462,468,469 -471,463,470 -463,469,470 -470,472,471 -472,473,471 -468,451,474 -451,450,474 -469,468,475 -468,474,475 -470,469,476 -469,475,476 -44,472,476 -472,470,476 -20,477,21 -477,44,21 -21,45,242 -45,478,242 -479,478,475 -478,476,475 -480,479,474 -479,475,474 -480,474,481 -474,450,481 -246,242,479 -242,478,479 -247,246,480 -246,479,480 -248,247,481 -247,480,481 -481,450,482 -450,452,482 -250,248,482 -248,481,482 -453,483,46 -483,47,46 -452,46,484 -46,48,484 -482,452,485 -452,484,485 -250,482,255 -482,485,255 -485,484,486 -484,487,486 -255,485,258 -485,486,258 -65,446,66 -488,66,443 -66,446,443 -424,488,425 -488,443,425 -489,488,433 -488,424,433 -202,261,433 -261,489,433 -472,44,490 -44,477,490 -477,20,2 -20,69,2 -490,477,1 -477,2,1 -473,472,491 -472,490,491 -491,490,6 -490,1,6 -491,6,327 -6,5,327 -473,491,492 -491,327,492 -493,471,492 -471,473,492 -494,495,461 -495,457,461 -461,493,494 -493,492,494 -457,495,350 -495,496,350 -496,354,350 -329,328,497 -328,498,497 -494,492,329 -492,327,329 -495,494,497 -494,329,497 -496,495,499 -495,497,499 -500,354,499 -354,496,499 -498,9,49 -9,322,49 -499,497,49 -497,498,49 -51,500,49 -500,499,49 -50,501,51 -501,500,51 -322,324,49 -324,50,49 -501,52,502 -52,54,502 -503,504,52 -504,53,52 -505,502,55 -502,54,55 -53,506,54 -506,57,54 -59,505,60 -505,55,60 -57,507,56 -507,55,56 -326,508,57 -508,507,57 -507,509,55 -509,60,55 -511,512,510 -510,513,511 -513,58,511 -511,58,509 -58,60,509 -514,515,58 -515,59,58 -516,502,505 -516,505,517 -505,59,517 -518,500,502 -500,501,502 -519,518,516 -518,502,516 -520,519,517 -519,516,517 -520,517,521 -517,522,521 -355,354,518 -354,500,518 -518,519,355 -519,523,355 -519,520,523 -520,524,523 -456,353,455 -353,525,455 -352,526,353 -526,525,353 -526,527,525 -527,447,525 -527,528,447 -528,448,447 -528,400,448 -400,529,448 -530,401,528 -401,400,528 -531,530,527 -530,528,527 -531,527,532 -527,526,532 -351,355,523 -352,351,533 -351,523,533 -526,352,532 -352,533,532 -405,530,534 -530,531,534 -535,534,532 -534,531,532 -532,533,535 -533,536,535 -533,523,536 -523,524,536 -537,404,534 -404,405,534 -537,534,538 -534,535,538 -538,535,539 -535,536,539 -536,524,539 -524,540,539 -541,404,537 -538,542,537 -542,541,537 -539,542,538 -540,543,539 -543,542,539 -543,540,357 -540,358,357 -360,544,542 -544,541,542 -360,542,357 -542,543,357 -359,337,360 -337,544,360 -338,337,347 -337,359,347 -346,376,347 -376,338,347 -374,376,40 -376,346,40 -345,375,342 -375,366,342 -374,40,375 -40,39,375 -375,39,366 -39,363,366 -521,522,545 -522,546,545 -524,520,521 -524,521,547 -540,524,547 -548,547,545 -547,521,545 -358,540,548 -540,547,548 -57,506,326 -506,325,326 -506,53,325 -53,323,325 -509,507,549 -507,508,549 -549,512,509 -512,511,509 -513,546,58 -546,514,58 -546,522,514 -522,515,514 -522,517,515 -517,59,515 -501,50,52 -50,503,52 -50,324,503 -324,504,503 -324,323,504 -323,53,504 -498,328,9 -328,10,9 -328,5,10 -476,478,44 -478,45,44 -493,463,471 -461,463,493 -459,467,460 -467,462,460 -453,465,464 -41,466,459 -466,467,459 -41,43,466 -487,484,48 -68,483,464 -483,453,464 -67,483,68 -68,464,65 -414,396,397 -397,391,414 -447,444,525 -444,455,525 -401,530,405 -529,440,448 -440,442,448 -398,410,400 -410,529,400 -410,412,529 -412,440,529 -414,409,396 -415,417,416 -544,339,541 -339,404,541 -337,335,544 -335,339,544 -333,394,403 -394,399,403 -331,395,333 -395,394,333 -383,382,390 -382,391,390 -382,408,391 -408,414,391 -370,408,382 -341,340,370 -340,408,370 -373,345,377 -345,344,377 -342,371,343 -366,365,342 -365,371,342 -550,62,252 -551,483,67 -553,554,552 -554,555,552 -552,555,556 -555,557,556 -256,257,556 -257,552,556 -257,258,552 -258,553,552 -557,555,259 -555,260,259 -554,261,555 -261,260,555 -251,22,558 -556,558,256 -558,22,256 -550,252,251 -559,550,558 -550,251,558 -557,559,556 -559,558,556 -559,63,550 -63,62,550 -557,259,559 -259,63,559 -554,553,560 -553,561,560 -560,561,562 -561,563,562 -486,487,561 -487,563,561 -258,486,553 -486,561,553 -560,562,489 -562,488,489 -261,554,489 -554,560,489 -47,564,48 -564,563,48 -563,487,48 -551,47,483 -551,565,47 -565,564,47 -565,562,564 -562,563,564 -66,565,67 -565,551,67 -488,562,66 -562,565,66 -566,567,285 -569,570,568 -571,572,568 -574,575,573 -513,510,576 -578,579,577 -577,579,580 -580,573,575 -582,570,581 -77,281,3 -583,3,281 -3,583,4 -583,584,4 -4,584,0 -584,585,0 -583,567,584 -567,586,584 -584,586,585 -586,587,585 -281,321,583 -321,567,583 -283,567,321 -285,567,283 -286,588,285 -588,566,285 -566,589,567 -589,586,567 -586,589,587 -589,590,587 -589,591,590 -591,592,590 -566,593,589 -593,591,589 -568,572,593 -572,591,593 -572,573,591 -573,592,591 -588,594,566 -594,593,566 -593,594,568 -594,595,568 -595,569,568 -581,570,569 -570,596,568 -596,571,568 -572,571,573 -571,574,573 -597,596,582 -598,599,594 -599,595,594 -570,582,596 -571,596,600 -596,597,600 -574,571,601 -571,600,601 -602,575,601 -575,574,601 -595,599,110 -569,595,99 -595,110,99 -581,569,98 -569,99,98 -582,581,15 -581,98,15 -597,582,14 -582,15,14 -600,597,114 -597,14,114 -601,600,122 -600,114,122 -602,601,121 -601,122,121 -318,588,317 -588,286,317 -598,594,318 -594,588,318 -320,599,318 -599,598,318 -110,599,108 -599,320,108 -508,326,603 -326,72,603 -603,72,604 -72,71,604 -604,71,585 -71,0,585 -576,603,605 -603,604,605 -605,604,587 -604,585,587 -549,508,576 -508,603,576 -512,549,576 -510,512,576 -606,607,576 -607,513,576 -608,606,605 -606,576,605 -608,605,590 -605,587,590 -609,608,592 -608,590,592 -610,606,609 -606,608,609 -580,579,609 -579,610,609 -573,580,592 -580,609,592 -578,607,610 -607,606,610 -610,579,578 -611,612,577 -612,578,577 -613,614,577 -614,611,577 -615,616,580 -616,577,580 -617,615,575 -615,580,575 -618,613,616 -619,620,612 -620,578,612 -577,616,613 -616,615,618 -615,621,618 -615,617,621 -617,622,621 -575,602,617 -602,622,617 -612,356,619 -612,611,356 -611,348,356 -611,614,348 -614,349,348 -614,613,349 -613,38,349 -613,618,38 -618,361,38 -618,621,361 -621,362,361 -621,622,362 -622,367,362 -622,602,367 -602,121,367 -607,545,513 -545,546,513 -578,620,607 -620,545,607 -619,548,620 -548,545,620 -619,356,548 -356,358,548 -136,145,137 -145,144,137 -142,149,141 -149,147,141 -136,141,145 -141,147,145 -83,82,142 -82,149,142 -389,384,390 -384,383,390 -395,387,393 -387,385,393 -385,384,393 -384,389,393 -331,330,395 -330,387,395 \ No newline at end of file diff --git a/contrib/Installer/boinc/boinc/MD5.vb b/contrib/Installer/boinc/boinc/MD5.vb deleted file mode 100644 index 3e71e538bf..0000000000 --- a/contrib/Installer/boinc/boinc/MD5.vb +++ /dev/null @@ -1,119 +0,0 @@ -Imports System.Text - -Public Class MD5 - 'Returns MD5 Hash of a string or cpid with blockhash - - Private RAM As New List(Of Guid) - Public Function GetHex(i As Integer) As String - Dim hex As New StringBuilder - hex.AppendFormat("{0:x2}", i) - Return hex.ToString() - End Function - Public Function UpdateMD5(longcpid As String, hash_block As String) As String - Dim hexpos As Integer = 0 - Dim shash As String = HashHex(hash_block) - For i1 As Integer = 0 To Len(longcpid) Step 2 - Dim iSalt As Integer = ROL(shash, i1, longcpid, hexpos) - Append1(iSalt) - hexpos += 1 - Next - Return HexDigest() - End Function - Private Function HexDigest() As String - Dim sOut As String = "" - Try - Dim objMD5 As New System.Security.Cryptography.MD5CryptoServiceProvider - Dim arrData(RAM.Count - 1) As Byte - Dim arrHash() As Byte - Dim i As Long = 0 - For Each Guid In RAM - arrData(i) = "&h" + Mid(Guid.ToString(), 10, 2) - i += 1 - Next - arrHash = objMD5.ComputeHash(arrData) - objMD5 = Nothing - sOut = ByteArrayToHexString2(arrHash) - Return sOut - - Catch ex As Exception - Return "MD5Error" - End Try - - End Function - - Public Function HashHex(BlockHash As String) As String - Dim sHash As String = GetMd5String(BlockHash) - Return sHash - End Function - - Public Function ROL(blockhash As String, iPos As Integer, hash As String, hexpos As Integer) As Integer - Dim cpid3 As String = "" - If iPos <= Len(hash) - 1 Then - Dim hex As String = Mid(hash, iPos + 1, 2) - Dim rorcount As Integer = 0 - rorcount = BitwiseCount(blockhash, hexpos) - Dim b As Integer = HexToByte(hex) - rorcount - If (b >= 0) Then - Return b - End If - Return HexToByte("00") - End If - Return 0 - End Function - Public Function HexToByte(sData As String) As Integer - Dim lByte As Long = "&h" + sData - Return lByte - End Function - Public Function BitwiseCount(Str As String, pos As Integer) As Integer - Dim ch As String = "" - If pos < Len(Str) Then - ch = Mid(Str, pos + 1, 1) - Dim asc1 As Integer = Asc(ch) - If (asc1 > 47 And asc1 < 71) Then asc1 = asc1 - 47 - Return asc1 - End If - Return 1 - End Function - Public Function CompareCPID(usercpid As String, longcpid As String, blockhash As String) As Boolean - usercpid = LCase(usercpid) - longcpid = LCase(longcpid) - blockhash = LCase(blockhash) - If Len(longcpid) < 34 Then Return False - Dim cpid1 As String = Mid(longcpid, 1, 32) - Dim cpid2 As String = Mid(longcpid, 33, Len(longcpid) - 31) - Dim shortcpid As String = UpdateMD5(cpid2, blockhash) - If shortcpid = "" Then Return False - If shortcpid = cpid1 And cpid1 = usercpid And shortcpid = usercpid Then Return True - Return False - End Function - Public Function GetMd5(ByVal sData As String) As String - Try - Dim objMD5 As New System.Security.Cryptography.MD5CryptoServiceProvider - Dim arrData() As Byte - Dim arrHash() As Byte - arrData = System.Text.Encoding.UTF8.GetBytes(sData) - arrHash = objMD5.ComputeHash(arrData) - objMD5 = Nothing - Dim sOut As String = ByteArrayToHexString2(arrHash) - Return sOut - Catch ex As Exception - Return "MD5Error" - End Try - End Function - Private Sub Append1(salt As Integer) - If salt = 0 Then Exit Sub - Dim g As Guid = Guid.NewGuid() - Dim s As String = g.ToString() - Mid(s, 10, 2) = GetHex(salt) - RAM.Add(New Guid(s)) - End Sub - Private Function ByteArrayToHexString2(ByVal arrInput() As Byte) As String - Dim strOutput As New System.Text.StringBuilder(arrInput.Length) - For i As Integer = 0 To arrInput.Length - 1 - strOutput.Append(arrInput(i).ToString("X2")) - Next - Return strOutput.ToString().ToLower - End Function - - -End Class diff --git a/contrib/Installer/boinc/boinc/Mutex.vb b/contrib/Installer/boinc/boinc/Mutex.vb deleted file mode 100644 index ae53a9ce16..0000000000 --- a/contrib/Installer/boinc/boinc/Mutex.vb +++ /dev/null @@ -1,48 +0,0 @@ -Imports System.IO -Imports System.Collections.Generic -Imports System.IO.MemoryMappedFiles -Imports System.Threading -Imports System.Net -Public Class SharedMemory - 'This was originally written with .NET's MemoryMapped File Service and a mutex, and it caused a few problems, so I updated it with this method until the need arises to move this to shared memory. - Private _name As String - Private _mmfpath As String - Public Function GetGridPath(ByVal sType As String) As String - Dim sTemp As String - sTemp = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\gridcoinresearch\" + sType - If System.IO.Directory.Exists(sTemp) = False Then - Try - System.IO.Directory.CreateDirectory(sTemp) - Catch ex As Exception - End Try - End If - Return sTemp - End Function - Public Sub New(name As String) - _name = name - _mmfpath = GetGridPath("database") + "\" + _name - Write("") - End Sub - Public Sub Write(data As String) - Try - Dim fs As New StreamWriter(_mmfpath) - fs.Write(data) - fs.Close() - Catch ex As Exception - End Try - End Sub - Public Function Read() As String - Try - Dim fs As New StreamReader(_mmfpath) - Dim sOut As String - sOut = fs.ReadToEnd() - fs.Close() - - Return sOut - Catch ex As Exception - Return "" - End Try - Return "" - - End Function -End Class diff --git a/contrib/Installer/boinc/boinc/My Project/Application.Designer.vb b/contrib/Installer/boinc/boinc/My Project/Application.Designer.vb deleted file mode 100644 index 88dd01c78a..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Application.Designer.vb +++ /dev/null @@ -1,13 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - diff --git a/contrib/Installer/boinc/boinc/My Project/Application.myapp b/contrib/Installer/boinc/boinc/My Project/Application.myapp deleted file mode 100644 index 758895def2..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Application.myapp +++ /dev/null @@ -1,10 +0,0 @@ - - - false - false - 0 - true - 0 - 1 - true - diff --git a/contrib/Installer/boinc/boinc/My Project/AssemblyInfo.vb b/contrib/Installer/boinc/boinc/My Project/AssemblyInfo.vb deleted file mode 100644 index 83a4c70065..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,35 +0,0 @@ -Imports System -Imports System.Reflection -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - -' Review the values of the assembly attributes - - - - - - - - - - -'The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' -' You can specify all the values or you can default the Build and Revision Numbers -' by using the '*' as shown below: -' - - - diff --git a/contrib/Installer/boinc/boinc/My Project/Resources.Designer.vb b/contrib/Installer/boinc/boinc/My Project/Resources.Designer.vb deleted file mode 100644 index 4f27bc1c27..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Resources.Designer.vb +++ /dev/null @@ -1,133 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - -Imports System - -Namespace My.Resources - - 'This class was auto-generated by the StronglyTypedResourceBuilder - 'class via a tool like ResGen or Visual Studio. - 'To add or remove a member, edit your .ResX file then rerun ResGen - 'with the /str option, or rebuild your VS project. - ''' - ''' A strongly-typed resource class, for looking up localized strings, etc. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Returns the cached ResourceManager instance used by this class. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BoincStake.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Overrides the current thread's CurrentUICulture property for all - ''' resource lookups using this strongly typed resource class. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set - resourceCulture = value - End Set - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradient() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradient", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradient75() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradient75", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradient751() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradient751", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradient752() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradient752", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradient753() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradient753", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property gradientmiddle() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("gradientmiddle", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property GradientU() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("GradientU", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - End Module -End Namespace diff --git a/contrib/Installer/boinc/boinc/My Project/Resources.resx b/contrib/Installer/boinc/boinc/My Project/Resources.resx deleted file mode 100644 index 5857b6086f..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Resources.resx +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\gradient752.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\GradientU.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\gradient75.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\gradient751.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\gradient.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\gradientmiddle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\gradient753.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/contrib/Installer/boinc/boinc/My Project/Settings.Designer.vb b/contrib/Installer/boinc/boinc/My Project/Settings.Designer.vb deleted file mode 100644 index f45f8719ea..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Settings.Designer.vb +++ /dev/null @@ -1,73 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - _ - Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) - -#Region "My.Settings Auto-Save Functionality" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property - End Class -End Namespace - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.BoincStake.My.MySettings - Get - Return Global.BoincStake.My.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/contrib/Installer/boinc/boinc/My Project/Settings.settings b/contrib/Installer/boinc/boinc/My Project/Settings.settings deleted file mode 100644 index 85b890b3c6..0000000000 --- a/contrib/Installer/boinc/boinc/My Project/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/contrib/Installer/boinc/boinc/OpenCL.vb b/contrib/Installer/boinc/boinc/OpenCL.vb deleted file mode 100644 index 9181ea4d27..0000000000 --- a/contrib/Installer/boinc/boinc/OpenCL.vb +++ /dev/null @@ -1,5 +0,0 @@ - -Module CLDevices - - -End Module diff --git a/contrib/Installer/boinc/boinc/Resources/GradientB.png b/contrib/Installer/boinc/boinc/Resources/GradientB.png deleted file mode 100644 index 96af69219ffc8a198b560572f3962875cef7d3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmeAS@N?(olHy`uVBq!ia0y~yVCDg`FLMA12F@v`4=^w=p7nHb45_&F_UOi3i9j9) z!=Gzs|MkAluTaUeDe-^9Rfg5vFBn%dhKXNb4r5*;w?QhQl(F_eR>M`+FCaF z4*U_k8+J8-B)?+UVVhuj;1%O)?u>@3%s`_UR?DLcu&-&bXI@j+c$Go>!FlE|d9Xzg zldB-sp}Qj10puo-VeD)47BGg{gOni)h+kkWVT9TY@_;_nOt5&Y!+x-_C5#|*fC`E8 z6hF|npkUb5z!veB0T?dG0$`Jnf(7CUBo}~!P;UV!%)o+7P@mxmNG4FQf-JKIhCAYIBQ(fV&!LA`;W;!HXIc5fPdy0V5RMO->O( z1VNCB6{L8o_7s((5!8c+AQcpZ)*LLvgElHc!O}YO-rHo2Q09{NCGXA5Z@x(>of`Ce zyS;=Ee=-ptCPWGmA}nekkW%!^G9hv{88?sSKYg3~cwr$Nh`-!={^#MLo8;D?EAvmk zZ=S3wm$v`zuk7|eK2j!L5knPIJJWhtA3bFksN@!`f>j{xf@PD{s5o=RtQf7Zs&H8q zS0V#_8b(mtGi{he5_W8K3kF;wDB<_~_O{-UgQfui=aS-FZ3SgmDST^#}0CyyVS2x0suWJ1PS>omT)bWL#>K;`%K*sMJzRP#mBD~t^34OKWf z-K^D>EU4ul6fu>P4AUV#n#u*aPA_b_?>5yIa176}ZwPRSD$YZR@LNB8TzR{zPg}aIQ*JMcl$OJb znT-Ry=b@AUHR5uTFg|M$bbLZRkXzR{rwCbK)|^8?u6Nh2cXiaY(Q?6x;IMP*lMg*G z93Y$UIN4Uy8tX%7c>(Q2duB$eE#kZ*+|$&+2+{2Wu*`{vw0k6wLDyYnjY(hu7EviS zgLuk!09X6!afY~yd<2YEeLWDwqS4Q^CVY$;jBmu}Bs3$TS)HC*6JLv<+k@aFNw|@7 r@ms!|OY3|?*`CuW+GI|Q?dR)iWuIl=ykDN&OaFqB2U78=eVM{vj8;Pd diff --git a/contrib/Installer/boinc/boinc/Resources/gradient.jpg b/contrib/Installer/boinc/boinc/Resources/gradient.jpg deleted file mode 100644 index 55eac94c9d67c7860296d63ca0a33ff54f81cab4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<K6nhlK zI~S0RMv=kk9cBk4J&XxR9AagV4Zy7jCD>5nnit7V1{9e=95^W6AtzDG1GA9`S{?!h z1UL^d2_Of_P-QdY@geiD@u7qOs3>GaiX_2?2?+(zvXGI9@k;}e914^B0t%NH4$~K6 zRH3TrM&%O2GoxbkFni#%(aHgr6z-s5LMhBq^q)QtN^t_naRHJ)0F4V~dq&6OKowGu z7(WuyZ4OAg54fXwFTpgs8IDM%`i_e6Fi3Y*kK zK#qEn8)T$wFh)(A$X;X_sp-_kJ$d7eH)YnceaGp<7?dIH{)o6L$czqvoZK_2hsY36 zzSMw}?-@xgBn9QBAZcgd?WH}SePux(8@?<+4!OZu3M@r-A`_8GiV|hEnk1*d!KpzU b)Z!FGZ*eYw^x_y9?HL^J<59s3RdEvlzT4;l diff --git a/contrib/Installer/boinc/boinc/Resources/gradient75.png b/contrib/Installer/boinc/boinc/Resources/gradient75.png deleted file mode 100644 index 763175dab47f942913856a69953b3ad52df96d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmeAS@N?(olHy`uVBq!ia0y~yV42Fmz^KIm6kzE5ZO6*Mz%1kG;uunK>+Ri(yiA4y z&W`LmlYZ@Y;H}xHeOBb-6Bo-D)(p)i4Euvs9i}pba4wk7u;zvr!zz{w3@d~hv=~>h zEbszSD})~8nm4Rv0g4IB0BN9-Z9)q`>fovvY#Af=fs6=HWe8<@!Fxb~7pxJX>Yp#e zfiR{JPOwD z0bpzHlre8Z@deP-d)ka7TBFa*Acbb{o^U3pTYwTkTW&xC3E|f-!VJ+MkAj?g0339P zAOrgFb{)MODljGPHpa3U(`UVE?cZ#}_@TSbjWLMR*Dvi66Yx zVCewKQ_#SN#}q6WuJ42>_A3Co2NqPf^MIBDeF_h)hItG;mtctxnCgIjMfNjNLMUir sMnpAw4Arp1LJ3I+ETq9HRJg%$UwW#^D~WWWg`oW6>FVdQ&MBb@0CQagoB#j- diff --git a/contrib/Installer/boinc/boinc/Resources/gradient751.png b/contrib/Installer/boinc/boinc/Resources/gradient751.png deleted file mode 100644 index ab119116bd335779bb91edaacb682932002da472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 849 zcmeAS@N?(olHy`uVBq!ia0y~yV42Fmz^KIm6kzE5ZO6*Mz%1eE;uunK>+Ri6-y;Dc zEC)B<{i*IauR~(Tw>4agOl@lQYk3|tnlOYi{Wz_~xI$=w7sD!+3x*8QoDNfgf&r=z zICqvYZxd?JVqC?tzzayh)G&mAl-xhac*Cn&}W8(QwS%J zb3N}s7%;rRwgI`JOc}tCgqr@q+5)H&=ztuEJW$c~JQNYI0bq};g8BSGD%>@zSRUNs z1qK*g4ruOlMuu%d4$NSyz)=Bo4b*tBVL;;%a-mEgj2M9SLwyd4Ocdk6k%nSCQbgCV zvjc+`7=`difw|^^z6H$FccwzZ0+eRJ{)l4(x(}9Yvdv+dp~(jl)bIduV6Hf(#aOYP z1?)+n?{*{E1`R}q=M3+Fwt@W$vIP;+$ZWVYFp2GXgBl|*Bo1u92}#2T#G{?q>v(EU QCxh~er>mdKI;Vst02glu%>V!Z diff --git a/contrib/Installer/boinc/boinc/Resources/gradient752.png b/contrib/Installer/boinc/boinc/Resources/gradient752.png deleted file mode 100644 index f0034fa499651396440953595389389da0a349b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmeAS@N?(olHy`uVBq!ia0y~yV42Fmz^KIm6kzE5ZO6*Mz%1hF;uunK>+PM5yoVSB zSPmYIIs8SRaiy>l2g6yBjaIL7--{g(k7QW&h3kMG;|(u{RV*un8nhT!u{>a7M{rjN zEr3WJm|ez_pv?&9gOx7uYN!un0;*Q$c9_Z#!Wp2-U~X|Bj441B#tntA_qcK*%v{9+ zG?V+lZ!d;zFw=pi)AO&az*b^}SRx~jKm4h^bl|v1IdF1{< zMjfCy&}L+h!1MxbMzM+)!cF+jkb`8}j|H(HE5P9t%2ZRx1op&(_4#0TF{oQZ+*{BL za|q1xP$r8=hI@-Zo`(i#2q!`nvU3kaPk{yF2B1YyPauhcJ-y=~<2H!rk;8g}GB8|_ zz5OE^9O&Ib2uA~h5$ZQ&g@_;%Ly0FVdQ&MBb@09{x4H2?qr diff --git a/contrib/Installer/boinc/boinc/Resources/gradient753.png b/contrib/Installer/boinc/boinc/Resources/gradient753.png deleted file mode 100644 index 7bc0c995ecb2503a502234c2fb3981896d097208..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmaKr!D|yi6vp3dHi=t_;#Lq%J(We=3ZbVKgi=dH6QKmzHU&-DqhQe-M5~uBg(6kF zxd(5>Qz%-3&?qd#$<;qVN-+=w!Gkpw1Orv{o41?9iu5!)Z{B?Gd%rikTA03+8aOpT zM5)~6>{TM&CldA{1ZZ_{B2E+=&Sft+i`zTR(N`ZQkL!)8@4rg7uC(6yXO2C4SowVa z#*g-(eDdPF*czd0#-vX(TEUW=d*A-vrRA*VsKa~Kf5S6cc_%SP>-t*W3rz2&UNJpe z@YWXiZu__fjRgzxjv-4%!J^E#7hlWM*F5rZPbIdtQ|<`g+ZRUGx{`#<`;*9ya#Sf> z%$LK%z?Ah;q7_ea?JuW8)l7^QEcv=gOMy>!?`XJMF}r%Us6W@Ms^#6~SY)4V{4Q!7 zE?DUK=i@=RXTxZLLyp?MZHRMB3pv*V!SFKUVXA_tt|pROk#}2cG^u7vRq9RMC&zFV znI5IiBNHXzRh0l6tl0k}syw#F)EQ=U_y|^>3ghn^c8uNhP&kAWLsH2x^vyI<*g0=+ zmthAa=F5Hl45o@CS$rCDu0@DzCdhFwiw&$iEza(wl#MyagmOHnn`3>>m}!?mphP14 z)#0$Yh*ZxPsHtx+IcvCW@L=x@-zIl)I=eCDF8=}f7!J+= diff --git a/contrib/Installer/boinc/boinc/Resources/gradientmiddle.png b/contrib/Installer/boinc/boinc/Resources/gradientmiddle.png deleted file mode 100644 index 383bccb3c0dae5df792d05ce22edaa2d632048b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yV42Fmz^KIm6kzE5ZO6*Mz-;8{;uunK>+PMB6AuLl zxE!3c=#M!o|J8!4y|w2}9=Wc3ZfyIcnZaZ}%Yx$!H@p~DvHWPd&A4GILnu>#s>4)< z5Y7NqAo~T&1MRp#rXNkrFQgcvIe`+POgo~sLv&O~G9+lTe&`kk%79hhnaYr(3giHd z3E}*}%ATOjxJ{^GEz1g_1}(-_EDJ!^fZ0GJZ+HR4RtP;<#{yKfLI^Ckql_6L3>4u- zQbL?TCO{h&cr|33BW!(eix=!apzv-a$H0UyFx2FMoO|H@1BeIX3mCRRoC9`h2@}G7 zKaO(3%zfuo5Ai10;~|icfri`xeLw6*eM&n>0{mfa(Ep z8KAjPF9Myj{~#mKJG>uuf&(sQHzPD@6@ 0 And iHour <= 12 Then sInterval = "Morning" - If iHour >= 12 And iHour < 18 Then sInterval = "Afternoon" - If iHour >= 18 And iHour < 21 Then sInterval = "Evening" - If iHour >= 21 And iHour <= 23 Then sInterval = "Night" - Return sInterval - End Function - Public Function AddressUserBySurname(Magnitude As Long) As Boolean - Dim sSentence As String = "" - Try - - Dim sName As String - - sName = KeyValue("Name") - If Len(sName) = 0 Then - sName = KeyValue("Email") - If Len(sName) > 0 Then - Dim vName() As String - vName = Split(sName, "@") - If UBound(vName) > 0 Then - sName = vName(0) - End If - End If - End If - If Len(sName) = 0 Then sName = "Investor" - Dim sSurname = KeyValue("Surname") - Dim sDayInterval As String = DayInterval() - Dim sMag As String = "0" - Try - sMag = "0" + Magnitude.ToString() - Catch ex As Exception - End Try - sSentence = "Good " + sDayInterval + " " + sSurname + " " + sName + ", Your Magnitude is " + sMag + "." - If mbTestNet Then sSentence += ", in Test Net." Else mbTestNet += ", in Production." - Speak(sSentence) - Return True - Catch ex As Exception - Log("Error while Addressing User: " + Trim(sSentence) + ": " + ex.Message) - End Try - - End Function - Public Function Speak(sSentence As String) As Boolean - Try - If KeyValue("enablespeech") <> "true" Then - Log("Speech disabled.") - Exit Function - End If - Dim synth As New SpeechSynthesizer() - synth.SetOutputToDefaultAudioDevice() - Dim cInstalledVoice As ReadOnlyCollection(Of System.Speech.Synthesis.InstalledVoice) = synth.GetInstalledVoices() - If cInstalledVoice.Count > 0 Then - Dim sVoiceName As String = cInstalledVoice(0).VoiceInfo.Name - synth.Speak(sSentence) - End If - synth = Nothing - Return True - Catch ex As Exception - Log("Error while enunciating " + sSentence + ": " + ex.Message) - End Try - Return False - End Function -End Class diff --git a/contrib/Installer/boinc/boinc/Utilization.vb b/contrib/Installer/boinc/boinc/Utilization.vb deleted file mode 100644 index 2d53026bf0..0000000000 --- a/contrib/Installer/boinc/boinc/Utilization.vb +++ /dev/null @@ -1,367 +0,0 @@ -Imports Microsoft.VisualBasic -Imports System.Timers -Imports System.IO -Imports System.Windows.Forms - -Public Class Utilization - Implements IGridcoinMining - - Private _nBestBlock As Long - Private _lLeaderboard As Long - Private _lLeaderUpdates As Long - Public _boincmagnitude As Double - Private msSentence As String = "" - Private mlSpeakMagnitude As Double - Public ReadOnly Property Version As Double - Get - Return 430 - End Get - End Property - - Private lfrmMiningCounter As Long = 0 - Public Function SetQuorumData(sData As String) As String - Dim sQuorumData As String = ExtractXML(sData, "") - Dim sAge As String = ExtractXML(sQuorumData, "") - Dim sQuorumHash As String = ExtractXML(sQuorumData, "") - Dim TS As String = ExtractXML(sQuorumData, "") - Dim sBlock As String = ExtractXML(sQuorumData, "") - Dim sPrimaryCPID As String = ExtractXML(sQuorumData, "") - Log(sData) - Call UpdateSuperblockAgeAndQuorumHash(sAge, sQuorumHash, TS, sBlock, sPrimaryCPID) - Return "" - End Function - Public Sub TestGZIPBoincDownload() - Dim c As New clsBoincProjectDownload - c.DownloadGZipFiles() - End Sub - Public Function WriteKey(sData As String) As String - Try - Dim sKey As String = ExtractXML(sData, "") - Dim sValue As String = ExtractXML(sData, "") - UpdateKey(sKey, sValue) - Return "True" - Catch ex As Exception - Return "False" - End Try - End Function - Public Function GetDotNetMessages(sDataType As String) As String - Dim sReply As String = msRPCCommand - msRPCCommand = "" - Return sReply - End Function - Public Function SetRPCResponse(sResponse) As Double - SetRPCReply(sResponse) - Return 1 - End Function - Public Function FromBase64String(sData As String) As String - Dim ba() As Byte = Convert.FromBase64String(sData) - Dim sOut As String = ByteToString(ba) - Return sOut - End Function - Public Function ByteToString(b() As Byte) - Dim sReq As String - sReq = System.Text.Encoding.UTF8.GetString(b) - Return sReq - End Function - Public Function StringToByteArray(sData As String) As Byte() - Return modGRC.StringToByte(sData) - End Function - Public Function BoincMagnitude(value As String) As String - _boincmagnitude = Val(value) - Return "" - End Function - Public Function cAES512Encrypt(sData As String) As String - Return AES512EncryptData(sData) - End Function - Public Function cAES512Decrypt(sData As String) As String - Return AES512DecryptData(sData) - End Function - Public Sub StartWireFrameRenderer() - Dim thWireFrame As New Threading.Thread(AddressOf ThreadWireFrame) - thWireFrame.Priority = Threading.ThreadPriority.Lowest - thWireFrame.Start() - End Sub - Public Sub StopWireFrameRenderer() - If Not mfrmWireFrame Is Nothing Then - mfrmWireFrame.EndWireFrame() - End If - End Sub - Public Sub TestnetSetGenericRPCValue(sData As String) - SetRPCReply(sData) - End Sub - Public Function TestnetGetGenericRPCValue() As String - Return "" - End Function - - Public Function NeuralNetwork() As Double - Return 1999 - End Function - - Sub New() - mclsUtilization = Me - Try - Try - UpdateKey("UpdatingLeaderboard", "false") - Catch ex As Exception - Log(ex.Message) - End Try - Try - PurgeLog() - Catch ex As Exception - End Try - Log("Loading...") - Try - Catch ex As Exception - Log("New:" + ex.Message) - End Try - Catch ex As Exception - Log("While loading clsUtilization : " + ex.Message) - End Try - Log("Loaded") - End Sub - Sub New(bLoadMiningConsole As Boolean) - If bLoadMiningConsole Then ShowMiningConsole() - End Sub - - Public Function cGetMd5(sData As String) As String - Return GetMd5String(sData) - End Function - Public Function GetMd5FromBytes(b() As Byte) As String - Return GetMd5String(b) - End Function - Public Function StrToMd5Hash(s As String) As String - Return CalcMd5(s) - End Function - Public Function GetNeuralHash() As String - If Len(msCurrentNeuralHash) > 1 Then Return msCurrentNeuralHash 'This is invalidated when it changes - Dim sContract As String = GetMagnitudeContract() - '7-25-2015 - Use Quorum Hashing algorithm to get the quorum hash - Dim clsQHA As New clsQuorumHashingAlgorithm - Dim sHash As String = clsQHA.QuorumHashingAlgorithm(sContract) - ' Dim contractsDir As String = Path.Combine(GetGridFolder(), "contracts") - - ' If Directory.Exists(contractsDir) = False Then - ' Directory.CreateDirectory(contractsDir) - ' End If - ' Dim contractPath As String = Path.Combine(contractsDir, sHash, ".txt") - ' If File.Exists(contractPath) = False Then - ' File.WriteAllText(contractPath, sContract) - ' End If - - Return sHash - End Function - Public Sub ExportToCSVFile() - ExportToCSV2() - End Sub - Public Function GetNeuralContract() As String - Dim sContract As String = GetMagnitudeContract() - Return sContract - End Function - Public Function ShowForm(sFormName As String) As String - Try - Dim vFormName() As String - vFormName = Split(sFormName, ",") - Log("Showing " + sFormName) - - If UBound(vFormName) > 0 Then - sFormName = vFormName(0) - msPayload = vFormName(1) - Log("Showing form with payload " + msPayload) - - Else - msPayload = "" - End If - - Dim sMyName As String = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name - Dim obj As Object = Activator.CreateInstance(Type.GetType(sMyName + "." + sFormName)) - obj.Show() - Return "1" - Catch ex As Exception - Log("Unable to show " + sFormName + " because of " + ex.Message) - Return "0" - End Try - - End Function - Public Function ShowConfig() As Double - Try - mfrmConfig = New frmConfiguration - mfrmConfig.Show() - Catch ex As Exception - Log("Error while transitioning to frmConfig" + ex.Message) - End Try - Return 1 - End Function - Public Function muFileToBytes(SourceFile As String) As Byte() - Return FileToBytes(SourceFile) - End Function - Public Function ShowMiningConsole() As Double - Try - lfrmMiningCounter = lfrmMiningCounter + 1 - If mfrmMining Is Nothing Then - mfrmMining = New frmMining - End If - mfrmMining.Show() - Catch ex As Exception - End Try - Return 1 - End Function - Public Function TestOutdated(ByVal sdata As String, ByVal mins As Long) As Boolean - Return Outdated(sdata, mins) - End Function - Public Function TestKeyValue(ByVal sKey As String) As String - Return KeyValue(sKey) - End Function - Public Function TestUpdateKey(ByVal sKey As String, ByVal sValue As String) As Double - Call UpdateKey(sKey, sValue) - Return 1 - End Function - Public Sub ExecuteCode(ByVal sCode As String) - Log("Executing smart contract " + sCode) - Dim classSmartContract As New GridcoinSmartContract - classSmartContract.ExecuteContract(sCode) - End Sub - Public Sub SpeakSentence(sSentence As String) - msSentence = sSentence - Dim t As New Threading.Thread(AddressOf SpeakOnBackgroundThread) - t.Start() - End Sub - Public Sub SpeakOnBackgroundThread() - Dim S As New SpeechSynthesis - S.Speak(msSentence) - End Sub - Public Function GRCCodeExecutionSubsystem(sCommand As String) As String - 'Generic interface to execute approved signed safe code at runtime - Dim sResult As String = "FAIL" - Select Case sCommand - Case "DISABLE_WINDOWS_ERROR_REPORTING" - sResult = AllowWindowsAppsToCrashWithoutErrorReportingDialog() - Case "RESERVED" - sResult = "NOT IMPLEMENTED YET" - Case Else - sResult = "NOT IMPLEMENTED" - End Select - - If sResult = "" Then sResult = "SUCCESS" - Return sResult - - End Function - Public Function SetDebugMode(bMode) As Boolean - mbDebugging = bMode - End Function - Public Function SetSessionInfo(sInfo As String) As Double - Dim vSession() As String - vSession = Split(sInfo, "") - Try - msDefaultGRCAddress = vSession(0) - msCPID = vSession(1) - mlMagnitude = Val(vSession(2)) - Catch ex As Exception - Log("SetSessionInfo " + ex.Message) - End Try - Return 1 - End Function - Public Function ExplainMag(sCPID As String) As String - If bMagsDoneLoading = False Then - Log("This node is still syncing.") - Return "" - End If - Dim sOut As String = "" - sOut = ExplainNeuralNetworkMagnitudeByCPID(sCPID) - ' Log("Responding to neural request for " + sCPID + " " + sOut) - Return sOut - End Function - Public Function ResolveCurrentDiscrepancies(sContract As String) As String - Try - Dim sPath As String = GetGridFolder() + "NeuralNetwork\contract.dat" - Dim swContract As New StreamWriter(sPath) - swContract.Write(sContract) - swContract.Close() - Catch ex As Exception - Return ex.Message - End Try - Return "SUCCESS" - End Function - Public Function SetGenericVotingData(sValue As String) As Double - Return SetGenericData("POLLS", sValue) - End Function - Public Function SetGenericData(sKey As String, sValue As String) As Double - Try - If msGenericDictionary.ContainsKey(sKey) Then - msGenericDictionary(sKey) = sValue - Else - msGenericDictionary.Add(sKey, sValue) - End If - Return 1 - Catch ex As Exception - Return 0 - End Try - End Function - Public Function SetTestNetFlag(sData As String) As Double - Try - If sData = "TESTNET" Then - mbTestNet = True - Else - mbTestNet = False - End If - Log("Testnet : " + Trim(mbTestNet)) - - Catch ex As Exception - Return 0 - End Try - Return 1 - End Function - Public Function SyncCPIDsWithDPORNodes(sData As String) As Double - 'Write the Gridcoin CPIDs to the Persisted Data System - Try - Call SyncDPOR2(sData) - Catch ex As Exception - Log("Exception during SyncDpor2 : " + ex.Message) - Return -2 - End Try - Log("Finished syncing DPOR cpids.") - Return 0 - End Function - Public Function PushGridcoinDiagnosticData(sData As String) As Double - Try - msSyncData = sData - Catch ex As Exception - Log("Exception during PushGridcoinDiagnosticData : " + ex.Message) - Return -2 - End Try - Return 1 - End Function - Public Sub UpdateMagnitudesOnly() - EnsureNNDirExists() - mbForcefullySyncAllRac = True - ResetCPIDsForManualSync() - Call UpdateMagnitudes() - End Sub - Public Sub SetSqlBlock(ByVal data As String) - Exit Sub - End Sub - Public Sub UpdateLeaderBoard() - Exit Sub - If KeyValue("disablesql") = "true" Then Exit Sub - Try - Catch ex As Exception - End Try - End Sub - Public Sub SetBestBlock(ByVal nBlock As Integer) - - End Sub - Public Function GetLanIP() As String - Return GetLocalLanIP1() - End Function - Protected Overrides Sub Finalize() - Try - MyBase.Finalize() - Catch ex As Exception - End Try - End Sub - -End Class - -Public Interface IGridcoinMining - - -End Interface diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYING b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYRIGHT b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYRIGHT deleted file mode 100644 index 179f039c57..0000000000 --- a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/COPYRIGHT +++ /dev/null @@ -1,61 +0,0 @@ -// Berkeley Open Infrastructure for Network Computing -// http://boinc.berkeley.edu -// Source: http://boinc.berkeley.edu/source_code.php -// Copyright(C) 2002-2012 University of California -// -// This is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; -// either version 2.1 of the License, or (at your option) any later version. -// -// This software 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 Lesser General Public License for more details. -// -// To view the GNU Lesser General Public License visit -// http://www.gnu.org/copyleft/lesser.html -// or write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// -// -// wxWidgets Library Licence, Version 3.1 -// http://www.wxwidgets.org/ -// Source: http://www.wxwidgets.org/ -// Copyright (c) 1998-2012 Julian Smart, Robert Roebling et al -// -// -// cURL & libCURL -// http://curl.haxx.se/ -// Source: http://curl.haxx.se/ -// Copyright (c) 1996 - 2012, Daniel Stenberg, . -// -// -// OpenSSL & SSLeay -// http://www.openssl.org/ -// Source: http://www.openssl.org/ -// Copyright (c) 1998-2012 The OpenSSL Project. All rights reserved. -// Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -// -// -// zLib Commpression Library -// http://www.zlib.org -// Source: http://www.zlib.org -// Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler -// -// -// International Components for Unicode -// http://www.icu-project.org/ -// Source: http://www.icu-project.org/ -// Copyright © 1995-2012 International Business Machines Corporation and others. All Rights Reserved. -// -// -// Liberation Fonts -// https://fedorahosted.org/liberation-fonts/ -// Source: https://fedorahosted.org/liberation-fonts/ -// Digitized data copyright (c) 2010 Google Corporation -// with Reserved Font Arimo, Tinos and Cousine. -// Copyright (c) 2012 Red Hat, Inc. -// with Reserved Font Name Liberation. -// -// diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/LiberationSans-Regular.ttf b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/LiberationSans-Regular.ttf deleted file mode 100644 index a1c556ef66faa252cb79f9abbe83124d07774ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352308 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 z 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≻SQ~ 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�KKXk49mDZ4$ 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 z 1-Ws~%n3s6J9XhmRiG!QRv0fDVnKLsL6EGy%;A8)UhcPW!Z>T2o7ep~6Y;-q$( zFO;){r&`)u62Oc@;|N;mQMoV}jPH?>BIuhI`W}dm2uzp(>>u4%=piGxk01uRzvxA? z=XVlWbw7$?OGyS6D)vBu);%NvYE*x9eH^KI>KM_AVs$ynsJ|3T@45LBfP5d zdC-v>eT>LK&H6)*M0Sq00bY1}6ob^vQltQw&bIWb&WC>Jex@IfBa~97|xXX4VJ4kjl`;)XPmxFL9JBf zL1}kw3khBQuS$~5!~>${`R0d!u+q3NdJt%WaN@tDZay#o91D*_b0X^0q!OAJY(6X> zd3=P=Erne?KwS=+u zrTQ+;3ZjZdySs8{_}-5gIEASw;BTeu{2rIr@}kM(Be#q9E5wp=t&FERW&FAomEaFa zZFB{L&?o>TiDql*oKh|)Q)H0@2IbSpc%Q~t&TjyOIMNdGrWEw)Etm%Z=qsNHrzfrW zGkH)A22HMvL-ELL)oD!7UR1l6p*dTXcCC15k~-^i_Pyo)W;63sC*FlraXfO`W#stC z{kmq!7>|{>`MO)5cKrVH(A8X9eY2OvGug`e5zlq+k&)dC?>qOY9{;;=p9Yb|(W|q+ zt@Go7je1ih;z^|_8V7JM5kzI9Qnf}Cd1s1PyClYx4czxPI)`?Ja<^v`+G%3& z_uxD}$L($=|86?)wr8mq21t6q$gc}PJnMS@B0^fNhSYZ90b*WvxG0!Pt}klzw-8xG z>vsmgJ$eey&Vu6DF}}rv)1Nes%=F+r-$((ue}}srGu#jL!pE%}omwBn@UY(`aDGpWzbh;7<__X4f>0pr;8 zTRCe;S$lg-qsk_^hM^CM|8i%-5+>Mj@rGU#CV`XqSHF(k-c_S8KqGNx$ye$YU17QUixFMY#Z#MEEdL zkgtqA4}ru%c1J_Ud2$HOzMdv-yIwT0N@ic&Q{iYl`aQ=+C4XvB;vUAJwogo>-zj7E zRa~^@IGe-5o}AePoB6!t+Ia3jGuvLyzJ(bQyY&rsQcXq~?dOZ(5)yBEUQj8Nv+qio zo{ZOm968`AzZ+|p=akon+xx+1H_=xtsxQ}u{hlth1qBD6$ppOJJNDjK%MsrXzEizE zz%DFy_~zm1$vt{lhs`Ha4ZG|&k)NyD8`CdFd=}>=uGZ$?`WbKIO4tq6pXFbzDK2(6 z;%a7EELrDO`~ChicSfbtBw9>|xAjWzdmbGv6Le3QN{{*nj!~Cau7LcdrF2Hb1K#}o z=g?uSqcgi6IB+8zr8Ym1)4lT%zfI#-95I&eAnC9C2Hwz8w23B}I~nvNB7}Ix4>fTl z7eF?R+!|#yt+v7MTmDva6hImAvndYrw>RokjQ!~9R|83g_&`=mnQW@uf!xfCmxj4W zYZ*KF(&zSOvRwulTXROdJW7Ku_&OW6I-Col08&tcK!~`y+@q*_(4qhc5C{iTGp2x+ zDM&T!e-AFUw%T1^Uv-3wa*{zP$RT37)@~8)F9@?qqA1jqW_3kiM|29p2V~Y1zCbJY zmG`tjW=XQZP+kcWsieeC3NVO}w>^~o+T3M}--ofxVw_<#6;A*2II;Gc!jU( zA2MXl6vzQGCwwy-Z2j=T+Ply$Zr=LA0#j~N+X6vuygSh-6>Mhtb!_}kU+D*_7p>*w2ksu#D)J3Q6WePd2>SGQ2#}aL z$;7>%xJo24jJ7zzu$-jE?x1!Zbl_FwwCa{Arg0=uC%&AM2n zmPVE|`|5Iu6;qs@b!vfW$vu28D|AgV@%k5Y$Qc0%rxgc#3nzTAt0CbsdT~`CXfdTy zAAmfnQI0?xUL1cx+fDbmn(R8MI;C_&ED9Y#y(@l#om6aaguEc(*}&e!#D1&Varnt+e@SjzdXwKw zm6!IX>dQ)_^pMSl{H36ov$>0f{2VWCSE*+?XOupFbDCIGQ?D+#cB(8~_uX<k$g4l_$Vi$knbFXC2F1F4(q&k|P+srg%(tMTPzmjQUp}TAz{4*gy zLW>_bAr(ndp7^6^#KP}!Eq7mNImyb|+caprmW&OBf6%r$VZXS-i+_*Zu4wN5Ecp$k z@4sy+X^_}3$(-E?zQgmMdIsjZawL-;dEPU@XEImGkl*=U{Fb4yg1`i&73r8rArraj zl>bl;NTMf>&BNO20A;jRT5*PL7*Jdt(X?w&sE%B{s1U``aS7CBmnxe1e=65#28|Nyw03Q{6vN+ah25(+rytp! zOfl3i2i>QNoCXrCQsr&v&OA~pkwNH$zh!B!;K!zHAPQNP82|QBYV~+5ZR%&(=>C%^_2R^*;o#!{NM5dE& z#JVq`r016%Nyevysg;vBOY3cQkgp-A*S}0lycx{X64FW|OVFk<^rgCQT`XAhO2^EU z-g|{i9+RlP?Bxe(h=8!7_)$u|#_yq@O95^+cv}WMW`Y{owVo(Giz$J|9i{{(dzy#ye}IFQZ!)Lrwx^EJm&tbgk_pOe?4jlnvg)gfy{uG+0pZnN}1^ z_H-o6!(>tv4?pnShx)g9+1soA(VY$slu79Ol^yi`YobQx+`xbBx5gVc=c}7H>1QZ2 z2~Qa_1)1i`-fu+xH?+s6H@AO|fAtKx$OZoHiT0CIU-RDoBu$S!3LM?NJ-=K&JhUD< z^jfQ>x9B+4o!sGI#Qf4UYDnLkuA0S*v90SYLsphs8E9Cj#aN7J`hHyC&4uT@!J8lN z_APHLU(@eOy`Uj`|sD-u+ZSaRus@Mpc()mua=RNG*%rxhM3V!f`hk4 z)aZ!dNocJ`O=2a{H?LHeqY*k1teG|SNC)rh#roT?-E z-3j%fjZzCz&WnNgg%SG#-4#~|{6a%%gl{eruep_S%7jz8`011&DSRd2aj9J_ZtJbb zd-31+`>6SejP$7VUP`2J#ty>ms)wGF?t2QPI{LM8`gk@_u;p!ik@TEP{We)JAuBR!klyunRZ7huk_kADSqZBZ4hv{x zX`Pp)#}85{je5z|SxGBinM4|Zmw{$=g-Y>X1*Ga3Vs>J8 zyZ0-bh)O60(v%Mgr${7zsw8L%BY{`1C~4r5A=E-N;4pZB*21u5z|j68|MFnZsiRKx`s@mkX(Pp0dmGwNek^7X zQ(N9WJXf{HG*8tmFou-pIjDN#4>O>B99kK)H~%%jIC$m9&mq4%;@ioU{Ogj>OIPFO z<$IsDeqf_fWy8Zwkt>H{4L>|qCCdGMpKR%GU3_c^VkzIk1p3mqvGq)Db+=m>=XzoU z6wMi+;xcT8yH~GK<`kzClPCJB$4ANO0gG*uTfry)u5m3_y9r_rctS_O&C(6!Z7e?h za(Dezex_&KLS%ll@@;aBuqNp?`}NS$ZSK-V&T%B%N}73SNU!f?7w@&RJZH8%z_ny% zXU@CLHU!-zrBec@uqnvC`F+4_Z8X;J@H7<}u$UhG_R_zpUx-$PD37U>FqE98xl!}I z1k{y8ztDMaMJWu>$xcy#Uqtp+Vbq?<;&05=ojF}bYKFgsH}Njq_j+g>^~ysdPJ$Wa zDd)Xl2XawSc#@eR|KRK!j8BXa!Sew60xSRq^dN}1fx6c-+AtE315Cnp+?|5ZhY>+y z%FpKjpzRdpm=IM~j5PoE`GBH}T#QqyScm`AMj!=jb3V0>NkV*oy1m!zVFG_`7?HA+&+U5$*PlRJ7y=GYcdNod#Xe57>^Q%l?Y3)hvpu4OFU0p=_$JhXf z0o0U)Mn#+-s7n@x<^y+rd&fjGTI~~jl6ZbfAYR}IB8h{KA^GUlQ=o=0&M-1K44?}D zLg5gADYNuhlk?J_7*n=s+z>y_KZix26=(*F#b_892tmJ344u5~$b|x|UYk@Pp-9ee zPV&m-$ydTy%=Tf@yi@b#LPhY#6}yG&2mQ0*=#AqwxsBMG1nL%log6c^X2pJwHZwWD ztmsP5(`Zk*KzIH0wfAi+cEEWF(`h=*Wr@Yp;3mJlO!7lA7u3m5+*`4Yma4aN$9sn6 z3y(#7&g7oi_FRc9-C5pVum}0JKTZBO-o$eEJ!B#O=IOKG1~;F}S4gt{RiEH1&5@^n zB5w4+>4@rzaFO8d;F@kZAw2L;$kQ}FM|+fE$u4hMVPsgsXM}m1^Tf9 z)HIyxJnKvhu@rmm{qQc5{;xzDrV)rx+oDHF`Q*g#*#3DFo1z4EY5Yu;tgW^%LmXy0 z0wsjg3TiuRQfrPRfyoet#CY2dZ3aBTp2!L!#zjIy7zPrBr~yU8Ibl2pOxu~jg6Ie# zazaubz#xU1VrO+>2^`?n7(d3m6b>Hg)`de}GC~w0B>x4d@RUE#YG3Awtd9Q$?}rp> zuPYELRD#LKz`~3f`8-A&gZ@7PV|7H`fy+CeEpIiIxO)HUMSyT!6TT0;q39IQc<98x z=~kI3zooHAA`Q$SIA#hlz*pc3?sX~TCM<16aioc*-FqC)npiZUQ@`)|6!`;@Ia$I@ zFA>zAkvk-?F6bS$T~L)wi(0JP2_Ncx&)q}uZ90-sICN$IXU$!|imfSs z{&Rx8O?B~H5e8hxC2ou}HDo~O;enPr`bb;W$8*Umf6zrS3wVfyW;}sDy$tL1czDQ} zq*Rno4{C9`n(v&4R;h+T^_ZaeVQ)wv1NrN)TEVBOJw?1SS68F~JteG0pcVtH` zxDalaDh`NZjr|T_GzbS&6H^h!GJyz~oL)^cyyl8Y7;IL)@bfkJU``W>=KxV%sBJ+$dmZSzzQNWIzF zI|dn73Bo!Gq{T@gYN9u;=ALfInnqknJ3s!2@h*VpZOmv~>f`=CBQP6TQ0bydik4g+3m+5jv))N0C8s_nho`JuEVq>kC$u_hxy69K}bMZ7c>=NWvAZ zKg2LU`jeojzv^Pu?8(06NE6!?)AIMga82E+l^0`P#n)kJsDDXRo%-Q{aY6|*3Ob_Y&N3vgg8 zRVL>>=xqK%m;ut0c+(is4@KCLKVsFE-(n(A?naQ4Pva zh8y881>$MjJ89;B3!D?>+?;EM_?1ITG{a+*gqR%9tZdTt2w(=Aqrsc|SH!my9eb9? zEq6ytJR)`@WmC{NU1VqkGNq_i)I7`_jMQbtB9#>zy7=`JQ~#z3(UA&`y=qNyQvBP? zUuOHRB&pHt=5UT|+oql}aXyc3nlQCSX;-D(rv3xJJcsWiry=RI*_OOYl);F(Ik<&T z86VHDudk@&hoa2UC1|9RnK`N~)5I=~j1XzqLjOfNt>UY^rZwF{>+9gP-_hCZIjw4; zx*$GH4I)?xJPAOi^dv<_Q110&E}V=W094lng8&fm#qa66K`dY}f-t~@g!(RTR4RVs zCx45Xog7a#jmCH-35yU(;L3sG-wFO9;lw|OHf3RCY(t36p01Ml3|Ov|?-JwJz~lGg zIbC8@1}z!S>)DC*VjLedN_LYKnA$~ck+cRMv@45)Y6=jdKsXG;A8{y^^I2cxTwYs6-qmX_N+$ozAI6l?%Xp)L*SI-q6Xk0@^jY)AUXdXVBUfI( ze&hG-A{x&Spj=u!Ym+MLt6zG?j$+c*PLxc!xAU+|HSp#mAB4s z|M-YZMSDHCIq&a5Rq&fsIXJ$x^cWe*fquj5uw>qPHa zF*B*M#lD4X{q}P3$@@3o{o-Sb*>aenUwl}{d8{MOAr3Z71rdl5G+$N{fSF94&`u(4 zkP#$i11-bMH>6R}jTDiO_4?KNdzvEDK4(GgNCst9Y;t35MMc-X<#$Zu7t06oI}GhM zHC$f)aswWOf9Hq78)qlnNg1eIs|z{M@Cbkp3ID2w3q(P_=SIPWgheGn{1L5^6M+)h z3CW%<4Avc7>^3Rh8paW6jXwDaYjX2dV8`R6k8fKVsmx$}^Zy)HHIq)D$An)0o6DFf zGlUiGz-Vz+?sSFmplAa8+ICyY3pr@%@VVO}^-K$ki!9LQ+vI%6se#Fec}zklghavw zOgU5KI>k)45X{3f`mgAmI5hxe{com9-ujp?e4ZwyxzZ;ns!cl!U~&=sVqynPGRGMh z2sUHmgaupb)cBn1|Gq1kR>V)spFaQ@;`j$I6$$tr;P{1FFh+!eTYMtF3=tZ1#dURX zgh_22P8Y&_J0-sKtO-~E$46hR0YI{J8@QsQw!46uJ|2fHTtNrZb}y$scT8};e6@!Jm+NLvKDKPa4@ zIzMY}GpNOY984V^%LINj{+34{S`sd9AP|Nl($qX-B*f#Dvy>pT03LM8^dHIg@7Ug} zA9;HCuLPbxq8AA$jf0EcM+G(Rc#?^8q{i0MCK749`|`r+H8UYr$^5J(Slk(5e_kH!8Pqy&Q=1g~!p$f`c9khLu9()B7T3mQ~DJ7?t)a5rrGY-u~^IVKn2u6+uPK?E+R6^t7Wh7VBRvrbL1-UJm>2DOCAF&sgEQ;s^jM;{V0@SGxwTkgl#f^%^MEA3Y zPaa$;J86I97ffy}EaBg1YqqM^r-9oigSoOXnLBApFrQ8^C*QLb*C;aj|GoJ56v&7B z+N=WeG$wS(lWZtb2Q`?VL;{?jWw&GpYkv51@2NwNe z(KiR+S%ym{$ht3NWuq&w6qjv zH5y!>lKv!^V+45YaB;M%j8}i&m}25$8!6b?n-+HC-7HQ#L@y5@NUi3&@^1cQR~pSz zHM5~tv6w!E`Lb<=5O1br{;8dYO_)Wza7Ar)k#1UhPlBWM=@esLfIdFiHC~V;=!{ltD zps0=?e(cF_3ING(z(g&Y_fwE^t(wo}t6#%1a%_rQd>^j- zT1}@dJX;hUw|*rWv9Sv$rZ4(j9f>x~r9Zp9E?xQ2u#|CZx0h~bURh84Zz4T+px8;) zY`_p>M>!oIP#djj-f<&@iCyUPZ#=4=S_6DNKB(7m-Cy*nq7)hJE5T|yk6e#i-u)WV z9GQENU5}wRsK+}P=&bv}UP2=mKSS1EK09ADB5Em%0_*@YGSeMS7oOB^Twk~N-8#8i zW)l)-wjeUv?P#47V`l=h== z4tWSHtcaS!6ha3AaCEBP2?-s47^902Pnow??@n$hcmGHL<|tI+ld>)jNf@Jp75B_P zED!gKvhPkKL5V375@pGS@N_?p42OACGnT?Km9?Lohdx3%u))q*NV$K<5*STLH9kvI zl!I5JgHHrPm~@+K%M9sg!__{~Zqu|Ms|t4@B>sCKeJC=lA~|`Fic; zG{&Jkmh#vt&#s7fZGK_}do8H3NFHyf42zw^f5PvL31^;%Vd}F$v{WJs*i2(;!66Lt zL;EE7Wv?&xa*_DIoac`h!WQ_Dh9=5Grgac*X4Cf5{%9JwGPJrFu8W4DJIN55J!yen zSCPHYGel=T{sjhtXfPnu0RY+?lRi+jF(Do|OZj}DM}ex6{izTk_HT7@aeTa4oDRJZ z7FOA-N1Gz}_fPFiwpygPRz@P13K@_Cs0Ih?sf5O0pc-m6x^x7{NIsw*IZUs>>hU*L z8XWxBnoZ3hb{PMtz{l>h5lD)WGQ^J zzP!9y_Hi99zTeSm&dyfpW|$mZ>Cxtg3i7)vG{V)tZRxo9hk7RKU6qUy9C~8Ns(RX% zfJ~%>mK}QMS1t0K0nQfso>*8;H?Mm?W1~1VW2?eLMxvvSWfF({@Ah_gB_0p7KV7~2 z*3iBl^hKv4sU#MX48`6qKD(+|y3B28ZS|Gr;ZW>OI+invX z@=Rh8u%6E1AszgX=ETi6|5eECLWX0HG%m8`h4oow`L3F+_GcLWh$%q8L~^g;w>OEJ z-(H*5jCnncoIZI30*!!(f_eUq-WgJ%$wI@RPy%x1G(ms_8JPYJ3?CIk0LYFH7s5iR zL#?Dp(KOpDePc<53SbD}K9M}6xb)+rJf*j~qr-GjEM8Wy8Mwr;(zov)AEC*4TYIVw z*J=LC2o3%Bv+6piRH_loiUA{)%Z|_A>9ijTgdC0DCf*6$og1O9cROw(N1uhJlsbA< z*A1%!D`H~MomO;3x)VGjFn6k^1PU2 zQN=~}8BO-C{+y<4pkyx((=!&TA>Ep1{&xgdENJ%E6RJ)NkV%W3Cb0cU8Lz;sQ3o!0 zgEOeW#i(^t*I{VgaZj2pDu!ODZt2qrG4YC4ejSW(olKyoB~9T66vQFAhU~4v^~WZP z;K0ISIc@S`cUqlDcOt^ZNGLai1Fl4ikmn2Dr0UTW3<*VeE(k&@ zE>v@TLSNrqi0$4Q|8x<$+r7V@(U{O($goBd+4=?)K`wN^lZ+q~3WCGMhv8`4h#CT4 z!`tZ482GOA0R*7S=8v_pQecQny8Z{m;{C3k$F;L>msYu$lUQNO5T*Y`jkyWg8Jw;r z`nEn#r=N)Sb(x;Hn+U%ai%qjLvGaju!fJW(Y83H+(!8s^_R%sG(B@EN#Me2~`UFEE zc1ugky?K#DRK*j2*6l-NTeF!+-{tB_?_&M&kY!6?>59kU4;?8Bb2&dVx4eXv(mqtH z|KD~;T>kCU$>tZyAZdTxlLWn?pvGsz$LaWpy@#x!Wx|}xlEhhq2zz^Ac13zP(yje; zz?kL6x6M|&qP*E`r!RU>t};DX>K5<)n0D?6mi@BrZ$imnWc@m$Y{fUQ)%acTZgzfK z$ko@OD_RZ%ef^WI%l+$yn~RRq>}RKIOeU&|PDrt@1?LTS-*pDHyg9#YM)vMk^)+F{o+qw;*RNP?W5WmMh1- zlQk|;pdZl#Wd(z(d-FAi<#lYF6N1B430O~vY)Er;D#Ltt%^iA0)`)m|7Vyw995(~>cvIonv&k>W zhvV*wdr+P^@E^AJ@#v_e5Q$(#vsp&XFMb?9ftATZ3YXz*ugKsOZ4sBU-Md?!cQfsUQ)i$7=%Vu)g7XhIXk}7rT^K1) z7vqb@4^holhYFR(^Ltx}&9Xi@`l1R~`SP|Ll6cJMNs}lN-}Xy;c{~LYkrB`ah$nTb z@{!OV)UXSJITU7S_;6y&wOWWSVfpGo@B!a=NdSVB2BRc7qWe57td5I}dSu!Am7Bd1 z_wC)xC8>~lGWSd7>r?v2o|OINf>LBb7ai}$WQYI%_fO^+)HD37ySM%MXUfS3YB3NW z@fWk=K~G*GD_g#&2@54tPb+%H%5M&@b?MTxy_!cf}**Sz4xBu9sw^c@Ufb z7dyrDpxbeVVDXEiEE<&DanBdKMcI+jdAv>=>F8;b*Wavew|r((lwK z;M4zBEl6mxq&u6eJ4F54FcmPZy3};B^YZw|_Sfn3e73n)11};cO}PkPlB99H)~DwF zaqsYbZ#5(_C%Cvz8C=Xe<9x3U;r?_V0qnP2c$8kQzRZQU5@LSIVQ z4bG7LBnO37^F55Pq6!P6fe=ARz+o+aS|rUR&;;~{E2$#9mXE8lS*h(~0AMPB6%Yoa zhW!5ZNQn`A*SdeOH~13_g9AvJDWy@6U~M81!mc!BCZ+Hs zrD%Ru8dB8YmZ3@PH)3o1lm{F^AFZgszyHd0M^xiWs$*!;m>PqM;6oc$tWLb^{>9&w z%PG~%J%KWR?@^Z#QC?4;03SuQc#4?WQWueWSeG?2&AMgK$LF)%p_It>O{4jDYB||W zuOrSW<)xNGRmtmLq$iVdsFuGnUQf^WGL3j|`fiol-`woz(XagWKafJbZ~t{-e}CNr z^HZx`=2|L$fxiGXEcZM9-Zy`us7THBfjO8TQ8TLT|R~B z1%KytuHLAq;<8V!m{DBU8>pYG8;I;2YxNona2X^;{rQ5q>hnwR(c^Wiz} z1Ena*{7LQK7{T3xiofNJTs(tC`)5u$q9e z3ku1l1b9tN_4{++TShg9nAA-4kp9=F1!doaRG>xJWcOWxkubWHSxR=)w810qj`J zB{ca2i1ai4-MJWgQs7U|BVg{FWgNi;g)HL*r9@m{i9-6z7%Y94f{k{23SyPLwIHKL zVU=K+Rl%$W#VMpn{Ut6#!*ZJ=)Gv6GFC7MbbQ>m3seqn{$+O zp}Y^F3hXE|HB9Jp!-tZCos04=&2XzMO~K6O+a-H_N@Da(gL z%4wnBdJLwz;Cf^;s3;Y7W2NWLZTISBLrXnX0yWFYZL4r|6(7>XQbq^J&h(=E38z!g z#W3SLUZi2;X9MeKgc<3JXMA~M@>d2yS87*Q$wrtusD88nZw^eX%h3WV29i&i?*UMg z0ziNXU4*xcot*?AGo@(_Hl-hhft+XUhO+R2VenuO2nry!PKci)q_RRnV4xgh!4dq3 zWqz>_p*8SceS@1yN#37U&jsW97r1g`i5YDS`YCM;MkbMtT0Kl>YILi<2o}nYcNaqU zFcng`JyZzQBV~uN6r?W!n{h`)Je$p}qy9$urHBQn_j7P%&24g71d6JQvV#g~B%>aU zzi|-uW6}$oIBeX1{~-K5-Pz&jzClEKzv2hZrRvttYt{b7ciB4bQb$)hzTZDFwmAKr z^ceUlnUY{#ptA4)Mx-<2b~U-}VH4+iXW{B&xa;S&%(2osH^eaYX4`4zttbK2=Z@yS zH{D;S{M+5gHp2p|hkeyeG9-M{kBO_uT-wWkNS*Oz}>51eKy zTx4FkTRExXe*5F50^+RAH@r{!x?M|5@@l(3&7K|+bGyqW;&$2-+Ju#v)tK#J4c`oQ z<|)*yN9A5>kB=ByBF)7plOBeTuq~=EOP+}s!PEQ}=gA+Na^wt<3^1PqFA0F;1xYQWx5U7BH}g_AkAowrwu(;jM;?Xm;xm(eI)A? z6op}UT0d;{AK9r%Bo>{;?b-H?MJH>1tbbU z=t&D@_gNLF5r>NrwXg~+#>M6BcCx;o#C9?I1mlZ-Uwz<{iQqJLV1F!QJ^&8_i0M|rGmp>!Cq?Waa0D37ZeXLj#t-g(bdPG$0PX+ zgS#>8NgPV)U|*A*3M77sl9QDhPC-Not0bCQLt4%qhE1nw`po<>1X;-Ah+WP3s8+y} z@DBIBE2bfRFv{X(In~k#lL?nSqxCcIe-e^Ljl8^Sk9{O?Ri(&hs)NZd>xZSm@jq=Q zNu%iM^rwVpw#ve;$s#mpS)uD;6AcJmfjrJ8*0o@GwgK&bNd_Q+emH3?;@W#+0&32Z zxu)VTBViT_F6v@Eq~+k9=s_1LMb9AUR4Tga2VQArofPyeeKjJjJ(o;(V$imM5aF5C ziwhEq5Q=C50zeXy=$~1?Eg~#gEnP)kQ*KqT z5fv_69=|<{1_OJwNfE;^JE!UYq%eQ4_&43?udR1eO@}G3P^p#8a^zgM0ARL+n8*fW00oqdzP*mxR<>5#1A zx$Vopo8=F>MGUE+|C-+O)Q|t&cI!~tzjD)zmP^=^4hhDUKdMYCi4{nU_py_-ZyEg| z+T>_#m){v?))HdJ^!_Q&_vKJe8T*!6urQcMpR!(uk3dns42n)KGPkh{kpLtC=)m9- zMoKO&SEXp(|G0ifkv`z%7_oa0{AiSGJa1F^1mh`GP@L4yigU*}@F*$qY^ih-+aZ^Uo-kY+>K;hA*pTBrU0xE#_pxhZS>kn@nFrI?dSGkbH6w~#kqHq<3 z|F5PO;k;cr#@SfC^S8ItoEulAgeGIZPeU+<0M~MUE)V!z+ypIlUYVX7o6a2d^QTo- zJv1ctm0LDV$8vGkT^trd^+H%xh3tKz@HEI8k?%^LKg6dPk5+)=;=hX_J~1pPu^K#{ ze)lZkOX=~Ce^2yE1(9q+ifB=QA?PJY4Wx44Ag#isD-`pjDRW&+(?FRL2Q^*~X!z95 zDXV}0KF`y*h^+WZYtQGOPCdCG@j6{MHqk&6tB9hMCY0{S{$?xyaHwy@5h#>EwznCa z1O#7pOKWDs+aLw+vgL)cu6i zAV!GO)p-8L1C9Ev8;MwRR$inPX-EVXCS8%N252Oz(Sg<{OJoxS3-k)W!CkC1nG0MH zD4bD6kkeY-LxKWQ&Z;mV5EkE0+BJzRsZGwTI(BDCKx%N|h(#fY@uf(Z6+25Z_Lp0{ zx)6NPh$esh3AdIwE-|b{n6rw@mmx6z_DK9?3_iTiIjPIr zxm8{wt$LoNp)vW^N-(Z(xPJMihrx`m-&UiyT|!A2`H73m!ud`QexUU$<%iKtRpnY; ztR}oas{C8sY&!ymy|mknGKD+6_sT15t=?8;-h0F=Tx1jEPwa2De!FZt8F0!OC63F< zt&pavz7_emH}^(PmfJ{s_fVJ9otTTn=luBc)y6j$SiFLSkYt&SSH<(HsS28=VV&DC z9lu5PSNwD9TX{93H%D#(KN=&4TjO?rd;3dFrSO!<9s9{&u%EXi&+Wb0%+z=Fn;pIi z^j0s^=JfgNYW2qf*>59h|7xASiof|r$txfG%o1U%Eh72fOlUe&q~~ItFO{)=X*BPD z!leYoQHUN`8s_P75g5wp8p4`r9!`tS>Y~nj%KkN(YrY2*ZzQOxi_j!Yk`fU4XQM~R zO;l!Ku^AQP!SFoL95#fN=l(hpdJo&K1(YRc##L>9y{Ma~hN)Mcxh z;)ZJL6J~a7U1l=dA?QwJ{sI;NEg1wt8g?4_ck>%3L!#$Nac49(Rk!B}TQsKozE?vD z&}g)~pZTe3peOtYQBR znou#Cg&=n~zRx0S&)Bm(qNcw8%Okw{6kabJtGUc{QPp&LQ(aQVe|o956isS0ZYi1e z%lgzn2F{NMI_h}MhoT}sIv)8wG5g&(@x>Cw6obm4&AO1_;Z^%5QMcPy9{c2pW=q8_xdHrlxsfqVT=l0#Ko~X)ZXK>yV z63=?e79`2$?EU>e%AbC|d~xG_v3QW+9)f?q1gqdMmSvW_=4!?jiN)92julhKyV zZo!iV#<_som|CA35skqP+s3o4jS@-uySLSKqa5VvP360{4bB;F{!lU0z8PGf{#!8; zym<;B`seuN=ua|Iw$|R;HRx(5@ai~z;Cwyk*LvsWi=e}QcegYQ8FJ78kT#D%dNv$zJv&hhF>P)im)aws&Lbq0l^du;M~$?DMu>zE z05TO2nT04c05Y{#lns{&!o*^`zKPR6q+*5MKlLFBJufE}u;zr~BSPE(_`h=+q+(otji<|^5kX>Qk_26wG%U|t0 z337v5gyt)Y#w0q!`5jDM5eAzOM@PiMj$V5De{#gldAJ7)0Hz4j6hVfTu<)YzG9YL) z!5(pp!^9I7Ee9^hP&{i)x=3v*I$2#RDL%^v+QMvrd@YB!sY)N!g zB+umfY?iWNo83ml7{IJNuOd4s{M3IM`h^hufSMOkbG|q7+YDbR7y#%OZtn+?kwt)r zP!>_oL_QSQMlZPVvv!D{k3|m-0ggsw4Emw5649T|XA43J@tbU-`hQgKQH8OXDFS%! ztFd~?P-Qbd9?kh4Pmsvo;FUG8hF<6d3y{S;ge#<35MU!J42_VW1CR4M>!AfMY}`a( zV$^V~2+W=rX_D)?;K{H@Z?YNm(|L>et~5a_`XzDQevvvt7ssP)^rCv$Z*W>t(#GoG zO7MNcuHXPJ$;X?wU{~~t?clNRP08>tyQ)oCBXSLG=9kJVWmMw4#5zs()25Ju@#$i+ zsbAq7ea2hswf*kedi-o5<|+^GABR1O&mXTXQHA9E+M?j@zN1 zPJ74Jf&5|3$p)_YWU{Kmy>hWz%~$j%uK1ODxh=)XOmFU_%;o5M`fjpG20i+2gGSYv zEzb^-Kj;$e`BzXeA%Gao!yqg9UA)|ApliNO|PIW<7|${P)Zf*%4LAe!Lp zUvYG#5qPgAY<~ph?|UxYZ8=*Q*9}EVM|7*;N`hUI)75d$FyFJ6vXa5$Yu0pRB-~#( zDr))E_{fHE1xTXd7s){fy{C;5BvOQr$J!_#TZ{&1m{YP~sFJuX%~NW$HWbL(%`Wx}`Ip(J1h|QzSUHeE51q|J;*qd7 z!!o!9L}8thQfu-f0{eNtcD4@*Dr!%<1&gN)WYl+|W^B766RZ0Jl(I~|t!_(cqIbE> zC*y&IlP~F}-soHOZ!u!y!RLha{V<*NOX<#uo9M{bOx5pU z?nS%f9UrdzJm)UrN^3pF_nx}hpq41rdo;&w#$~?4=iYh(Q%m{;Ly&(3nVB{map2M{ zzUW#Trfm)?@=u4L=SpR>^me21=E|(z$z~nay!%hNE|6kV&5&ecHY4;1lqjl8`_Z!} zNIZ^0L_atx1tTJnJyDqF{;2Dtv9)S+W}kMXlNy)D2dI9wmb&DIpEKJhRCAt`#s@ z*ez{10W2FEDT7Nj>rp8{{yr4%ShoX##Zdt?0c6sd3tn~jj#3zSVeRU&HMv#3AMkX58K*o&PH!S+fEwk#nlIFQG zaOQfvjO}tovG=ycHkD?)t%e?LTYe;WF*HiPG&U!CN3WZ%t=1!L(|?-R(JFKc;Nyev z%vfjzx|mC_c=SkcFnI(vN+beC3{nJ}3GiBULGkgxZ~~I(6cm8c8pQrJRp6kqcC7zl zI_r4d1KL9i7frakvCKUrKgf(A8}B<>2meE=$dDZuhKP^mGz zft1zZ3)*4@?>;Y8|HEdTY`I_P`-o>he!yWCGG078e2bLBivzxAH4*liR5Yr{Z&d;B z>D5lm45{l2m^&xHD{ZC@OIWM&!|6=HsD`O5d*&6?D#g3fRhDhgSGvZ4C6v%8iP!aza|)`FqFYT_8; z35AD3H0d6)DuimqBG|9k7>wo;gRWKo$Oj&sUn;c5K6sltbQ@uGq(;Zp^TkSq)5pwE z;lMg%MPrsME~euN9u$;NQ4*~PBvA8v9jxpFO93#Jd=`e0l|z~tNWh;35;pYrw4fZ? zNHveAYBg!iS)dg2AT63ugPC9GINNh&T_EL?~EhvKE?w&=w+5U94bLsDY!v z-`hHn83Y0$+U=qIA&|v+dAY=VcfK@d8fp$J#3MlwqVil;!GuvJ-lu{T&KQ=0ZVv&> z$OK++G#()}M3fk?8oX6Kp+S8PA!b6k#4h(Rcb$tvdPQ({`bGE2+cJ2VB8A$1C3eF% zhEIk$;0mySlkLt8`P+j_zq`LW{xTR995M;(_yqK94~^q1lTCs?FDdw{&)~yl)`fm= zmYW_@sB-CI8IKBpBwZgHe`n6xDkjc@_2lm8iHl%n(%#a}zOfdep8QUmezjJ~Fa z;j{hhCBa{rP9rx*yctahpNls_m_F*EBQlud1305K8eg(LY2f{26!zosWrqI;)6OND z3vvEdZ4>d%AQtnehm8Y8T_`RtbLcO;wpjoW1qS&tDW=Ln&N5kuzkcX<1Sw`Zn=qh3 zQ2=#_c0a{|PrWM)6br+nhP#V53vS-G((7aTNg)_g`C`Elo6v3o6h>skCV~JAKs4IK zh!8QVgWp4cb>YbdHIcJNNIWRF{ZBntlc-w&3(L}+@3nqXrr7sR0!+IxlfU4;q~;2HXBa_Ln@Vw3iLj%c_JQVR?tg+I`>Fd->g4Vyy7rA zDJad0kEz?59zrEmJycVt#-KdvdB6AGM^OK#z>)HL3+1}hENaqBFJrQx7`A$wcbeB$ zm^gNOB>OK+RsG(rJviLnuiB}@vOOq_11`! zl)F4F0T^u4CiCyr6o9mOCr8ZZ;C+k-y1|*N5xV~cjG$&nOP$mS8 zNqAU7=TXj5m{JU!Vkj)p%Svg0O~pN+P#;0`DWTqJ?=9wEudn!?4wcK_yj>|OzQAaI zefFQ!F*lqiI=z-X$vj@$8;Ye@%;7)`a@IHS5{!_SO7@~~AN9gngH!pQeWi>5k9b!} zrh&3mh=b|cZ1ca&%n-x|eBH>@wlJTHNBj1-O`YrV7#=ExsE_~^!h&6*f>B8b!2O9C zi+u>D1Y+}B;0jMCSb;V3!~tfx@1T?zJ7IDwSed|tgr?$JQ%$?yNxBqfJ=)6`+6(NV z&n&KBBwSkOT$ZhM{M)5f(6zQf$lwh4%XY~q)g407&>M=5A*C%@O$Wsx(BY=Zgmwnq zo+qz6nVz?hrAtv}R}^#)^dJNZj2kejUQ&&KG|0#o#KPd&uNTgNx7MRxR7l{yUQA6% zL1R3-X!^JJ3E$~rlJMFgTtJ|T7^_W0!~ z8+Cpu#wG2qGdWaDc*qn%As0lU%IcFdVSv;@G@;&pGAof8%PYy{1oE8)Xg-1(-$6 z=P(*!Ai-cWL81_HN+2SMB3Dg{RIx_DLzq5?JmM3^od?ba+>6%|?-I>rSwljJeBgh` zHoK+fvx{pX2ayGRtR ze=`%cghF=G`HHMvv{8MNWZI$K6zDdS zL9?{7b^M5S*l~2Q$=_}EKz_rs*^xoG^V%WEzbW8m=6B`zO2_TxQAU2Jk9Wqdr=Pd? zza8y^<*9o9xi?HPB8f7xZ<@UR>F8v*4dpt)Th49_<^*k3E84V&x7#1@((a-Vtw$5S zCc}TQ3r|i3J%xmyvDeAUl9A;*zto_r6aZ&qM<5}s^lHDA4C(;La45BnP~ynLV>wP& z&96iH52zeBQb{Iqzt9SKiqKhcp3ro9-_)<%JS4sfr^$D@AP#f>1q)d<=Ejwv8{jhj zCzSaC=x!Dt&&PHMHFzkOaD!fw1#O?7hZ|ieE0TC>UQ=HkRi!TQbf<(W2TP>EST&KY zCob`PFTHGN@}tyuEi^APYvKK+L`J4Wh9&2t1^@w?0I)EC7)A`kk_Q(k;>$s2sdg@I zAtBqFqGsm0U7FLj?bBva_Z%u^MbW3@!8CMA`o$9@1b888Oxr!S2`XgWDX*+_nFTxh z$~p%M$h2txl8Fe4cd7(wW9k3KEZ_!NQorLs#^loYeb|Q zL3R2G-fbsd)^001znF-BpClmc>rseoO%-B9iT7+S0Y) zZj~eh<3)JeJ1LD2A2PM}LdKLg={dC(vqF{Ixvb!>LU3YGbTA8GE6n^eGy9ppL4=B8 zWW;MKfbWx@RSV}aUD*+P}`|0Qhr0{)J?XBXYQ2TZmp|NiPab0Vb!xj$%T=}}i_tLsD^#0ACxwXk-y_bW z$)4V^-e0G9L07g19F?-7*S(3?Z>fTIEIWcW`2BkZZ9Ck1=jcseUR*h!{_B{f4CvT) ztGUlk$R3_#=JUU(>Gb<~(sX^sf3?}!?tk-pdU5XR#X%lZ(8cLTYa3?EKAQD?q_46fXjlM;Tb4qS8Y+Cr*omJT(~4zYfM`?-SvnrQw+(>gg>{aJG==1D;W z^#Eeh{!0)1xDIDWI+PXiWtK}#lAQ1LQm%m>$t2^DI+YC1()%8_g>;QZC-wa0^jCVk zUMUq}yikQH^2D}}gc)zkIl5WU00Rs}y9fXQz)%X&yCwbiWf+LO|H|AvFB0*sUYR{* z#v^mI%3!pzn-vLW^DqFfSrI$Jiv{u~{lxxpSYT6<5!lUW2rZZrbkA-EbI<}}BX)m5 z<_aiY^6^P|U~~<7c)_-l-C>kxC|a9La$7+~j?AY=PUWX2w;;GZ2gcvchUR`HA8He1 z+Po&MY%x}=5AGLR@RCvjh;61_(bH*%wc(TBn#z}k_49NDb|EClOnw~BupN9vsBC*! zXhQ*$f>~GkhW)g;+Uf=|Z&VNe=sn{N6B+J-d_HPmnIxNXO=9fY$V}ySXJ8oR=fBzb zUcQ!N5tArqWP3jLxier~>->!IK+Gg|Vm4y>oTDJyZ4d7=NRw-0|gP z^-BBILdHcE|M|66(9O*B*_p48x7FD09L3eT@?vuNu%YO`o8!~P{mQwkw!!lJTerK* zSK}QW0bj-1uFv~>8%KB9SNvM?h7z@9&RUrVf4gme=D)ue7lq27xZ5ly+($5^-RqY; zmsbv*@8TDC#a3R53~;%(%C@8v;cy?so3_I|v-~{zPQI{Y7({CSK8Yba7C5dCDsz_R&<$uVB-*oeh!h~qhJeBNp-P*Et1%HkdPw>P^d7|m z02WXf*FZ)x|30Ln14a;F5PeVpVpTw~Af}^;Xcdo~%ePQ$BU)47L4)~v*n0X0@HdDM z$|@Z1k38Zi=EZgB%hfXN&NF(Y2M`vV6e0q`01$FZa<|I}Wqk*Fl2j4_1Cr3+cR{`= zD)E@(r`3f2ie?L8B`d8h`GWg`&@J0{XO=}XkTtN!9`*4DIr^S&W%Hq`)gaakSy#orIDI02pI%FAb9>E z5)vGSstGnn0mn1o?7`+chW>bPPIpTu0{%WPZO2hoa)}49UL=OMXcf8B;&AB*?o9>I zL18E?Ai#YPZAJ+ZL1G|{L--sFW_fdAELvG&FmYC!V9v)XEG~LCar;A3647k>dOsbd zG`Zv>`*Oe};gQj1GHoAzkex-3!a6>=iF?cXNZB=O=83_q-qYgcm^-Fha69$UXIh9g zasDCfJd2qjJ^HhHnpT}3yeV?m<2u3OvUk8%u)FhcjPoo^Qj*+C%ELvFGecF#=Sm{J z=l0Kjn&roG*S6K}CB9v=s8SbKTe%k7Z0jwj^T6NVa|xK=UfeSBuf4Q7Jn@oY^7mPL z=i~m{HK&?CuyyRlzT;|VZLLxx_U35!LSRP5|H7t)-87(|VIiS>FmkuIO%Seg-0&*l zjY)N4=Q${KS1#IlY}sZ^Bf;`+=k(TNsl!*AxoLm<^5R7Xf2aTD=ed*ZOKPI`Ysby; zbj9fdF=xlIMiQ5qtbX)ffH|ZqbOPU&)gTVR4*PWN-_Y}CrT4CFMKCJ7b z4@*>@!2oJi2p6!s{X+O|`L1tMe!=JbVMK5rbvD>?7#$lCO1|#hsV^OcBEc6AP-JYT6rqKcB~?6{mQXqv zr`rNXKUNW@@fXl~$T3L#XgxV|x`&e5f*R?;8ZRb5jLI`pZSwqA9Q5%EwRO#uzPW_1 zu9`LZBPj=f1q=DHoeUJcHl|cEJ&Z7je@9D6wVs|q=$CijRP1BqG$-H;FP5)Sx(1#XHLWEM^ zO8-@yMTTIZk^oxt@O|i?MFQXiA?QeQI2@#477hvlVv+#hVDk_b?NHkUVkhkCG}Ybv zgTuu{8L>@aU)smoHgq8P2cD8JTK_8%Z2m*r#^&Svc z3UD<*f8+#RlwY6WotQ=bb+jWi@NvCq9Pe%rVB>e zhH}Cv;gkjhU86DKBM#ad_0o0>$lEOv6M0wTAJm&a{rH=yGY(sa6v!<=!e$9!l4@Jg zBs5V0c$uSIj_KiVY*+lW8Kq&*;?k~+^T(yCPG7GWkCi9)^jClWwKQg-{vo_q@ni;X zkZmrkq&j)cxXJ$p(>q>${WqDP`Qm4`Y5VkJ6Zwtf=GS94b$m~l?epur89C#v53J?S zetr2w{%vsGQ`*VNnToob64 zeT%*?8*G;kvMR8QC4XnsX{AoJGSJaYdrMj*u$QG2N^oF$opR^(QNDCid=whi`?5j} zp%q4lRiq=~fIXFfz#^IhweVa}(GhqA5GhSs0iXdEsDJ{~F+d5#H3fp>dU#c)!{a#L zIB>2`5KNn6zh~j`dAreuM?Eep%xsE#MAWKC(fkFdn^Z@JEgC}aF6k8a~ut2OYVesA7BPL$eE;bljghAgcJYdO$_H78afH1QU z&Od54uT=BwxD;@xB4hR;vSJbDDquoYZTqF=imA!tInzLPBYPC%JAE6{XKK0!>x;Nw zAnqI9{?d~j@&ZAOFui&R+S1i9eh`uT+d9}mV(B|FwxEAls+CP7{XS%Tw(c=7RGshh zk}u9OjEf90R4T};W|JyilKc!01(mpxRdyPkMgnrN%Hm@6wUnup5K?^n*!u`X_~Gbp zDEsrHO_M{BZ5JSZ?9<5`LS*1v1J@)Kgi7|LPu@#0UYUI0?JwB=`1^8WDfi7{Z*x;QpDZxmnrU0b+Ht+WoGmfs z%I$-A`R|R5W)t81zcOdPw%?95$@>LdFCWPMs>6?;KCE$w4x=vMxk7H)j5bDYT;p!G zET1YN03se?nbINH_~d-25v2V_K0Y z^Gfvjnb&t_58t65hx_6_Px&fJAFjNQ*!}T@uPOTln@DM>CO-~~EpsT;A}4Dm#;8)k z3m&GFisaB0Wk$N`Did-rDX`!sG~uHhwN$FFTrsL+$@iH@g^C?h3T4SXVDU&Z7On8j znJxU!3II~7?-I24D#{}*c8z1r6@hS&0Kx?oc5j0=3*(j|1+e;dlljOeumUhph6bwS zG;k;iIGF?-1;?Tol?;%yna$g1LKvUFLRbV-pQc_9l{k4|S3EdG8fvKEf~J8w%q!e) zIp?i~=lbyO3bRm6RaiVJaInQk)TI6EXp`!*fhSjvWm?4;L>N2Px(g)v_+1jKYC820 zPH!>%gJ5(ij#c9+PN`CzT@ry*nWOvk+NGn-|LF8I!<2Z!-FH^y3!YU@ZK&*Xp)@XL zcuv-7iDk?{Kkczp$IWrQ{LOy3c*?@#(Dqbp+#qU}OX{OV6e4y?kZqVfjSh=!VpU6$ zNXenO{99_;sf>%HszI{XQtl*lrQZw0Q1glpV|T40@L73~U=WPh8bXBM1qBr-DTJV) z0w2anz=_hvkW@o_wC)BSIl@4Mv_2}dUNX9$G#T2Vw$;&Aqo}B$phQ9f9JfUQz#!FW z1XuEefH^_8fLMf32nsj>pdLX?)`$X0LgV|M{Gb+l`!6@$V8jQ7fiR?qD5kp9Uk3C~ zJAYo^w~~&km>BqZ<>h~nZceOS)LSVWQq|&EA;IV0;6``7@fwmbB&zi7D|670y!Y@p zv(I6kG3u0Jo?%PlQt=pZ|Fz)p) zlE91&Vgg{z+$MSFM{jSZY)`jkSHxCYt(pB#yK>^aq{TP(!*}I4&scMKUQztcUQU=E zayFIszwu@A8}QvUN~~G_;npVb!CKJFb_MsYEyv)~$M@zx3tOd`mqy3*n)t8s@A%Kx zR_>%tGmrPPe3WJw@+iMQu0HYL_HZ;#unh9fbssC7hNY z4_-k#rsw4*#y1yp9(9jLINm~D*a>BUGx;72iVi+wabCII58B~uX@5qDj+JXLrQO&F zyqNX6^}8DlS{jtU-g3T4k&hn#oBBMjW9)Wdm$Sycy^E8b*Vac_y-F{7n;{80gm8?a z;-;*6|B^f(I|59%S?{J)F7eEaGLSVaCKbJZvk>t~$~Cibe`}c85nk>pd_bj1r+}RR zR$;gt>dOhqLqatnFswa8Gpii{5SD`n+M!qy%tAr;%u$Mp;c(vp_YiYpJVXTrJvXry zhyJupHYJ3ZEPz!Z{!&)x!7(rnsH385H(8_=7TP^3qLIQ;G+x8T0tja38UYo?uj6w= zNdfo|gOrxLvBu2`^pZ2N%y$tA-8~j6DnbLLm|#a6u1Ptci&UKsue-O2SAU)zOsJ8& z)AFkM!lwv4`4D^P3f2s2mefse&uA4GZ1w&x(kSVk>xNAHT>BBAvHP~3WqW>$%t#6T z3{xix$2ws8>mVucWY#Vmk__00%!{peG0>5IEiWgqIE?y&lhuCBisgkizHvnIKU2i% zyIoKa-m5wglpddVMx_BrAYvHabMRZ_G0U^)B*bTCqCqP`aJV8h0ul^Fkg~CGVQQeH z=3KNr7L&q(U7+R|A<9Zx-OveUeRAnk!#)RieYQCO+a&;ohS-?{NP&b(U<67D1MtiA zw^SrE=n{up5)_0L!~xA+Xrboy;$7fSb4v2pf?$_7yk{z-4#8j&rM@Rhxo{@}?DSVx z7qX1#9xjG^GC`uw{rmLxpHG|Xg1z3_n_?S^%{1j)!nvUr^c2#s_6Uo&%6eBWan;MU zVovGZ(*wWF@-=nm!$vz&Dpq|Z9jhu2Ot#KchQCr8IZ_pz$|YYnpZw{W-6K?OcKQ$| z=~H_+nRSqRe%?3q<3qcVM3uki?+lv2qb~=}*T2ZBnHTbd*1YRaJOs*xvyA0s_ZHU! z1H3+)H2ExiOw{@2resM8pEXc1^=kV!ST!a-Vz^sJ{?>G9ROxw@Ws9LF-G1G!zh7~V z@%#6)D_3vl+}Q?yH@8o3YxjL(xEeUp5Ab-~+9p$_kU7{cXY%-9IW%M1mtot|!a=M zNLSH%bX!Ky&%}V;&FbpTQ?DSoe5Ncy1%(G9B2GO$+Z@9?`^i!vzY0%2HaU2tRCn9FxB$i;ezi?A`zofo&t~Ki(U6?>QFJUpn>^@A9U>A80k2dB#^=}@K6YmdUPBZha}>jO2WFNp=gIO*7!pevT;VG zC9f-DGFEQ(?)|)%RR=FuWG1HF%hj3cprjhONXPg>9xEUkTg#`ZNn3MQ0f^~V*9H`OOh6q%8iQY^+)&c`SvP1_Xx#QJ|SglDwjSv_y z1Wj0w69s#_DW-&G)p{7(ZKh|&!a`d^do(Hl;oW&SjtYra4(YN9?$-5PIVe0Pe&KI7=kz6N>h^yGZ2u1zuuj&%Pu1dUTBYe8-KX#YpE zd*N|U##N0~_374l!leE)XPRYT^qtb8rxBjJJVR^wSNH$Uwgt1}`g?fHRd*%w)9=D-mj-c9$ZRbST^OwT?oFEbAAP1L`7|32r6DtbaF#;%QFuDsk@ zwqEB$=f9M}fc#m3<;RJ;qoWsp+V|TI-7MpOEPuQk3tFSNJq^0=N6;#}AbO5;}rChU`JUETtPwW6@mZC22Z z_}#7iskHXSG*yU^-8Vv6$)FEB_{ymhN%2Z_)yeorF-b@jBumm^p`MXKL7^B`ShiGC1@jxe&aPW#lXenT_-U4{GO$A#u#Nk3YvE-b=qf(ncRaEL(E z0bo%;h%S|ACOJ`LCZeK%qFn%=p41LSttp@h)uaVb(m6O%#A&|QS8g-M|kk1RvC zgio;m;9tg1Knafuj-GCSX2oifY4nn7KN+j|VT2FJ9B2jxcB{&-9)qg^4Ise%;Qc>0 zLjKj@h}TPZ-<>sSpU-L0rd6>L5ych#PGRo2-t)`g4}4OzTXJero^x7E)A{ejOa5kQ zyhU#35~>V?8U`n2KIS$fQhNEES54@0I_Q-D`gk)RuSdU-Ky3yACQyT?cl{Pxzm*R9 zDUC^#zX?y!vYe@dRD`?YXyTvQzf`aJMwJw*QRhe`W3`S;ibrOA#o*d`>C*QEt={dt zNC8pKwAx^jztS;nmZrmSr9udeP{cPz6r~Cp11br|BGtlQEzwE^Tlrcb1#_Hiz6k5B zGXHs2AP^UR3~cBEq;k0=L71if(;N3vKR1LAlh%@}lhWEiVpD1i;s5}35d;!M1}RYZ zxyX6DV|&jFQ3^w?Zl*CpQQ@$N{_%DiqWWZ%0duBhZ-sM76-yC?qqYq<2+jwB6QHAM z3pAs--y0I6b>0J<;$z3h_O!6EC#%~2SEM%1PVlqCiHh1IGid-stV?boyVRT5Ixm|t zfy2eb+a9!u9#su{)sa zJ1pmCe~-`>^u%FpkhxYXaF_4kKf8Mc$~RJp?p6U#*xaDypW_7<*%=*%j4Gr3$ts4_ zW`-*Be*G=W&*r3W=hEB`>iEuT;a5l7gUjVlq}~qX=4!tVv!jzz!)taReH$_M=oOPi zoU4(qJe~WA1qRvCGHK5@vt2Cxeq%Yya5k;)zlFhE2OOkyFJW-LDZnr@%f9wtFeh?& z+LN((U#cY$I$-qP+HkJA@pdrC=lZ&w!Xull>W`+8s@on!d1A-Kg8?ape8UO;HtO0p z^YzxrQW`3-7Bvjuz@+U*2M$sX1!jGAfBBfj@x>^LjeEoYZae>)O~;uDqh|HTt<(wq z3#h;&#S~*xWupQ^C&1Z~)e2!txnQ$zDX=NGl>h@_S}->w;j_Pg+I~)%Pjam3+lpvR z+f7xX7)GlkFw&}QZbHW2z+S5HY-ofTLa7312aY7-q6K8(1rvjMgSl;z1ZY1Bgce}Y zcu)jGO%ypiglJeHJOUJon&>f`B@2)8D1?$jRfOIu&9%=)rtoftU{uc4|cOc zoJyRhx`dk{D+bvUU$}A!byzlLsoQ00MKgw$x_$<(m3CdHji3Kajy(K>BFz8cCh6UD zBBJKr=FMTiK^)(Yoh^&#Y1$2OqzCj#u@?DE(=A=`6b@=KFu19}7xvz0v zpIgFDS4(v_GrukE=3fhsx{xIL>e3+{`^u-F+PTpvn53^$Xf_fL!+t@%mXXu5xj0(R zlH!=h_^aC;FK=c%OF;iDKDdB7dvzRseu-^wurwO@Q7DfhR!gsDO7Rqv;ZCwB#XeRW z_2&(>?@`uBSpw979W?H;eeQNQuJHc!Y~=!b<0r@e#MfK7EZq^;D#v`UcU^}>UIDku zIE^C2lkL$EAseIt7zU=-W6|pLWd%S%-5_4?%_rqwrIdZhL;@SyxZ?R$f-q{OF;klR$gLbRY zbUc073Lb<6z?eAVll{O17hHTf}mtWMzBZ+ z$VUyiP+ynCkdjOUzz7f!v1e)~dAp>E{3;yo2x0m}f+G||Vb4iQpb{a~OAy#_gSr?P zBZAJSX(feLGd!A@yB{hwyZ|J-gdWh~iFBg!hls_E6_!guW+mdU*fX%~@OSDwmG?kcZTkQ1JmwU`N$M$=a!|lvpYfV>V7-mauhNU)X{i^eGNXt@h3=pM% z;!U^Vo2Ec38@{~bxIC4)t#EC__xd-?V9>ACyzq_TCoLCe=Vm>Hq-INRe$UA0t=VYl zd+X9>dlYNdKfUB}c)e0~yX5P^kG-Gun~qHG%|_6>+vl^(5&xa68IVIm%yI{UBuCSG zVky-E7(Kux)5RfVIHygc*7e-G7z4gkd3?MBzpBk;38?#2=*?++iy&)~4)WgV?ekxQ zuY^OJRq8E1Ctv;ga7&bGLaC`X9|e7$F{t)5tZ_)a{(j>iCzDaW!WW^&-+ke#qM^er zFZ?>}el^r*G|)^CU;SeT-^`UqaleF3!ey<2PuKFndImUDr(Smc#R*70vO1aK{8#ke z=E+Hx(;D8qjN}TyqH2jKkzrXd9Mq022L$H3|4`4zsAMzva9Eo&8no-7%#{}h@2$LD z5E@5vot)YIyZ&!McW>l;^_=u?L^r*}Ic8&gJNAfC_uu(>vG=(QBp<;!JBHOOOL+kny~y-% zRe3u5D10l4m|z9A2YI?b*`$Id>o5Xtmr6v)K~K@9WKR>Lj$9a3%(LfeVTlOwq|8({ z*}p&7?TLihmoojT8|8_dasEFd2qTa@PmfERb)zrpYMAU~nDO10e7S^5Ep-1HJ0FM5 zUI@D;_3W1$JdZ<`88>TkbmG1~l>smzfS_mqxl{r`MZ-)zZ>lKzO|Zh=chusEt|%-7 z%%=Yy(|*=vZ+m!<0aIkk8J9iM&AG0w8?(J0>2V*y79njb6#VTBVr{Q`Kd zW?Ln64dWK7t@0N(NZhCH6kC>y5j83N2-;Uwk)Ne`8*+NSFj3mq)LTK`*?TbOH+K=5;-rsz+ zXG^Ys*}vOz_quK6fTNL&m}Y-b`o~zzpndP!lx5!LWM*i|oVN3v4x46;Cc1C=X{}J- z@nP#+N$=*s!OjyOjgK=kMKJ2CZ*AUQst8%T;ib_UL1QoPMD=mSzAC27G`vkX5k|&< z>&VPp4j-xd8h6`a-QQX+x6!~dTk z49%Ox(7*>0zReGgYus(FuXOOW!Fmt)_?a0sh;OZabxB8xyJ>Kj&~Ope$?E7O+mq|= zR0A~|P819_(_ND_T9wXkmP%&oTVF0cOU-nNwwTk=^ul!!5ugqwZZ_W9RNBWP6CD6p zoh z9@12BK(hQ5fJk)>GJhUs-ND*vcj0|+`9{IB4&8V;hwXLNE02ZGji8=ZM53fTJrzeg zHflwED+U-8JMp6rJeh$N*K-%|COT6nSx-1%xq-N>D>k(+Xf$0J0T{XoV-2TXx(7h zAQ%s_;)94l=vU@^9jJhXRTEr2J#qg0tXb`Wf!-_{1SBg!GluT?WHt z6r@6b=MW>(fu1G9XlFhXD{JHhcyc=t5zhdC(6R$q zq}9k3Sv^Hkyg>}{kXR!6gaHVXp2k#PFm?;8-$?CyOx@p+U)Xh5?jm=+yg38>uhyBvLhzFhU7{Y{ zGIp0K=7~A$?0UC&hwt0q!h&1g9h%kk>vqXXi}91woiP6jjR`9>dpNZW@3U3jl54%1 z)9r(?eaaukdG~|A^1z_l%hSW2>A~rw=8+qGZNf4ZgKDyULCqIVV~>8vs+X>6QHNsg zPN;F)q>q_ODDMCIm0e);US0Tf#R%S)wE;{|odQVpmYG#d4H)o(@FLd3bsxh%t3e0d zk^5@WdcmD{uc|)I(U}bQeDQ20j+wj7gzoUFp?<+-dhnYUU@jjMF2azwwX*CD8xmh+ zd;w=#`)?@gh%{imsf}viPG~HDk)0q^l_s*l`z!m)kdeVYgE`(^oE(YbR91o*uutrp ziUYN`yEl2(;jSHYhZ{V_O_o3_Chb}l+#?fpk5JILKtw<+5?0NuG1BA4G z$V|zCfYGgPl{6erEXg%MGW5%!@IND0e2N*X@fslR%T@FnPYO-?6Jd6PPJE<7Y%UWB zR53a@K@5cwyPk`#x=KmkJG(+PthD)0UsBnihPI|ipF-lN8a^PnV@6IUYru6`=m*_m z4sZ_~#b4A-RQ{U&m1YLp8`%+jIxnbo8?Dt3tGxkG$Xy+b2$6^e|2dXlnLdi06d{vw zOjKki0g_G~)j^qN=b~Y(6e9oxolErLt;Kb_a{-v+6I_+qRC^r!t>(Sq-xN0oApR_i z4zj5TX%@vUG7aF^E;34+xim|*C)1B2#{h%}YBX^k@6Mr5K++1ae6Umi3nL&IM7yf; zag!B@_`O&&wfOEiYq+uF#yMOvSrF#C^(@ZR*R z@0TX)cKjBW@8ddqZdsEWj(uwXv^BjNMGea~uDqWV=)z_W&(VU(ks%Ad!7+$|WKT8?;^GW7=+YJXb@l4LJ!&(;Sl4h4C7hWs_lWyy3YoOF8X*+wKl@4FpF)LAe zTRl(1V2C6?DZVkvTVi}KT34fRZ2bym>1=T&I_k6ikJ>w9xf!=CC)yt88;gjH(eGlFUKb}?&x$sT;!rLQnTh&WPD-%r) z=rn@A%wY2C+s0OSnH}(v6$n7S zu0$>%tq9m5m^`!cEh&fy>>6*m<%DM^WE!t34SF`!=_b+l80bVPPG!+n&pH!zpRN=Qor1n{vIEd^`6#|f=v1_4r zsx)<-ufu-;i7Mf|BfE~HvIyyCHSwqY_nqeA{Y|~MySaUyVI@jNd!iR22+8(^vQTXO zBV=kBRm5SEO4)aFvV+%qI>FyXLanQ>zzNjlU`GXb@KZ9n=LU{?N%9Tv59$MO9={vL z)|Vx-T;b{q=1MKo+~n0RTL<_k-@j+ezKEYQY#fLp^92T_>o7xq)@$_KWXYCtfinJiG%ez%+cjCl?f+ zJoPb@;=?Nvs0r9&phw*Mk*IqrFLxF6tVvV8YrKO&JF+OcIYi}%)RJQ+GPmWl$B2H< z_q^vQph*Bp+@1?!$AO29rKf=lPaHbOJ6IyOMr-r61&6;0^!-qvS<2ntZs)tP%$ z2(vOpo)`407XBM5;ZqCMncOHR}8Ld5MU0c2=>6+c9hRg zKGzJ9pxSlnZ2sx-*zj#jzPE%=vg$TfI1bP9XxJ*Z5H1;PD0|oDQGuXa`y1yp)oxp*jp-4a0#mx}4IX^# zp)m#>lo=|VwDzteQl3>zGMI?C_J=*;MAKtLpe89W{A*9c)<`&!jH9h(6(@@_z?LMm*6@o<8HoG>gRo_v(X zhyg=f8C>rZ6Uy~d$!sbh5*SoN699SKYI)ru%w6vOfL%S?Li_X*b(xs1dA4{y4KNtq zrBpN|<&4oXBi=6k6C%7`v!04vNt?;d^cssf~td?bqQMU=m3$*Vv z-}T#x2#itDRqvQC=5Kun;EltlT(({q&be7r-TBQfBR#1&#^ZXEcF;X9p>1>dq$a*r ztzGv(=ej92t=cSyo_hSBA1voOfowYk9e+>bEXo|O5I~+!Qa$@(`DZx1h@8-lE%80?XPxCjCPu2M z720BqDh&9NdPdS?x<%Mx>=)a~D6klaR)9i2!d*pwwm1;`A281FW( zof8LvrofkuTOmk2*D-hY&7?x4dwZbS1e-_ zYh!XaJ6nJIJn7a2&t)~tQP5Bf_2Pqqxy;DsUoNpRf||BE#jDFtH&mQw_`gvSZ>G&1 zo}TWx{FQ#Id)y{*1&4Qdy!W38d^#ko%F#$)!gb2jJFMj8uk2~fbb5Nb!zT*sSDv&e z8(iz?t+;Ohr2;ROh2}P#H2-pjSkv)9kc`P7^;^kKKT~Abu9&N4OxPel68SwZM#Q5D zDJe__`!6gHcDUF=nW6$;U%5TrH6>`k2rW+#AE&b=4{5f%(JcIe#0(;fVR8 z?zki+zo-2viG^#;BviHv1EVe_9_F)zRNET0aK(2KarE?LS41Lz=r~q9$pPQxv~8to2QCk z1me&fQ($%zd@xG%%GY-TbT+GB5M5G((ZBnLtz!?`^76u4uA9W}7w zEBa8hUW`onzuE=^fr&UGY;mPZIJ!0ZxKYs%DFUL9aqBx;#@~rnM9K1%R0%k3xG{W% z$Socnw&?32WBP|Qg9W-tdIU*Z^p5IvBJB;j$%f#oK^Oef6XJU~XkzAiK?mMFiSv0N z87_lRE6ARVc)5=d`$_s;*Q4~B<|u^XipZ|-5^$QF-XyVcyj=j zskvvj6QPNE-jgS=&E{Nin!t9n(lY?Vb-yWayP2p~&?Cu z{ApU+#igLOaB8TZ?XCOmlKC&48cpZ5C8CofH(VHRhp{|s5}L`+yc&R5K`-t<8?3aJ z-2FM^P1m)m`61%RLGRL!_iFP89jiRfx6c*_rqeg)nN}BdpvS`=xeKXMB%TFMYV_-Xmqp}*@2}&C_3tf9K)|{?MdE7pM=w#=`11E zM@#AMpKg_2c*8bb*dPNJz9xLC=k+LaDSvvdp=C+_bLhv$;c)i7yAAnojVH(R}YV6A(dL~hJM`H zimllcno5}`@)bI{a&jVBZD=bVI7+_Ae7_S8t5?&{qzPeGPKMI68e6jhhHwxh|JD3f z7YD6Z4i4gdoOEnh0BvSk51W9(CG#=DIc9l9v}m)w2Cs2yW=mE)wC!)UnQkuhYgz=J z<=tl^{CwaHwM@JdHg1SBX9AjErS;vT4OK^dDoDKduG3_B(3K)rdfu}RW>3Os3|6ReJ>84b;-B+N&-cu zpg!5ES0oSZk8>4hwngM}U1>xUSWPraf&Eo&FJCTL(@0PQvd%HBtx-kOFGHyWr^gqn zUs@J3lvOdHP$}%5@-*QZ2g2EdDQ>#^Us@2L z{N;6%U=gEtT|6_%5Gv5Mc%*Shev$5t6dFJ}h=m-Ai|8!^I>0HSL)alMA&XirsK5u2 zq$yH4bEkRRY5-Kfqo3E42myBD8VchP?II#lGdU8 zdATR$5soYRF1{Qga`*RG=VR}`YudCT*c$;I&5+Y)2j4&3xS1&F7IdL?Hp^jHL|f>b z>w0F<)ix!m*;%%C-xkgZ!rF=63f`i6?oOD&;FyS~zqP#DMf%6amg{x3cJ|didCOhW zz14T{Wb1aDtWIg~`Q3MXPj5u+ZLP1r!#rM>eBX`O1YwwCnD<=^qWF&Yl|t8U2dsfnYQ(V}u9RAs5}+M~!|7R_4_AWp%Yc%o{0f|&cr{x!hZ;;v zogq#I=W13x2HghxI|f?8tcPW1y3KggS&TX>Tnn9f1wiet`O-`6?g(yJ2;dKcIEaCj zNkMxD{OvsR9v$2X4-s*DPV||WK*CX>{yFPS0k@;R%fvgqb#QsYexoswOa_ZwUHJIO z089Hpzqhtdm&zvFm@+ZtKFd{xQaMpy$`a9E8a#>Icaix$nOvUuFReSvi#%pQb!6CE?4*o~zMIF@&IDT@ce&$;0Yy36geEkG&*suPg839Pd@p zF(8Gv6955=VfaCCjyN2dTvkrkDT1QC=%Q-x$0JzjV5-7DYKvDNJY7Qqc|nQsC?W#j z&L!%kp9+s}TQ>^4R@774y82i%USsQvgQObk|%a6eWN;YzR zWkqXTtaTztaHHO7PAlUP6*;;3_i%WI?G`&<>Tct$w(aL#*0XbS(V-15N#}v95z&s{ z4i0;?y$*hU@t6qaZ_JDd`1azd#_VigR$1tZN}mGqrRhg4BCmyLCi@W7Evn+h8vw|b z>YbTL>5C)zm0UDM1z^%MQYp*S?kB zi_7QDx3>q+RFTIk%qz&Bf`b{^R+eKn9($CcV7;A2FougTjfUVjx|g4Ro$6+70-wh! zWt!+q+vz)2SElna{0farUc+ZIkaQ}-iSNoSL+5cwq!KUa2OZ-}SK6f_ULOOSWNgr* zWnEo;u)juYaUEp+=b8%OghI2+dj+G3^WHVmX?a7%OtY^6ovJ@F*5cw_?*rkSeiA(# zOwo_JQPJ!Ii4eZc?khMLnC+Lr=pR6(G)pM3t9k3**#=qs!;p~6+v}+hCF{YkU^GCli-n0nTTXyjdZ*;L z2GAIIIn>@fr3XoT#OuxtW#s^+G6;~!hAH$qQg`e3{&q2INL~RJF~|-1E>}l{?*s(f z4ViSojy6u)x5Zj#BUrXcp$p@ROAZK$w2Bgr2q{FJkf3|A+skZzK~90xTdThA5pNqT zO$}yvt`YVEf)(;eNvz#pvB&PK>z(=y4^h1l{|*8e6rO$0y9tyCxjcgiXTHFtrSf6M zVVHgE*fS8i9rk|C-tufsES#1Rb-5nVwztbF%Hb#}8=eHMB;-7gfnXa(`}I`iFc z>EM319@rk)zZqZk%`WD6lI7|tl6q4}X1Hx+b$t1*&>*#B@ZFU!?{77IUca?5c(9&V zI<4>fOR(kkr?iBrN~5+DLMqQ=i^ogBvoE8(T|TK^mZ^SD5?3$gLFe4cSb{W3Wvh$& ze$QMEE1pIvaVEpxg$O?3yyy_)?`U@gK&c~CJm+g)pKO9ahLOgfXGHaC@C+MwQN?u> z%CAg2_{x>a;Anlvlw>pj{pVy))#cvbH{{x^WU`N|4W+EC<|Ein_mK&k{f}kKe>u9x zcK-&1&tH5vco^|QM_eYOcM)QSF8yM8UGAwW)vLDc&YbwIi3hd$)?#Ae|MB9Kw3DrU z$^rX$#_MjKXicY%Kz(6P&`1p(00v=6W&^p>mEp?S26#{OEw7i=?J$;(iZD>DCWis- z05dn7{cEd9w%$Z0gZQ#kh7NM#^EFpCfHIuHOm4zpRDuh3Ku$%lfD}STVJK8G&EqVm z<6!|X#E?p8vAuhoCJ;&ahZzF~5Pkj}bTS$WrKsaR(tp(WclpCn^@o$lkzvF~CW7ho z_rJU0Di&=nNb2e2>XI@QjgxYs_8zN*m{QwS(#bMq2rUCJfm%b)%HijRftTD8f4w}( zk())aN~um1L)>)uxl%ObXd(3sU9LcNLV9_aeCCZQAb@R65T^fe`596vTsW-}5*Gyr zAZV3ZInv-8=sP4aDE$uh_Z?=nbR3>ywX*ND+1d_Ej_+X!*?TtTcF|&`$2FM_AwQ3S z!GCDyZ1Bb6pn4>nm6eq{Lz$s|dk>72^J?;%RYjK+o0_Y<5TY*s3m6;^OvQmkOj*Xu z)5`W^!Pvafzk%M0z;2UP-WdeKav@JZYy2d3p^?|URO{E!XgO&Ct>fH$U0$%GmJNg8 zsADmzZ9a_h42#gvS?dK_(j@KO`Dd$vyYAp`CX6ZYWHSwa&JuxBxs9kJ|I}rN8}3_- zm&R)ITNZnMKieDl8n`pjYJdF3rHAs}zty*d4R&+aZ~0x;PUsF7i)tWr_R4O5%H_HQ zGGB0D@pDrAtd?_=1I=6F(+W_6%$X(H-w$UzlHM--^2>bQ3#;GtB;rlQ&QDt7dQmE1 zD10O|q=C8uPqgo(cb0J#k!^Y3Dxz?Wo!$K8^p#fTuZE6bS<7$rn5PW0Hc=6iQ8Yf3 zOZ1~4{?eG|S3N&O=+)1C4~`nt>D#;;a__U1%jy;H(s1DzGn?Eh`P`V>>5jPykb|^Z zCu5&$rm9vOktP?76-^N-pB@|BSMtWa2z}sbRN160FTiKT2>UE4WxT4^)`Jm%0F<`KF0Gx>A&BpAO5|) z_xN2uumN7?^?vQa6N1H`-f0w-8^}9?ws1Hz#+ub_f9IJ7Bbd2YCf>9FfzpA1}^TWHK6; zCjLa1SO>}~H-rLGi0~(9v`JG@C^O3QiQodm(fHZ#kOM?Nh;Isn)rvW&E}c`$h4%w0 zSURf*d<}$?4E*W)KUSHe(GPPm4k{NW$}oBUCPaEFKUbvvNn*DO)!)RCC(|%YhFR7D z^^}^xV$FC>Z$~RHQBhPtk1vi~Weq07AV547DLex-frx-4Y27CDMIi9E`=t;(018&P zn|l+=nwVXn^*!m08dRVA(Q4qc?;d}8CjqRiUC*s(TSF);7bKAanM4zm?1iPg2JFFA z>_ZoU@~+$x<46ukw>kt)pNzALx2oud#X-Q4u>%eDNdkL**!$e?qgL)HvJ+3;l^=^B zL!d%1V?g4Q#a59fnL~yKTp_&SNkw-UV1|V)P_YLaH`VRLCh~GRYI=~3Yn?;v}#dL%MP2YW*%ue zXS&00ZYwlvA=sD8S!QU3hewuC%L$lXSf=g zIi)0JvtNY;*FHbn%{(4fJ^S6cD&P^Q!p_L5sMXohzdT>*E)y^`)w*$%0AaD{t>}W! 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
NHwiXUZP z**{>WV$IQ0AXd{J$r`9*loOgGMIh;YkY6;JheZ`F7tM-`giMqFY{~+|!mG%})=T-{ zRILTjnC@hsdNBDge=M3BW(Sv5>(aR@!>N(WVmqn_Rn!x2{Uz z$byGo?iU>6L{r>zuCvl|CRtm2s1y@^H3#yhZ=py`CsiH#bu^9M0H+!MAVh^tZJ}`n zU%Z=QOm!kzH&RYPMU6NsE!HW2wd|-T`mf`iz@5m4ryUljh?0epzuQMv!;5GYXzMdP z4^#<;0k-2tmbljg36|SuNLfbzW@&j{dyzxnXc$A-HA}ECFN~VeTa@Ob$8E&nJ2eWj)+2xpmL3a|I^JOM4X1$k+Ff_BN*Aina z(+R)K`KsxxF;r~j_D#^;oL3UtLc$8Zz+c9&#tg+PwWxw0*n!yuM4E7klw2Zb7BrG& zi;N
GTew1)k1V`xsSLlOd#ph`5~geXFq-S%fGnqPA2B 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 PZ(E^!-8jgU@{zM#b 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 y1CDdb`Rn2dE^r(4#tNg@pbLKh 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

IfJg%16 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 z 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/skin.xml b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/skin.xml deleted file mode 100644 index 5175f55e61..0000000000 --- a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/skin.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - 180 - - - - - - - - background_image.png - 0:0:0 - - - - - - workunit_running_image.png - - - - - - workunit_waiting_image.png - - - - - - workunit_suspended_image.png - - - - - - diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_running_image.png b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_running_image.png deleted file mode 100644 index c6cd2d061e316ef215c15d3e7f0a76d6150e7f1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`R-P`7Ar*|t5|#-@9KmS^>J?Zn ziAXk_o^X=I@DPKKv%;h$&J*mocpN00CUR?VF?S_5{(H&L!>-D}pdnK?amPusKR{C$ NJYD@<);T3K0Ra2b9@78- diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_suspended_image.png b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_suspended_image.png deleted file mode 100644 index a5573a386ec9d9c156beb6aac6151de016fcc108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)gu;Z0S*pzxZkf``%eIX)qvElmX>}3)SJy9A0HWW7uRQ%K=l}o!07*qoM6N<$f}}>K00000 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_waiting_image.png b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/Skins/Default/workunit_waiting_image.png deleted file mode 100644 index 848b35dd20da0145930849e10957e9a3e3351480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>Ygr+Ar*|t5^@P5f7qSa+Fm*c s@pwK|mfpav<|!o4^=?uxJEsIILkyc8kLb23GC(a1p00i_>zopr0H9zMg#Z8m diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/boinc_logo_black.jpg b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/boinc_logo_black.jpg deleted file mode 100644 index c29873fe41b855f84d1a1dd228735d803694a395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33464 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/ca-bundle.crt b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/ca-bundle.crt deleted file mode 100644 index f123a06e3f..0000000000 --- a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/ca-bundle.crt +++ /dev/null @@ -1,4059 +0,0 @@ -## -## ca-bundle.crt -- Bundle of CA Root Certificates -## -## Converted at: 1/29/2014 12:18:19 PM -## -## 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: -## '/mozilla/source/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. -## - -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $ - -GTE CyberTrust Global Root -========================== ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -Thawte Server CA -================ ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -Thawte Premium Server CA -======================== ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg -bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ -j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV -Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw -MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 -fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i -+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN -QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ -gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ -k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso -LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o -TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 -MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C -TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 -WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR -xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL -B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -ValiCert Class 1 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -ValiCert Class 2 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -RSA Root Certificate 1 -====================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Secure Server CA -============================ ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Equifax Secure Global eBusiness CA -================================== ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 1 -============================= ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- - -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 -7CAFYd4= ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -America Online Root Certification Authority 1 -============================================= ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -America Online Root Certification Authority 2 -============================================= ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E -jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo -ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI -ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu -Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg -AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 -HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA -uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa -TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg -xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q -CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x -O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs -6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy -MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk -ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn -ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 -9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO -hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U -tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o -BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh -SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww -OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv -cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA -7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k -/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm -eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 -u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy -7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -TDC Internet Root CA -==================== ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -NetLock Business (Class B) Root -=============================== ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -NetLock Express (Class C) Root -============================== ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx -IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w -HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx -IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u -Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY -rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z -hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay -BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL -iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb -AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv -bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0 -MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E -FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n -VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m -hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl -ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp -QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5 -quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg -MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz -MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy -dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD -VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg -xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu -xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 -XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k -heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J -YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C -urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 -JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 -b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV -9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 -kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh -fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA -aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS -RGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3 -WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv -bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU -UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw -bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe -LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef -J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh -R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ -Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX -JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p -zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S -Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq -ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz -gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH -uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS -y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI= ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -WellsSecure Public Root Certificate Authority -============================================= ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx -IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs -cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 -MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl -bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD -DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r -WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU -Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs -HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj -z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf -SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl -AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG -KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P -AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j -BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC -VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX -ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB -ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd -/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB -A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn -k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 -iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv -2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -IGC/A -===== ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT -AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ -TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG -9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw -MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM -BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO -MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 -LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI -s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 -xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 -u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b -F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx -Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd -PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV -HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx -NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF -AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ -L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY -YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a -NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R -0982gaEbeC9xs/FZTEYYKKuF0mBWWg== ------END CERTIFICATE----- - -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz -MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N -IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 -bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE -RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO -zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 -bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF -MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 -VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC -OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW -tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ -q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb -EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ -Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O -VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA -========================= ------BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw -cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy -b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z -ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4 -NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN -TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p -Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u -uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ -LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA -vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770 -Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx -62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB -AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw -LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP -BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB -AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov -MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 -ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT -AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh -ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo -AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa -AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln -bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p -Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP -PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv -Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB -EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu -w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj -cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV -HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI -VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS -BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS -b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS -8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds -ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl -7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR -hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/ -MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. -====================================== ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx -CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp -ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa -QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw -NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft -ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu -QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG -qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL -fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ -Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 -Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ -54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b -MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j -ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej -YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt -A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF -rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ -pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB -lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy -YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 -7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs -YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 -xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc -unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ -Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp -ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 -gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 -jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ -XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD -W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ -RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r -MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk -BYn8eNZcLCZDqQ== ------END CERTIFICATE----- - -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- - -TC TrustCenter Class 3 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw -PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu -MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx -GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL -MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf -HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh -gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW -v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue -Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr -9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt -6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 -MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl -Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 -ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq -hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p -iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC -dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL -kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL -hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+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/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS -MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp -bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw -VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy -YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy -dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe -Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx -GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls -aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU -QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh -xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 -aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr -IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h -gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK -O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO -fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw -lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID -AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP -NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t -wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM -7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh -gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n -oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs -yZyQ2uypQjyttgI= ------END CERTIFICATE----- - -Buypass Class 2 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 -ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX -l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB -HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B -5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 -WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP -gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ -DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu -BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs -h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk -LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg -isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z -NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI -+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R -hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+ -mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP -Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s -EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2 -mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC -e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow -dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 -========================================================================== ------BEGIN CERTIFICATE----- -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 -QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD -TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 -MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF -Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh -IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 -dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO -V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC -GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN -v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB -AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB -Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO -76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK -OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH -ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi -yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL -buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj -2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= ------END CERTIFICATE----- - -ApplicationCA - Japanese Government -=================================== ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc -MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp -b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT -AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs -aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H -j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K -f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 -IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw -FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht -QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm -/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ -k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ -MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC -seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ -hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ -eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U -DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj -B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) FEtanC:sC-tvC!ny -============================================ ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -CA Disig -======== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET -MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE -AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw -CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg -YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE -Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX -mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD -XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW -S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp -FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD -AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu -ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z -ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv -Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw -DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6 -yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq -EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB -EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN -PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -Juur-SK -======= ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN -AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp -dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw -MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw -CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ -MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB -SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz -ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH -LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP -PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL -2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w -ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC -MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk -AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 -AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz -AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz -AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f -BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY -P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi -CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g -kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 -HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS -na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q -qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z -TbvGRNs2yyqcjg== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE -AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x -CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW -MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF -RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 -09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 -XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P -Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK -t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb -X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 -MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU -fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI -2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH -K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae -ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP -BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ -MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw -RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm -fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 -gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe -I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i -5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi -ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn -MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ -o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 -zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN -GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt -r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK -Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi -=================================================== ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp -Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp -a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx -MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg -R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU -MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT -L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H -5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC -90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1 -c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE -VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP -qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S -/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj -/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X -KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -TC TrustCenter Universal CA III -=============================== ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy -MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl -ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm -BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF -5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv -DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v -zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT -yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj -dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh -MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI -4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz -dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY -aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G -DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH -LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -Certinomis - AutoritC) Racine -============================= ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk -BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 -Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl -cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 -aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY -F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N -8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe -rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K -/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu -7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC -28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 -lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E -nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB -0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 -5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj -WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN -jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s -ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM -OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q -619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn -2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj -o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v -nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG -5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq -pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb -dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 -BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -Root CA Generalitat Valenciana -============================== ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF -UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ -R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN -MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw -JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+ -WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj -SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl -u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy -A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk -Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7 -MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr -aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC -IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A -cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA -YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA -bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA -bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA -aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA -ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA -YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA -ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA -LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6 -Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y -eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw -CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G -A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu -Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn -lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt -b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg -9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF -ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC -IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R -dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw -MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy -dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 -ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM -EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj -lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ -znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH -2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 -k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs -2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD -VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG -KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ -8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R -FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE -DNuxUCAKGkq6ahq97BvIxYSazQ== ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB -8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy -dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 -YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 -dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh -IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD -LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG -EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g -KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD -ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu -bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg -ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R -85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm -4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV -HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd -QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t -lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB -o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 -opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo -dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW -ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN -AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y -/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k -SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy -Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS -Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl -nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Client.mo deleted file mode 100644 index a1b57d45bcbbeb4b9d9d2971ee84338119a09336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmaKo&rSj{5XLcj+M{O=J$Q81c4Y-C8Uvys0U>1lb2DXkTq~s|ZBg+ZJo=$$XuB-+b@xeAPm21@;2_f$hLSpsHrzGYn6{TWS7kWX%ia9(o1bp>@(|PTIrX zO@}n%dNjtlu^tAllm)aGrGw0H5{-r#bSw%VJllW3f07 z-*mYUB|?T`w)WjOxlr(wZ2l^G9X!e|B&pY&7T%x|=(&m_{9=J?da?IS(m4 zzWc+u5>lU%{8?Cs{_Hlpg62k7g?K^>U7edk>XMV@MEd9fu2G}?O}9>pBr`@$r6(*- IViwhY025h+4*&oF diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ar/BOINC-Manager.mo deleted file mode 100644 index 1d08354f9cdc70b70b6de4b42d46e957982edd77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44386 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 n)yJ=YzI*%~jv`b?YCYvP`3;}1k&b-cF8Y9R? diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Client.mo deleted file mode 100644 index aec1a73d98456ace3cc43cf37654f4306412be1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/be/BOINC-Web.mo deleted file mode 100644 index f1752e8c94fec423c33a31375327e8ca49503874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 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 Q^Z-WhE8FbJ0zxkS4I_NDssI20 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/bg/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/bg/BOINC-Web.mo deleted file mode 100644 index e3e04ebff2f293bb69ed71fe0d8f75efd7cb3af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45601 zcmcJYd9<8oec#^%!eSs0QXnBAyap6YpnENO!60Kmn{5SaL06VpL+0K)x_8jrnaj*v z$(Oc4*kCXLWDLZP@g@_N5JsqeFJOGe^NZpWKU@?qVf+a`f8oc9;+c$R)A-wr&*k&) zGX50fA2Pm#@$VR)&G`Hm#`&LQd?}xQmhooB?Tp`I{P&FCX8ih($9)g~v!ZD8`F9yb z-{mig`v#1g_YdflySg#33{A(Sy8-#&(kb|sEQ9WVj9Kg z7{%`?#+{6(872SkFlzp-CHFF3!FWF7QASP`pJ03~88A{#%Ti|3!TGICQ^; zQS?5_;;&+Sit%d3KVh6^e9bG10+T5|$=K!kdl@D77ofa9W;~x!a{8g4Eee_NPcuqS z7ceq)aUtWajBicHzriTF{|6(i7vEu&-d}_fNS-feEEy*lMgKlVt^Z+0$?rDC8R&R` z@fm!65ytmTKL0f1yZHR{*Ki-78;qjo_Ra9j=g%`dj%VS1`Ve&mU!!KYx+&Cm5e#)OG)b@%fD3X4JaR*dBU)H{(7&&oQ3; zA=Y7R@p%cMeuVLl8K0)}yMn%>X*|yOn?GC>H!>dM{KZ!l#b+45!YDbu2_t=&@v=Q& z2IF5c{^8TH;h#h1d@l9}J+ET?Q9fS6D1LV`?qGa3qprJ`QT+TC-Se&uyZdWK`T0JW=l|jc{?g|^V3a>S@4B#) z!;G)u^Bm(5#*Z^@WBzY3vScy&cI<`m7a7lE{4GZD_j`=EO7SD_h`6wsQFhm7JfHDH zj4x;WBI5;&zs)H9{3YYJp!=Ec#25Me_wSD5ulf0~i(QPm?m9;K<09kFFn)qj^naD{ zrHucLQF8lxM#=My?+F~*%lP|zzKK!uyyq9VkM*u+6y0B)4nF>bQSK1n`yaztUdQ?W#rRytjqeTmE@fQe^C8AL#@}I-9xpmt6qrbH z72|6ePcmM@_}h#(GX6cI=J`My8)E!8qvZ7;7{3kO|C{l-eEy4WQM`rmJB&9o?piF0 zhZujC5y&fUcpp4-{g)YE!{-YJ#5m}GC*!O6{ElP6_lFrZ-z|)r8Si3zIoJJ8I{xR! zLvDY^D80Yn`rzX*qx5~0@y(34GO|?hpBaVsyO%>QeZ~i%wc61S=uHT==S;oKN`enx3pr?JZDE<$hpMEQ`f$<+d zjURCRfzRT%oc|@pmoa|sHe|~A$9@GnXMEA;@MFfy?&KQIzZK*8b3XskJt3!mdkWh5 z{OtRR;@>g8=kwgdb(;{zZ!rIxzJ!f2{w1UI^0F@%#V;_vn(;EmUt*M9{A)(>{j^_0 z_l&P$6n%?~H!}V@<5tECzY_k}VBEy#8yWXAevMIn{tt|hUcBPhLmp2uqQc@FGC1UiyQ%Iq$g8pF;ON-s8>%DlyNZ3$+wmcVG3`5s=FgZ)Yer7!*YX^$=Jn&eUc>8cy!2-)uT#9< zsSo_QJcgpf_$pqqftz_@ZpG_)y@Z$kyquTxjQiUT7@UvD7W8M1*9Un?mrK0#ryE1D z%=nY({WBTg!t2B7a~^I;Z?-cYOz&^aCmEl{>y7F2wTwT;>!ZAm^SX`KzvPwwGFFa2rodb{7nU$-#4mlrPT zKbP?LLVEvx#zVa1d;0V280?e6i_h@dkdEDvMh(y7)#7yxueb908D2nK^=F26m-2dP zI`SOGH}iUN`uu@39%g(4uPf8%eT>t*W_ex4>)pIw%Par+WPY<@>(1`NVx!Y)_BUL# ztz7Ci%N_go?Auu$>GsME7tc2PM+e=-@~U2Iww&S0r9rDRx8ah>V#C&b&122phKtI% z*0E;UTxhh~Wn*@>*X;L8?poX_l>iaN20kEVVYp^s6 zJ#A}gFb|U^L!`Q zVoDW7Fe%xzyLu!2&n|ZwDBOY$bz|_`5A5k%-MHxl4D`E42FFoNu^m+(lezkMzu4Yx zmv#*FUu?%Y7aHw`?5~{dEzKe9{tRmAEf?E+gVvGOjLwL%cDpqv>nyfo)7?&Yfh+Vb znex~NG^kV4t!}$J$935J!s0*@m~GBPxmqoZ42f5}C*8=2#Dv)w`=mN_a|>P+{# zN1L6=BH(X-r`_r_%d5dD$$h#Z&qQV$`cp@j7n>WfFLbv@%XXTBi8zl0nv3&Y?hBbu zmcCdM9O*T2f$1(JNmE($*^H&ic7M}kS?)Pv7@O^OF2IG__~GnwIS-=5T$@Y$6k;G` zwtKwO?lxvUN2}8xFh$uKl%4MJ4algxZob*kTo=IYkyfYGpKs1?#-;{KJtOg89=aA0 z=vq9tn|QPFw9!5a<4p{P|C{CU7A(kMdj_J}1n2~g9x^#T4{A3$+aM3J`U2ngE#V-6 zB-7ocLAqY3wg#qOt{abQ$-r{#el8>ig3dU!$bHPKTwBwCO1!h$d^=XP1lacHyImv* z<|Ob9eimAD^8*Vsvwfh8iOiN)c9%M{hMi;rDMlH`mO6_KB49r~v{AK#g__-0HL%nTX298UtJRde?6*cQkuPv9sl%a$ANQ zJ9df=#ST!T2^uuY9j)#{bJoG;U`CSzjo#66}WCnktVP> zPQ~`cMSNzqbi_s(To}%qMr&iQR>O6Qox2b2D>v?5!u^}L%KqLQS;qS#R4KXGw={z# z_sUGxrUI!rn8~*nT0$HJW;}Ipyoo8J#z7O^<5he1Za<*U$66#PFtCWi@p07GkSAt{ z2S1nEN?3eG*4Y9~7u$_x-E_3MT=u%)GSJ}I1Qu1v3eZ`hFAFKp06|B3E2joZO=<$V za;e>J_6FTfu~ShUhsGMfFLIV_shtKk(wv#^gxGwYqCaY0NekY$BDAcea6F zmg*BLxw5OMsf;UU0EGsrHhKj#m?UH;-EX% zYXIKGt|mCQAV8EYUpz5OjOi#DV8#A?V-Y1_)mcFjXeB(N`T+4Rm(qk7Az?u8#$8Zp zRx6TEFoTSukF|33dwDy*gi;i11a~NX2ijWdbaef}ZofGgG~PU~s|6ItTR@-u6)-6K zi%pD_cqz#=uOHx(rLwY$B*;516F9C+k?1d^UF`Pzt!Zde@})o|oD*CzJ+v_OWcl{I z5@DySxUIvYN0&5@KtGrXx7Z}HNhdnZ<0GjM+Kw1}GEZfH33F`p%d7Vs-dygD7`qv8 zAcXcJ!`a?`KPa=%>|M|=b}3VAO{2)!l4L`uSM2J}EJ?+ITf0(3;BX2Jq3qq*$9&dw zzu4_uy{(kH*xfnSB2;@0Wqpxw6uTGktcB#>l@I6B;>jLS>~`8$TuHJ>v`*fQDd4*8E1c{ z2~Djoz!RzMkyeik?+ETaq2!Z9vfUI;krU@E%L&WIog_eecWsgZDkZ|0x{KJn8HF^g zR~f{Ggmteo0k!c*~gh+ zPNh}$soMNmfk*}=C@mt(IZ6tER2yyTjeen6;J@$@vYXlB>h8>Ze`bCOpgf2zcJ?;V zP7U|a_Nu_JXUE=hXScW5C68~GI{~csBkuXuViD<$Qj(n8tPDTfq(*{Bay@xE$|JYf z(4Rp#NAbEI`PXE9s?ItY36M{A-NDOMk3~+=Wuhd}l}kHq+B3KS%Od5b_7qNt97Bts zZ>FIN8J3N{PJSz=v1L{n!pQE*37=_c-Xlw$^NT&5V@iqUBpXeN)_dLS1&&UWjF`^& zSQ(UAASMV>NqPpPVMivoX9ABd5r+U3gPd))#}QJ~`Y;RB3SZR*#=Uv$UyKQXfiDuG z?s3x+H(@7>)T7jxU8*yK7BRSS)CZUw8LS|BB45|+M9S91xdi;Kt5#jEw2Tx@K^7!H z7&A)hNrH^z_zvU%a7R2vE%5p_w(!pI=nDO^-#H#(FJ z)`Fp%GbFzl73L3p`8+b7Y4oP?(b*RIKRjN@v z=;ftBP1PYHl|T$xI5ANSVQj~>SWi@nE0x;VIOSx8MU%xfO|Gds-e%{C`2|ZLquySLx0k@^UJAERso9(OX_vzNJb0#-2JyYd1njH3?pR zAle?A%UW%zGOMaB$F2_4LzNLO=Nj1e_w-dlx%TGv6G=QOC;tCWXwO}`ysW)FOJjdD_Bk)Ke6&nF| z0Ga-%xTH1IiT*&aix0>%W@W_`{bVevK>C!katj&~l&oQF`y#GhNkUKBu6nmT^4&xA zWVu~rk@aY*8EPmpJauV0gU!azIpCkb?X)N&@oPLH>sR!Ktb82-)O@ezBi~VWJPjNYtru z;_$kmzXs-S2w&UKpBrzS61Mh}+O?v{S4PlBDY#peQmJo67OK@7GXySBfIOJ!)nm>q zv<-bFG6$Pc_izHyZRqdVzW02Euwwu9rmaT!Lx6U2F(PQsBo8QE>QbW1ojuec{L}r zM4rLMLdPyLZ*?3Hg57cD+*SJAYhwG@qKS5Gh^X3xSa&WZlg1ojoH$Ed4S?X%Sp?pu zrLEjt?JR^Bl#pxUk~S^HWg0f4ItS6$*&dS%5sJ*8WU1n1vN%9ZgqI3ZXv=`VV5)*9 zpD|=K4z`1v?o5%0Me(E50>{0Qm9O4@jR?kg*KDvsUPg)fH1yk#%C)FqC>eOSs5AkN zR1%@xTpx2rl&m;AKw2Ui65OSgT*+Qt=SDF$-6Sn(Ay+O5Hu{mXz%X|TrrMduC{@VJ zIW=fpdCmRIk^XvN4I4uaU?hUqN_>a$BckUF}3^9o^s=qrDzfEzMg(LE08y!I!E(S(A^Zl zs+RONfO&QMU}~<*)p(A53uXq8oo^kGVUd)OVfK~cxDcHz_shAJ^a44XldREluR-2b zin7fCQ*nT~nlzl%WMBzpi$I68PMOy09;f%(nI(au!j0>5WB5pqVy(Z}m?2}EQl*_w zK)aLEP%?A6=gxEpOGt+Yb%}wqG(7@IVvhiN)o&t^P$otgz{*JG#-%oD?@SgU-87iu z3mVfi6Ns0jpnt(ORdmtIsUlWm^Ymu6X+&)Vuh&dpF@vVdpKT8=FQ;SB0bl1Lq2t<5 zn@qFpg7xvZaKZA8lE+3?WVgh7J^tLWE)(+3g5(+TfK>u4pTp`SPp~U>l=0G>+Obn! zufkvG-&YI8L^2tlB~`~@^_tNcJ1)xdS8_yIx^ZUHg&Hz>n;>=G^3e^d2>AHMa_gGQ zVraCBlpV8zqC^60*K2ZJRrW$+?Y9}saGaE*5*w*MsVtd9+EfT~i3PT^`PEL4(b#HOT5VACB7yCAQUUw}a!-Qlx?+sIYB_p2N@CXA0} z-f?X-gyCaI0WoG!_ibm7tu;*}!+zSGrsWSHQZ&#E->s%RNLWj4uj}^6I^Pb&NJk0! z%Zs*bxm3cJ8DZ#)ik%RgdM(?DTcjJEbUBtV)n&(Xuv~83eqd^ospe8zACcKIv3#e8 z?*;?iTAP_0v1e<^^=sTx=w*wlxQ$#Q)P2IkB zQK_fN6Jm$f_SskjsDy&#F~>+1)j>{OGr8i(NutP1X^$FxmZG*TnI6>{8(lYRIb1`a z#-=N_o$Cz?nU3QzyrkEJ98d{C^Rx-nN6 zB~~V~kMa>t#v-E)E&BG7@mDq})N)f4^=BwZ2_lJbP3J86z9kZ_rG>;5%wAqz)ossC z6NPBajGPm*$q9Z0`c;Ezl)OUz~MBRi?OnFF;CMQVqg= zYB*NZIlc#Gq@_$;02!5k3s2PM&z#B|W*1EgfgZs_PU0R~T+gS>Wwp0mq2 zo@v3!XW8|N=LhNzO#xKxy_(4)x=0amPnM_wO06y{3GwuRO%bpWPMILp%> zy`y+1md}g;GQ_Dk9R;AOmbYQY7I_3KBY9Y3^nDX!LJmA=G(|cN)v7bRb3v9{q(q_0E)ct59pvd87nqTbFhLL07#NZLv}vBkF34 z=6i0l#`Sh}K+l+s#Z)UKGC7eug1FQkXG~gWp{t9vLCAgx9I7gINKqG~oL*|R?LVzr zhZ~;q?9RH#Yk(i^=)quY;n4@7qO0Pwm6Q9vS~WJ*q-bt2Qb>bUnv$g$eXs+y+=A_D zsV6 zDHj<#4GmXqdTygZmcbJknwL#C+S^!4RFCPV{^dSd3xW|e<;I}93l#dqREIrw5QuMw zp!}^%^w=kMHU<>Z?5ZcH07_Eq%Few~<$a|_l%3g)60n2aE+N=oWkP2wdz@kMlncRT zWg`;n(6;Ep5_U1Yq|8kH_`sr2dutKD4i!xuC(9}i@kGFQzu0^;<) zIBSe>R9?e&FzJID!VPcIBRQGB`rWbw+zkk_=pJZ(YEkv4f73h{v6$GYHPJiHe>r8HzwB~vw_H2dO&a)Q>3p1_KR z8Y}TM#!+Qmf)MSSIeXUbd1F?onWB`NyE*qu8de7D3PW8gKh^|%47fc#`$T7td_JBm zWD44D-Xe|XLN}&{XFS#9u;wW?$r)K_0ZeAwGd-c8Ey(h4ejJ5VKxXbP0|>CQn-cn} z(qM|zE)ne#bl&-bB8w3Gm?242vce`#a`ouOakCR1-BxYDq)nu#z$q*fUAm@G>k+H? z(qomFP)4{6^LGDn!uPh?N0(7%o$l%ZS7l0sV(^_7gtrB?YPFfo3c(Ws5EY)QypCL9 zj)LTRHj+kV9_>!m<5fvD#WP|ZwsF`oXBxy#!Vi2b2X)yA!0+~i^qCoq z9OFuDxb6-1!dhy02uz||#2~Xx*q)Y)1(Ls1U^9ALK~LPO*DUEvYLuty73is?crZ9F zAS~eXhs;GfGK2Z~p$DX_XL-g-*=VOD4t0FA0?^oJBZlxnMc^Ho`UaRHnf0K@i8kgP zjdoXVM0JJ>t0SCC+*Ih;(^nreD-LU_WPNy`0E9_+wm3kn! zRpuY7VQ(C_i~3FV$D%A&{SDWyY*E9U@pe2qjshV@Q5ksuf@I>r>kkkY#Y-Xqb|L2sZ7jE)zK- zk>nx+7xzTFj>uMNOOCNJX<5mDv>GK?d2rM;ci!#CswTGY*)=sPIWhT2J!Ar%CJ$x% zvFlXrVy#rww5#-h(j1@UtwNz|QYLzx;7N~w@o)*j;CN%{Xp?kcZ{zy% z0EsJ4$?QqVNz*rBkxC*}T(Bcs?$XXgOqb3u=T0g{5SSdN_K@j#Uc8H@rJoodKfH&M zrPIZZF`sLD^y3>7JLmaEL4(KO>dUjpTS$8Py(Lt;@hToEq~W`1#T8ZV9p9_4k?$CP zGE-9AIrh*N7wCDX6;mCe0c)bRqli`f9_9h&PGiL_*ELA$J9B!B^RS)*BW288oywxK zj*G(*9`+3!sSR3upGl_3e@kOYN$9v7os!0bTN|r{b5n6RN6OJV$|dD-GXK1RjN0dx zz(g2UH$KO_Nese!PwY6UYZ{Z<*ZPiVvkKE?*SGuRy9-dH>6L^@|x94C^ zSQr_1Ek z>){l3y%3OYGFM%sr#{oe1;LpgZJ3CC&=oTzZEq5?`2mjT#4Wb2Z?-3Fc0IoLgPf)ZYZ%BO{m2l?+Z6Z&%?(G}dDT?o?D& zgei;5fiCaLqzqhrDM@^EQa!6wpwQ{ceQ=bn8k@_TJ*~9dtujLu0<#UiYN2nq#G~2K z>5*M$YpgP)wGcZy(6(~-&b^@4lKNM>b)`}>FBDp+aj&N~3sxvH<^9R?ifZ!yW^KhP zm7Ul#JCXcyTN!j+*PJe2J9+(iJTJj!!^GbHTx)h>2Rr{0hr0QioI}W+2hGMp`G#rQ zVl(d{FL`sn-=5_0R6lh;*_>T^<9P@6ADY<7MwQ5&*hPHU#=geZOD48lG_hrCxn;{X zApF48A+DP^$abMXVszQ1x@_x~a_c4AF1~DH%cWbkoOcc1g_+1e-|cPV3FigU`!+CC zzM;qWA$YR}8P_CFo;U=>nUh`de1p3(I{w``$y01Ar{~VwyJzq2k?^)oZaHtKD%B3O z(bwg{Ov=3r$$(p(%k@+n-Tc87*B-iZ;&r3z6s&l7ZDKbMT`E1@R=#e!H8}4;TU)CW zS88{DTiIFk$Nm);T~1p>XRg@TDbK&6+`8%V^WHXbRiKIFaDeY{(D%A%@=}O-+r)vc z9t@qB@?$uJ7*W8N76(Tl;cXMv_5=jIZh{~}k-M$@=5L(%##5jE#-m^R(_j9`=JHQ( z`@)~z`PD!B%H5->c2IuPpqSrQ?%ejSsou=HJjvAIeea^P)j9euTY)a$zyHuRyC?P@ zLPXojtruVRy4Sz%(#tM;ZJn&QG?&R&X8YIRvk0r#7%dZ9!3S7qV#_u4j-amY5_~`IaeG8NE5ssW4KEe1PXC6Cu!|+V9W)9uY7b3a({&OGX zxUS;Pa(L&t6T>sZhdJ<|J~GF-j|?9@_d(8|(G}-T#`iXdcX94uIfh?t?n|gcgS#j)*ik zgwjmAn0k`?Z#F@i7sm80(2&LFq1d#3e^L%q}ov(ZOGsDNv-4KLx z^6c;dAB6$S?ChA3&YiRXkOp5UwR|LXu7O^p8Zs(}w~D>A*x3ESizmLH8{ylG2K(ne zEXlCMX>RB1rxUuO#<#@5@@LMSK)@CX7kr<#AZpf;0>m=o4d-q|IJSavC=pvp=m1fd z!&997x>lax_{d~TM84^Zx|Df7cJ7312$9RwPD3^Fk*0Mu<{+Y(--l(U7hO{F5j!2; zzpWU4i3@D8qE_~DGh{(Q=;{G4_GCGHuwAySL+N!B>Ixx_x@CNkwDZ`qj@ z_Y|bbj5y0Wax7~@m%*oQM|09ob;R;H%MD!0>rt};Z)p9j=@YkStU(Nfc{t};&&VA( z{>g9>&Lo4k9>wh$tpmprl)P15^HgcN9}D@#O6+&% zPH@C>V@`>jxywpAI1$S~4v(JjerCee#PXvTGTK8i#B(1)^^(!a$#Qr%&T+HYLYy3w z6wXRd9~(Zv6ebV`XHR0+1SJ_Pw}5ER*UH*4(mf`+Iq^e_eGnm zewY*oqE&avRE!t8PlO|AI03;zc$L5dP)`S5ATwxu5H?OqC@YqiXjU)JOp@t`6E|Fe zWogYiNJt8z%G6li1PRQ{P8bL4?mEt`toX4BB!t6;hC^kwDdcCO?c7JjfLvL!PWtf? z8Lb#V0p^v1@&Z$ooE)|*`|zc4e<&Nl3h@wc7}l7LBv2LsAEZ}8OcEth2+9b+Srs~cF90$vI!cPAS)wyxF4fh0UlC%GDv|83tLJxt2_+u6v-p_cmrIM`Es930`JjXi9)5;4^nbwLU1nR<2aK7LRoBH!Qf`wJpm&pi{b5$T(IWTc%d4ktNG1J|M457-{vi^i_*dIa?nLstCFO~-R zsM{b!esA0StOgDSnxX@RbH^}E4}zWY>9`}5hsZD*5n{-b!y`n@%HCq#p5nb_t=Sb9 zZb6#(yzvb42&tYKKH_hW4%$-qQn5mU;W_)FQsLuSN$$_MpE@T^euNQTq= z#b1E;DKGe#0Pr5}PH6*k$vCPQ7D%#T^!;;mnn9P9&)tB(*RPk5!*$Lmm17mT5CRyP z`2CaV3+f{L0VJWUQ-G)Yo&up$j2{Ii&tlN8S+<0X$%ZjMEN;0BVKUAA`bxVDU-k(~ zY9VER3{T;gDFWxOwp(~$20dML_K3-N2!a%Fxx;aRg=DxgdYMK9_{fhny=1Rv;3KcL zB3Rm&#|+#T333oacN)tCXDPN0va$S`MDA=BA zj9;x?`<3-RUKRPc?y*{GtHMTtA^CBHAePNhntTXBFrniNf)oM*cdMj0%KDXb*)1lE z;jbb`Wth1xN=6~qeL^uTTZs(8zAXJYJ(Lw^PL=aiuBNqD$XGYXjPFA@ANCA!HwqJ8 zIW@8X6vYI34wW_8Dtiz_O7;*S>sIQPs7;WlBUGT_Nm20W+Q*=hFeE(uyl<|;5eu_; zX;^bMB^; z%2d!@tSvJwBB=|Fwan>!AG7JWicC4WQz7w1;18Z^F?7WNYHi3>MkWo*_mbBri#O6fz$M~aH{;kcbQ5dxIH|+D6b8qC#Utf}nm@%& z)~QfeOsIGf2~35t%St@yBQ7A)F&WWEvwYT&9#e;BFxD= z#+%Y(wBi+P$Q7mMZiZ7b9kWFkQyV4t30CeG&YElMM}L`U$$_;a$72Zz8p-8u=D1?y ztD~evvxx;!X8lOECxnig0Si2LvygU79pW^!F+4@&yM1^Uh&RG6%IUc?k2<|W3xpUzJxNsjC@2P6yMhE$#>NU=7hXY zd|_Z%8@d=fWVNOycrikr#Q$yFm&&mM_9Rmzsh}oPgAA=kvsyTJ52RMQgV&VGRbfpKV;6LWBr5OX7R3R9f%)=ns=E{$yt1maTIDP_P$nbjfb3|H z#|PgfM~($IDzq5_IE35S>{6*91`(I6#Cb9VI0eI?IApt)j$P)b>jX#Q-u_HO4lyN% zma3Q_UU%i zsG3YlW#y#sVz^*_M|4kG&UWo!c^AQ zOSq#vL>KdNM=6=$_oBS+>1d1W>lVviDG4R0J>(&2%K#HORKzG{&E^8f0X10HX~3u- zCwmckR0a|mhFtXFa(FL;Jn7CD*D0k^5E3S38QT-@LQ+u$=*M)Fxo`yw@wdbgc@qZl zX&q2zE#W84o)wR{s=}4qU7;N)753IQ!PY2WsJrai$)u!VLV}h|OS^^@W+W*|{dhy!rS$s_btXbmlrmvt?0jR_FN*xpICc@!2CUMlj^u1(x;6-u|tp0O-t zl?ajihhx~X!08O1g*G^u8LYU}?xVD3{-oP67l>%UJm{2ZpG)CLpdYUhkno#&4xp6pu*aWaVEz1*?7 zDq)dR$qjN=D*-$d0y%e*wiXqUh);@=v*gWmZ@5V8m@e84(EHx<h}O6x`a=+^L|BdcPcsaef7Yp=7)jk>y@h16QHkHKxm zZ>65mSCbP|zfa|$TcgUj=Ly%U_o9eO4F~B}@jgB1CFPFq=|OdDQDN$k1vIVQ$ot7lrujX@r$&OS**6Omt`js(UNotyQ~X10Qs1=wxel#80?Xc+H|Q$5cVS)6+*)Q zKBh|@PB`q^Pj}{Wy;@t|!5(O?8To{--NlN;a(#&TbdhzEGu==H>dPI^@OxcHolyIQ zwc#oBQ#~#r`emcmnrw>nTc(da$wD{ufsFB5rb36rY)Ta|wGDm29JkZ}aCFwm=aaVE zhrM~Mwi8lAno6pXlZ+!3)({lNg;JR!uuK;vMMYCXFr6EFYNG2VmUoU00^#Dam$2p2 z!-rMIh(_?8OT+BO>}A#Oy(O!u{pQ_iSAjc+)^ABo9ZpjH|)eezT9LeBW#+O3TcOyZq zG=ya5vHg!@wPwNmtV$JQ0xPT(Ixs3dd`BYSP^2x#TG!5?ChL31A{ICD$MgW697j?Z zNhufu2S#Gz#>!?zguS%1MrCCuOfs3Fu}RZOwCNMVM;$A6Exwz=>TQ{k(xF)vE@T)d z*BCM?hP52BkUP_^kf&P5>K>DAMy@I8r7nWPxVL=5q=a=cQrUrlM@=232=Szl&F59&!)E`84L2NWGrB7op}E}D8cpu|3!<^ zuJoK9+o&>lPKV+k*}jARlf=V-eboq8kd^CHu_!AN!$jId>+L81NJH19)RR z(Ro`#;w)!%^Dww=&^-eAn4B`IXBM}DDe;V#gfvzHaUsR^3lUu_KZ5t_LMQo{$|;3$ zuFH@F?M`KQJT%#jdBo3Y>)yuf;!k) zU5!MUVthrpfDQ}h*WNU`)eaAJfR+tTU-3mgf>NE7yeW1m(a8$K{`7 z>98krcE%fbueil3RP01?ij>Oc?ZzWChBKj9AejJ(11Q0l#^2m1`ALa5yc<8t2}HDv zQJ`|tu9Pr?lOmmq!?$JI(y8`Qold|`;Ewq6oc7I>bF9>;jE1#VJecAgn{2CO1Nkka zX0!FLYC_xzR`v!2KdosihD)s`N+ zTB)5aE<%-$mNR3&!%38=zSEI^j#F$z=uO%~gyJqCS=fVZF`jC29MBT!wiG+C6{UG& zfl?ynr!KtXt!yf+yJ}(}YlFYEtY7!!6W-5K*kyXCnaR~yO$GuS8CdeRIkrT*t(@%hYzqG5MS4wZtf)OT0Kw{dU;PglymV+OsB0I@q zG+L#Y?70Gc1Jy?lZ|M;Tw z5RinjhRtvptcRJPK2}ov5%Sn-p@PN%FBL2)8{k;Lz_`H*5SWS(p+Ju$aAD_5vayt@ zXA9ABp-;52L>?Rhw&C=t$T0MA2O=pqCc}+|nLWdlG6u|8LDfxg!dZ?8@Gw>qL$_5d zCdFomHuB@xzlcVnsyEK(%jHzHXB$!|P*{!bw10k;>GbQXc~*-`rYZ%ZYmAFSkpZM` zH?zuFus_R60f6$8M})_JdNr#qrKGw;XeN+IxO+HTlDTlu zXHqW2!m?V&BrF9Zv`YPyoa_N8!YxvjkZx6TTM3ekGirMoB^u+nof7j8Rg(h$_i6q00mb5p(2x^#v%r*r6oLWep?)YU5wA1q=)`*2{DW8< zl>o?1c3V^KuVpU+ICZVWmfYI>2yGDuSeoiH`J8Qv?PiI|8J)8v!75%D;)>ln+rfAo z2x_g1NBnp6@#?w?ub2CV@z8u8Pq*+%2`^hqLNzoh{je8mf;6p5|sAYT$ z2}p!Uih|oN;ksE~mWXuJ$|fdX6WM`f$tr6NIq8$1NF1ITms;i0`VI&R*NS0B=yF^& z=T2V!T~eo5G5>%tk@j8*(v+^SF>|ouyMVZ)?Y}a_wJy3FgtwVT(k_mZJ&(=i(h+^2 zB*6u?gml$hR5A-5bI7&{t1_xcf-`bB*4s2gy6IaIx?3B)>vWY*NxCc+J^j;2SqHR$ zxe`c{tKY7^8#1k7qu5;QH;u&`vdf7LMv#GZRnDrACfH#$`Ic8@JqNP2e)ZU1AebUL zBr~Z$@1;bAnd~f8eUP&pTcGnV;gG9TL3Kr4HcV^?2-XTw2&B!jaU4P= zaej^296Zj*qc`Ayc3@CLsNWzIWyN>`i?!b&hHY7OH(%{SN#f?f>79Eqnm_O@)a$qt zqFX&NTKf#diS`tKLFiRK^K2n$9#j$jl9m<-*PeM32*IwRs+!KQDp{JwG>kN zovpDRwe&oN*9!x($VuIp4qa6ouEdl?RSt+YTVnLB+)jERN)U-bw)XIwWQ7T*1;aX> zCsvC^utp_nuj+%W6u*W=m-Fe!8q#HowIr;LgRC!YF(Q3&LN2ySbWqL&vYwhU1>v}< zjfp02EMlBVEr}ePNKLHdOlt~?A~iz*Q;ac*YY=fvrO>Ie^D2((kdXC0 zcnMz!J_VMF#UxrrPSb#nF(&(J6iK<$oWArpb`bZvpRW3!M)&%q=9EY|hBa>cYYQ{k-v*Y+fOfdy-O z%$RLS;n#Ves|uwy{WZLvpr~L}Sy23RL(Rq=0TC5h2_AVDm+A)Tt5SHDKU9vI@5$K_ zR^=|Wsp?lkqYQVA=mjLzTFTh{crHaDBEg(Hfqkh~lM$TMN?T}DlU0X^xw3A@B@o}c z)f1p8;Syz(09c}(S1OcSDTbV=S7teEBaeW|6R5&Eu{hSJH{wWbD_WBM0cqyPKjSyr zGJ0V#h-U?MCC%8y0tLd0>~_{5cH@=xmwr%Gh9}DsAV=E+Da*2CK~(~;pIzmjmP!8@ zVfrz)43cBjo@7^nP52gC_L7!yvPrpK zDMBk;RL-IVkqsgaV-Kpa?&PgDDJex;Z3QsA5pwLA|~fl zl-w}Ez2p5(qT8riXFB5r%3ArHyrN)Q?AbY2L|)Ya2lK{>0B z=Mdagck8U#AffVQ$YNnT&V9&s#lEb(Zk>YjR=fC9G+NN_r{PeQkQ@dUIh204--`Bz zg;Q5;=)eM`*+@p|JY{Z&BtnC5??z!u@FN)tfvSxaF)~UI zQqY%pDqw;l1mW_oN@?R*vex>eaN|&vxUnCxq>B8+V2@!eM+F$?-u(;X=SF ze=t2MAThJD)F%&wRZ(t5X+8;(C!wsN`sz~o5O`avP&U-wZu zYEm3uvqWiRyKtrsYp^=XHobO~qOwz+hCn%&(3bC1jE98#)34_^d5Ai}7t4lZc8PO? z@8eLdN#qxti%f)IV2@Tjva2b>;HM`PCq!no#RxI!-%ALon`ASHxDkgWz)TK0h-TII zyquKT^(>`(AjQhXI#!^?iho`~D%D~T8e21Xg{P1NrA9JH(UBf+f{nVV$<+;4N^f9L zR#*MVR}{Pvwk54(iJC&DeL_c+nv8vc!J6~BI<1xM$MEbPhdN-8OMWIHXex})F(P>? zCpm1e7aR4I8!ZQkB@;NaV|FPm!c4;3Fqu#vWZK_Ut=cAYap5$2wQR@#1&B(tBE9`g#kCV=PhZ?dA`2BZh^V`uHTqY=rj^#0{{f0D z9Oe_!Dn0OndC(MLM}Nx({mnZSHuYrj4qFALn9)t*iipMEGAfl#Ql%qMAdYt{LcJn1 zE)N@*conqdleHjMFO-c)L0T9`b%V?&GBiWJ&92@yiaOsM;3P66Kk|^j)xvXYc0N7a zUGp@D9GC{egA9S1%-#DZ-Y0RsNM#sLj=Kk&oLRg0qB8bG<(g2a?P$cJ5Aic`@@g%h z6ZiwmGZkMDSi`O4#j>vxx=_AO`FxvZ3gon3$pkD^bqSh9sNHL2S}!Q8 zLiMYbNiqoxheKqs~>lu)t&cVYzgr!kR8p%m)&>uKNw=! zg8J4nxd>2N$uz7ig0?8KBLF&(Q!yr^O{EZCdi(0kMfceOtrIYSo-0%t8)S&`OR0rP z#U=vF8xAr%`7@xwBwEtnRaE2?FhpVy6NpCn8)ldDE|ZxT@Of-BttvluW+u}P>L|oz zxwfjB9t50qxbp<|Oi{L?5MlZZUTZEK8T5*DFC?!%b0~FndME;&#-gT3W954r?MFr$ zNhdN($HNqOl^o$}uxQn-vrTH*${4k6?2;#b^VD^qeyMUziGQS*B4FSVMTow> zAiO1ON+4qI&AfYu*kA3wkBh9NfFB#FX3H^dgf?h9s!A*gb$J^DN$6O_Y|s|0mW61O zSZ?X`C~za-Mj{JANO9gBu{agE!vL*1JGj9@F)&cPZUDw2Zph^!ON>{1QlpGGZ_yG@ zVqMmZ{)q!0UVt+HKa_)ON>#ow&c#aWRop^A_#4!@ylY8DR4PSMtmA|XOJ2eSpBMzwI31~ z?Lmma@oWPkS%sWA6C$!jW9mAId98)Ua$w3$F!>d$rIciS8zxHJ6$X{DFYeU8TeKD& z#vWDlU{4prbs9XMM}Bg1B?^Lsr}XOxck)Kx{!qwMH{kZ%Jmrg4B}T>t{;J> zhF(_yw+9{Y%Cb(`J`Wk{IN-Mv!!PrO=)+{R=hvMC9=M5z8?g%(B%PpF#t|hhiii4w z`QrkhCzG=7HbbkK<7=X4l1uPY9I_Ts(-wJ13A*D2gkw&Dc&06 zQ@$Wmu$ZX{?_?$7gyoBAyK^DQR(Ea_wzyLCZ$w7`SJEouRdz!v9PuNnA03KK7RLqU z^i>$uv%jKKzdhi)8en<3I)6PudEMS_EuWt29P>&xdt zQddR?>AO`MH2zgwLaEDt-i1OH;*^l9AE^HQ%CqX9s+}cE^F2xmaB0WJf6|mpqn0Ym z@-8HSW^J-6*5aF;qpVK^$PlRp2--O%R@y`4gDfQ_%!2je_Il4X$xD-7)|k7ta{lQz z-4_K+ik!8DskV}aRZb;A_=qwMn<@7y8Iy4%Atw&TK48WoUU5VTqbng@i-#p9m_1C! zZEG2USLUFEF5r@%a&ZD5ZiVqG3tQnu^1~{faSAgsOt^KGXQ~w)i7x)9%aot!oW6|p zWbn;r@g2EUv}-jnD~Ctde}PqcsKpIm=MI>_VysDTZK=s5w_*ixCDx+ggx#?{6H9x= za)J(F2(jo^FjeeM!lGaE7&)r!6 z_tc~>8Fu~^6bY7Jw?L1wSAN4Y|6VtOCDRi>fwkPR`inWnWU-V}L>8=cEn8JYPMTOl k=-=hvV}t+tzeVSNjZLAiE?^|dzsbfbW8p-RV{`HU0A@@=Pyhe` diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Client.mo deleted file mode 100644 index df0ec01149e3026ce033474f22b896615565a60c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4931 zcmb`K&u?5;6~`~7CE!9SrTi#A$}LK2Q2eI0qqONHDRG^NW9m329)|=F;rh*;@g;BG zoxC68nXbyN5|vo7MFBRH4N|+PSRrAtV2OlSuwa9b3j70z1>$q=n;FlrS5!MDMA@bQl+)dJ6f7W^^z3V7@>r7nZ7f};O-;4=6qLBkCSH;3y}d}C6$ zaE+^hLMu^`hL5>?XEW3EAwv zVyU$)+tP*CWp4G*mzmzYzJ76iMXzn`oYlR=8t#|9PG(wG#ELzu<1))^T8tH{l~kX| zWr1v***m4nDxF!G>cZr=bKUkCOL^SO{C90!s8wGkt#rQ7`m_j`wVQ zTenaW7d{*6p3S;0mlNjdqTf#wZ(6F6WvFzij^kUgPus3j8*~%xdqt4DgeFXBTMUgc z20_#7-EwK$2f3EFxlVnd?ZD+lU90u9ZxYwivFDt*>!dF2=-YN!)4J&~Y_Nd3uJ2oI z(v~(Yd^UBQ+GIUO1!Gxl;@FqC>A%o&#pb!`;E2q3C+oW=VUyvSG3iF}=1#AdxY&fC z2)*>4!G*a^h^=ka)VA+JtDr!rsJk9DT^vo^i#SeCPvlh_3DNYtMF7lbtU&n_IWG zu3f!xlVJ2+=F@J-5tBJdL)|U&LgzgjyY>(c1$oJa!7wZz5g*n;vH45vkaBdu2gck(%=E;+_;G#_%v7 z<^>MfN$r565@KE0L2;CpJL&C|R2F{d)WCsz5)=)jzb6e}79ICv_RefkN+=+BxRp6L zEJ4DfG3hj7R~gbI6u9x>=0nX=@1{ozqcC4QG3B#r^$fw)O$d&-)CNmo^EhPZ+QyOM z2XVi?XDMAi?c3BrlSy%z-eE!1;38_xiClD#lQd3bjm~|$*cav!$ijQ=lh$EMjPq42 zxu;&&DqYjr5GwD41tCWbCkezImjvIg){Wg4cp-aB86DA!qm!u9hfrHp!H?Ek(ePstY4Sl_FZF~Ld=G-+a+>EZ|9oLFpEIWDB^mRSAb+s9-W;Rrh=pym0>*d9z zQ_<35v~*f8FV~k(M~lxbE+QCRvwbHmVp?wTOtg4LFQ2L}J%4g>8MzIU7f~}aX%1U_ zR@XO7-@%r11F%NX>6Y1rPM6MEz+hG%+-ajCR9lTlC3?=&w(XAb4WI@(s$NNGi+ zR9&Chb;aCPQf4NJE@5L{*J&^O%+D`NftDxdzm)2y&g-QwpPjoAt=Uu(Qck$#eL?kE zt}WG`og=FZ;p&^JbsxN`X?9iNCwC6+(sc8lPhA)rL^i}8vF^d^5@!}p7KA%iGE6F* zG-(|ulj+2SS)iID7HFn02`f!WM=MIYZ1J)~7O}DV>b`2QN6_dBRI$B`6jbL*w;fOl z>0*-5cS@V<*1Qoc#xsRgG^2ce4`Y0X3U2c_b0zs<6Zl;Wu&_0cydm9$#2MYZpO>LMBpqfW_x3KlZ!9K0b3 zB%Tau)U`Q*4Lr+jpQY7IbMUh?c23obqjgQTCy#Kg<91-1Y=XHHc0L9+(XKxLfq*A37<+P zhGB^5Fe7l1#DifFQjKJi(&GNuFi)96+=D~-J<6WkcF1nh8J{!~2M2LPl_mUv58Jlm zs7kX%f{@JK5aXqoNix!EWL7iXT`3xc>ruJzAVbr8T;(%rwxmH-OM-^?xRecZlE`)q z^(D+xrD|5glemg{euVs+yd_WtM;ttO6I*j)gI}OK|EAt}RAZcN99KrGkrbquO{kS| zjSfD<=PfCL*NfPp1;y;?TriwGe10xE{rH0FrzNbJ?i+MZjssCvcRLWq- zm>1|dKDHF%u*s2jaG4{Ng_DMZ^Q583G$t1GeJmA0Ovg>Le1J_~DtKKplR+5_hk*2PTgV$#Y;Aniq_v7Wk_wPXWdk&@k4UKFTbN~PV diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ca/BOINC-Manager.mo deleted file mode 100644 index b7910acd82a21dd950a634019c95733349df347c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76980 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%0D^;-@$pfn?+Zh;=8mp`-WVcjFMYAw2*kA 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 EH&l+EDgXcg diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/cs/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/cs/BOINC-Web.mo deleted file mode 100644 index 67ded837dfd853d8e61b15a86f5ef7372e805ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34012 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 T@lovvai=#&^)uvO=c4}y4_?jE diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Client.mo deleted file mode 100644 index a2328d0f254cf6a843a3fa403d5a7518b57f34e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4749 zcmbW4%a0sa6~-?nBrt&lLU=>CLAETRsm?s?*tCs_A7f{T=Yidm*dmfs-F3UWrmF94 z>M=9z1rl4tmL)<0*#b7%8nNshij)noV8I3<9)AK0#P8gy?&*2N4wTgM&2*i6p5Hn5 z%wJx3>Zgk5WjzW^o1F?a*~8~9x?!1?ckd!Xq519%S9pQz%z1OA+x z`~*DB_w&yxRe~+>0{DAS1Q|Qrln%ei?iZyaWCn{1*7y^Y{YZ2fqov4@!Oh4K9L>Pb>8`@EuU< z^TYb@pMj$1ci0Q}ne13GYfNM!T{vClMvq*X z>Gd~PudQCzH#WB}=wWI?zAuNpER2kZ6@8;SWtJIROcbiiR-ek{fEdoq56U>JbY`X1 zMVKeK?z)VlydGw5+jI(b)s<;vPZxSOiwmRkBIIW`PR#|~>6=cXBb0OsmyPt$WP>=D z2y=DK?b_6Zky^@SZ;)y?EWF%xG~r6u;AjVD5DbUId$H|0FBdtJ zYwHSa_Ts!~YPD*2!ZeO_#}Q{9_iSu?Ix(Y$)-8u)d-JFpxE-TI8|g42XEWh6rsr|W zJIm>?({Uwf`X98cnLH1BBqDQz>G?ru`7TojUgjpF>}pLCgDrzoMc6x%kf{I(&Whtj z*3B;LsF*XM(xi%03d9x-X?mpg>rld1ILt`RgmiVi`DQpw<4)*{BJ|SzkQC-7rM4z& zsM~G;t-J!Eq8>QZ3`jI}FZv->OH;SYi}t8u=WtrooYHJo{Hz!w)SP{-ZjWpc?rAfj z$}9s^YsyQwd%*d5-7bqG*1Sw^$f5JZp}JVO|h#nucl zwGds}EH8&c2LrCsrNwAyFuLE3N2EG#Ff0qkip-QJi#uAB8pFeUloupq%bGnxrNp{0 zd&N;&ZrQ}r%EAwALpX4#LD4|_JKFHR=s1qqTL*_y$^aq5Q5M5tDH0j&&`veGO5Y}a zz)gZX?Pr#Hk{%h1!hFfZOwOv)2MDh2LU6=oHW&t*BOzP2ZXOwa5cjRVVRSjWV{8mf zro&~{!n~*;qy3hc^s9JsXkIreU9;WbC-0O6 zzDGkM@x+~s1lO(3P15IiA+}|V*7PED8g(`ZwOI}PU^NQftnR61J!{T2&dl91!pdMR z@5NDYrR?QF%Qf}f=0+>Hni)Sgf@@T^sh1WOmxINHVDYS8T52wx4HnKVEFc)%GCQ$c z4*PPvTS8PXo@t&rA1s_j?q--5K`RSw4o_Ux)VCP0Z-r^WwRthy^}oE9=V_yDvV`e0 zYM7|J#4+0|8NNZwgoBCSH(iIT;=XrI%L{$6?PA-xm%7elbToAo&aJJkt?cJvv9U0B z)!Bk-1}&Ph>AU5XVH(C(?!ho);Cy?lbv-!0FDF58uLUcXyNaG`>htZmn7b3)Fjm@7 zqT6(?VCF0}&SK$Cu(`3(y15dpwXojQi_7O1&n_*$x-90^iq&>Bxyp4oSs|o{;=}5Sq z6s1Y=ye6GkJ(UNtTHw$jE9v+Vt%)|Sl+2rsjM(#|G%3^@-itU%xNs5~3u1;_%tm>@ zrg1?R+a}Qi`oIJkC*xk9WhmR>8wyy#=ROI<|VFG>Ut=w44?nyG3rtk9s6PGMTW8H1zcU+ zc{kZlrk3-xEC%C;bk~s#uI&rSmhu5o>my;GUsHm~Od5_K)TFq;4dOSH1H3wxQ>### z+||4xJ>+mo^eXdY3RP>5m@?2M6L|zf9a9vZ zVtPdImVMgt!Bj>I)eMJzhdI2Thl6CkHv4DYEXDW{gs(bDmYP7e6sw*nI=Q`wy4q|$ z#F=`%*{PNrQ>ZOGl^6?Jn&sxuK-fwsJ1HFw0~_wxLvujYuRnn0)Rcdc89Q-yQ$} diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Manager.mo deleted file mode 100644 index 8688dc8bd607237adef26cdbb70a115956874324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72881 zcmd3v34B~t+5d0Z8TNgVLhNY%^DQyGk0*K-ynIuCdGjV3pHYhHL3n~gC z3L>H?1yONVTu`*QBP!wwiVK3c;P!$${J+2FIrq+;B&~gY-~a#fpHFVS_bm6^v!CZY z=iGaLvhNPpM*L3QK8g;5j~o(3t9FQ@_sx}U6#Z&p6zvZmhx@^&;hu2cMNx#eXevA$ zw!nkoLijBBTzCK+g9pJkK!T2Lg*(B|!(HH4;CAraa7Xw6RJcD1_76k(`#Ibl{s!&} z{|fho+b#C{8~_i*d|cpssQ8=@72j&Ge;HJKu7gU?2cg2f2P&Q4hR481p~By7iQ69m zbC~DCY4A+g3j1I`yc#P1{tDaS0ZZ`<7s9D_-VK^{5n*+zXNxIKZkq3$D#7&FHrvX zKHKv>hPtjLnA?N-1So%}LtTG1RJmRN6|WJv8>~a+&r6}o;k8ily*aqQ7w(Sv6Hxho z4^%uJg7WtyRQ^8=RWAFj@OV#$3b!5Z2v3D_p9g2aZg@0&5mf%a1Gd1spyK%mR6hM3 zDnE8u>Gg0wI0bVXY=y_eJ>i8=^=}C3ej`x%w?6RFV1Icqzb5c%sOzo^?l%VecLn>~ zgZ&4B{l}p4`!j*}K&9(mI3NBL_QIoAdHi1mXJft^cEHV0@p~HTx*fVa{s%+l*K~LW zoC9^A5vcmS5$*+F3zc6tz$4(DFoxd`{43lW^C47PmCLbE4yxYW2Gw8O3qJ_|2;U2DrV*6|-z7Z<_o`y=#PV4;oeWAiV87lvl z!2MtkRDZf2s^57dY=?KktKeghsuFEHFN)|wqA$ZXxX<}sujfJaKP5N^z8-FbpNFa^ z9T#}LSp-#|RzsD;1#li5g!{wW;H@;6yWj%Mg$q63-vbryPoeU2zvp^Bx4=U&9}AVv zMNs8&4pe$BfYz>p`=#&%?5}{z@6SS|{|UG^-0pdy-9p8)4W0q#!sYM<@IZJMRK0!x z9s&Od<$v#sJiG&;;&CigxO1VdTL@>v=fIipN~m~#0xBKffd|1Spz7^T&-Zj43=hG4 z43zzuQ2EsbWnX|t!k0kxGdIC$@Ls5P@F%Epe+H_)?3MTOItd<*`8=p}tcU8yu7wK! zCaCy-G?>2#mCrwd^7km*6aE1zUe7?)?|phay{E!AV(tq31ysFX-|O|~CaC)H4R{v( z0Xz*J-RI?Y5mfu=hw2BehRWAlq3ZVsp~~-0_&RtmR65Tucs>-N;`wGc3%&y?UEhYv zmq+0a@Xt{3_$ySoZr|^Wq3YWiP~mn#<;U}b{R^P#@#RqE`9^p${0vk+{1;Td95&$X zuN|r%>xL@l5>&b_hbqUnLY2oy;aqq>Buk^620gq%sCsl2oCa@&3g;V8*ZmSIecKm3 zpALqK_f)8In+>PJGob3*MQ}%W3ETy~6w3bE$rQ1QMRDjz-oWBA3uM+0{r@^YF1b-y;K{8|QeT`yF= zjKSsbDya7G5S05rp~`9BlGm#kD!$X9(%S|V&oiLnvlhyK9jd%9gQ{oOK*jr3sOvre zl@FhTN5O}n{67N~zrBaO{Evk>%%?-eYe_Hf4OF}iFZ=k>0hMphgX`fX@Llka@YV3zinqHXM!f!95LkgH z;(j?)ygmg_gpz8BoQ2xIJ<^Lh5bo?Qh{|R@+ zym!s(#i3B)Oob|!nNa!G4%KeXf@*gq7{fP0#p@$b_2xdfFZ?Z3xjX}P|AXp2UbR7m zI~%ILo&**D6;S1M0o(^}fJ*-rfp3Aj&n<8!yc?>1{TeF1JB+${ceowq7T5x3LZ!D0 zD&7}D<xUhfUk{hUufk*Dz6cGf4`;yR;d7zldnKF&-xln@0hJH`g4T}5 zJUwmj0PIhJ3U4J;eH(*E!%cx-gYB4~fJ(>Vmw38c;NFb^nBl@4lD% z_|pn^!u))w>jt3O>3XPgz5x!x`=H`|@{2v*D-+z55uD}(zDQ2BQ|R6IWlReqm_%Flb@5%Bx)Q1}#7zV7o< z_cskHy(dArcR|Ht2rArb;IrV3Q04qdsO#^C%CASEuKy=gdpq!DUOs0)*)M`BpNpW{ z;R|34FAe6mL#6k2sQZ5;@IH7r=EtGJ+4(Y0&s3=Uw?d`!+3+ZM4pe#6p~~}CsQULg zsQQ0DRK0ly>V7-F+_^VY`5XdOE;FIxyBO;F^MZK@&cJ*rRJm+|y6$68>HZ?r^}h|= z^>WX*7I-A~^P$SI2P*s#sOv9-O5Ypd(eQmx>HZc}xjg}O{T{FId~1WpU|tF3zXp}w zx4`4!2cY_ihoS1@-mmm>nhtf}GoaG73M#*Q0xu2j*FnYWcBuP*3MyScgo@WwQ2DU` ztK9w!xC7=30xt^oeQ+o2Uj|hVUk!JJ*Fc4TJyg4V4?GS&9Nc$%wfo-(>iWZi`Dmzm z*bb+|vtSFXLgmBtP~qGKb=~7o>HGuS8E$`tr++u7dU!Zo3THy)Zxzb_8==y93)KBK zL-m6XL*?IZ1D}Sf|9ij2uWNx*F`o(*{&S$pVF0S!uY)R&O;Gu87gYQ=L&f*kQ2F>r zxGQ`LDu1Ha`uKDbR6K^@Fx&|H;iGT>u6P}741NqgGljTa>FGP*4PIZK2iM{La(Fg; z5S|HVTtyp#15oj~4ITx*2_J@kf~UayuOSE@^KMwgd>=dyo^p-%OIO1^x&J1( z3-%v-lc(#mumkgExDY-K4~7e__58UIsvTSmRWC1xd&8Tc>h}kO`72QQ^Ft_qzkn*Y zr{U>vpErAXuY_tRYoXff3!(D)HSj=qHB@=t26f+0L6!FdP~rUns-M~ZEq>iWP~~_8 z)csqb!aWJ9eJp}8?12jBg zRo@}KZDP~{401NT)4^ed$m2|D90zz6vVepAUD2!!U-U za4+~~csSeyRUY@iW8i&I{{IZmfd7C>|Ecfs{_H$>GUn@{;`42&cKA3{{yhojz};{6 zaOc6fn3qBMyA&#au7HZibx`TM4Jy8$hbp)G;P&um@KzG~OSnJgE8p+#H$&y;$Ka0e z%dic811i4%fC~4}JG`9d!Wi>1sCsrW+zGxC?gFob%Fj1Lg?ByN0p1ks-wkt^Z-sln z4@0HrZm4+O3zZ)~gQ|ajgDRIpKH%+eE>wM63l+Z-R5`sCD&O7)mF|x~`TG)_0Uv^j z?~Whz@TS5&F`ouiUS~non+kj}yap=#eLv*m&TKdn^LbG9`7*c|-U#0UAAxJ&i$2Vn z4ZI&d8{YU4=GO2hFb@}g)XQTNR6g7u__4sdq3ZG1;r{S1!G8CTc{v>fm7g=A@~s^z ze>$Mjvl^;AdZFsy#er40E9Oh!KJaq57ko3+^_!r|>u#w0`x2D@A3~MKFQDT452*X@ z^l`u6zEJr-70TZ!Q0`q&@xKrr0AB!AFJBe-Ca8406RLh~f=c)2pvvJlQ02APC%pWQ zgNo;BsCrh0O2-B$|5v~%@cmHz#Rs7B;~}W~{01t0e}KxLr-J!kf!p8d_PYk|4Rzf? zP}dz6?2iieGlPA5us;DRzfXh8rv*^?xDq}a=HU>$Ik@lnNpJs$K=lvjK*j3~Q2F&{ zsO#Sc)lNPK`P>ARo_9mlx4Ym$@P611e+{R@ zLq6-_cfvNzH7NIYLgnMP;IZ%*Q1xlg&(W8{IdBtv5Ke=a-5umm*n|0-Q0bWSd5`aW zsB%~dWnY6wz?Z|R@Md@*yeF6+gePMD7kmet`vvbu9)Mk#kKOF!zzd=L-2v5~JpvcN zJ?=3PJUR#Njrqq=_j>}WeE0aG*N^?+8JMR*#j6*7bqeu=otV$~vb(aRKENH zZV$KrinqU=q1x3{xHFsu4~M5f)%&$j?LQBd&%^L|cmq^;Ux$k4Pv9Z&_fX;N`c=RG zKJYxutDwTY4XXZp398=x4k|u-e9hyr57d2QsB%9JsvazWO2>KdSom6~`+Xd$zI+SH z-{Vl}c^WF-dwkvN`yo*6 z>iQQ#mCyBXS9m8>yZ8cBzWe}Myx{JbpN48@yM4pU?GPycGhr*72UVX+@OALzfqUQQ z_4`IR7yEl*4o2T}IdC_q{8%QgT z-wNgbL3k$o8B}`XZ+rQk33tG}814p_L*>IdD1YnWUhqwU?}mF|{%GJApsxECoCzO- zivLdcd;Xsa_r`n?JPwXPh5I&m0{j$IdHz1wZ~q;yS5u+t|58|iuYoh*-=XsP=m*?< zDm)Bx4^%yT3EUsv1eHG@4d%O`^7(!!|38LG=ii~~`61tR_o-0nZH1}_r$eQ8ap3B} z9vEXk5_mO~{|`g;*Pnq3|NBto_Ea$M^*zszb}0Yzpz>uIRR1{&m5hbTO z+Sh*H_w*kG_ru%<4}_h;{ycaN<}y_Mz8fmPe-8JB(GR>{?FUuvheDgSieB-`7Ch_XcR?3spbf3soOK2vrY%1Y2PAQ|EMe1jdz6 zt49xFF)9R8@6_c>7YWF1t0kcW!LMyU90g1Y`Ya5{Vjo&u*o=IMHV;2_lf zM&R!7GN}A|L$JRom_GznFFp^I@4tbnUpxKE>-%9)^>P+eJ}iJUU>>SHyap=1Z-*+M z+X6oV75~pdh4)=3|G$AMuVB{n z;V!TO<$oj8eXj}T+u=!=zX*4P|AeX++x^D-xxL}Bm`{W+htG#<2aiC-cl+OZc^?F2 zei2kXx(dqQEl}yZC)oc8s{DTscZKoqJf6ow<^LIhE1=@}T&QxY!yJ4iRC=z4O5a=I z?(qHaX!t336#NO)^;4ek`yULIf9+81aS5CO^KcLNn&5sNR6YJsFn=4$|E~jg_`TPM zBj8ThFNN~I3d&yv?gp=biqEyd{7JYo<}X6|`vyD+J_dFDGf?q9@(-S#`B3p+1(l!u za5{V;JQcnRDx4of<-=cK3(Wn|?=u@JpH2;&50%d4Q1#$^sO##1uY&tvek+^?-v{@G z_Xqo51p6nU;_<9MdHyYcihl{l@O4n-^nR##-wF4E-+-zIKZdFoe-7q-|LoVz2wVo` zesSOxQ0cl2D!;x7b^php%5Sg#@^DXqy5CBuc=tk;cOAy?N;nnX0r!XBg7WuEsQWzy z)vq7$q_^YQ@EFXiU<~U}>ADu~0N(*sUbjHCo3B9C=lcSG0QbcFb9e&$Bb*6ap7L_( zg7SYpR6Xj23jboLeq(E|^FHMk$V0v-f!ga^Wp!NcIaQ0?wfUII?SsxunPT5E?il@AZXqqy!*Q0Y8ihbbnv9uC)Fo(eC78{iS}0jP5MGgLY5vLn~S zS#TfN4G)C{sP^(wsC>8z>iQc4KLfikKL~Z-)}5wUKXU@y7xQ^g`8)&`w&$4cR|&k z2cg3KJyiX83d-NkyLkHcgQ~YNJQ5xUW4IhDA4*W+ya-zTfoEdA9(KSVz?0y9yH2t4 zJPRrxFNMd#>w^7exD@kKa4MXan_~4Y4==|22B>uW9qRhMsT3{nIH>!d3qJ?@q2k}N zyQgaoRQa6>74C9ahr>|$|8uB*!I%dLAVTl9jd+@ zz@nkTIRoxLg?0*W#JpjzDb~Lnus89gJ)8xO1svo;K@V4N72PD|&KB#u|ZK(FP8jzNn;u)y+wfCW+y+QTYr$hPgfveyU)crpV zmCoV|XQeHoOBWAAb)|hW~)7*K-f^d{_b%j|-s6VF=3oRl)rR zsCsY*r20jzB=$*J@VgJbAHEMNuas}2c=|nNs=c)u(;7f7*1m_RqSHBN% zJcapLg!jha=ey?O^YR7QZRYqBcHiRY=XhDT_OrpCupGM)_$&Ng!7+#MzKQua!SC(Z z>Gwg*1L0ieYl1t&b3_xf-_7tD&Mx6tpYiLi)NS0~$MH4XdO4oW`N{Arx(;q1@<#RO zXw3Tk6}Lyid5rnIa4xq2-1O6Ub|U9{;-)%$AmO|PKFFautKY92(T~FQAI^lc8|N?O zdb<4RANV^axINDKtHX64#qBekpU-hM$Mu+J1UF$7<{OhRIoI#cfjZyB`SHPg3I1}# z@m+8)xGTrqxP6M_uh>;Me#Svlik=PCe%=Fr!=c|99CVA(wV0=JKEnAR=YQwC055|2 z4RFlDd^N|1@uU8AI_HSm(L8tp2igzvpx4w;z7=yNu)494qjvF-^a#@Uu5&{VE(q z&i4%de-f^jTbc8hz?twC{IqA>o{jyv*qs#YPT=|Uqp!tO)nvgLor z;%^E^^7{colZ94Po4a`GXvnVkbH3m)H|! z`)NE*epT$-@ON)w0Z$9(8?pZd$2&1gmeKDuA$*;`fMYu5n_-z_Iezuq4!+q>Z7!hG zhl5$rK8KUw#a#Ok$8{WK>~4YY!~QDH5x1i?9M9+cK#nhAe?R;k)Nc;woBTBT0O!|m zB){2Q_czSHXn!uLL`D;NLW^I~KbR&bQ-yL&p92*!6P! zkVC&b?q@;ChcgKi5j|>yKj4~oajxG-IKIJgIQIJO>xgcLOF60>uMKvcT(d{G-wmAa z$N8NcX9T-7!QXq}PdI+Y@par@65N*tK8^ixTt7dUF-ETr=O+=5D={B|`xzWxDY+&TuYVfZIQ~W_hstDSRd7e}?csA9!pC>$AB1i{nxJy*RkN4W5Ht zFh(Ea{1qJfO~dl#@Nbw;CX5Z7f1E=y-4)n9!O_C`_o3z$GvI1C$f4hNxqb{g{mykn zcVPY#_6Kp?#-ZPLusekF<2eq&+={uIw54RJpR^TC{V;@%Uk)3x_ve-q}vz_-G4 zWXbQR!OuK5M%#sO`mw(NzeizyA=Ixm_&p8t_8fCKb`SpD2kjBNUk86X%3nDDI_LUH zPJcVc(ZT#J+*fiw7rXZczpoB%cVVaBcd);KV;{~D!J`K_E)9O<{v*zxghTi_o%2&T z-78|oSNqo97n9QSbC&2bn07UTaQ-2Vmj`z6O&oZkk24tJ9!zn$M*xwkg6Jo-8Ft`okR>E#A<|@Z?I3MNs4afByZ^K=`D>#nh zy5zSM`{#1Jiena*U*Nct^CJjj7XA+A{EZy?y%anB{)qX<97WDw#PJaJdj+@G!N;La72f4kLe*k_hI)E{M-cp1Wycp4uk)N`69x*HQ4RT`K}!A z=J*J1zvbA0a8|?fITqrtjpKEk>-P?h*Xe}csa&Jq&p9@8d;#+gIyip;Je6zCa-xsbi5B!@E{Qe|xR&Za4c^|GlJ9wNAr-k#+2S0Cu zf5+c$`1=R^Fz!b|{oak+6zsFVZwJF3uqESmNeFKh_OIYL6LXz#9)n*BZY_ab@ca1r z2JY9uPjQ?U?)kgGHG$v5Z6n9qgZX+mhPea&0qU3Id>@XF6YjS;Ud8$4*ng1YM9y!- z?g7r9=KOSc59Xh9==XY#cG7Vo$0po=fcZ;Mzc0h%IG(}pJ2@`nC~*9fV;$~q;P^e~ z@8`ImV+6l{fZ5-dgZau3=5_E>9LICNn{ay$=f%u54`ZIf@xx%ZBrpeO6Yzo%cpv;R z{`Tjn;C4r_@8x_QcKW@`5#`|zvHKf52fhrp;qUjsUHBKrGVJtQ3}3)86Th7t-Pm4GqD`0RxU2|*5jUh z?@*<`zaz%3Hd-4gl=}*OaT~^boqroD)uFh*Q12a#`wIPqYBgVq6;5@1zBGv|m-h1{ zHcwcCw++6W5A$E~}Ba z8PjS+L}v>s!^5NHVsE})tdtY0a+#dL951R?l^XY$+AhwMDDF1Sy1SmQkJ@e9;)VIb zFxO*Mt;bpai`Ey)_4w?{fM337W3f&g%KgRaa3%_8=gR}5%D(PG$)n=lR~G74AlX~3 ztkjFWg>YZ@uT)t!`c>V7qxHD2vY{N;2MclUXtk<1^p=XCy}dnns#iwH*J61f_PlG0 z*OUtzN4PzOs(8v@=4Snt3vsQOG#E#QVP3OjgIC8<`1Cwd;t*QjN6 zza<$%B`8-mB;j+}_&em*jP#Lh#5rFo#i2^q;(WO;t`_RmvBafb&6jJ`-kQZpx2cWx zl4-U6(NbwF&iAR#d$K1uHX=R#?#hq}-nSu{Br61}_)Qk7CA=QzduTkkXEHcXG?Svs zt*eZd`r@(5Xk01|nNQN3y&yl3FP7&ip5sESS;cG$tgBSW*9vhdKU$`-s~{It%Jpic z6nEvzg;Lv@oqfZ_a*-?RbRqHTN~Kh5JF}afK-DkKkBpQGM47Djz!k#$Rm)Z`h->c0 z@_w7+(Fml^+mb?7@+?i+utJ5V9Gi-2vc%DESjwh%_N~vCdkcLRj%zS9hw1Tfp*$K_ zMyv>I&y+SI0UEAnG8O{1?8*D7iqR=TupD)(Sy1=Mqp~jri8e#3apk6H<*F9M5 zuOGLN_jnD{p{XmV(l2yGEsN>o^`9y~7_}_bK+>|Zu(2MW8JLWqGFMvTa$$qYxGIzN z$l35$MlGwBb6BPF6nEuoH9GS?Zq?;uaV>jASJZOOCw|Wm)%n^`(-o_u7Hj8G z%NkOqT1sr!77OI#`Gs0*T-d0)(1}^Xr%$U*r()6>sLIh8>-0V}7(|6)U$&xe-Q!5U zKG+_aAJUXBRSWq(>b#F$C2rVo)P3@0qEYA_ty^!YZYYfA?a_?R(RxMWYA;!)VTCp^ zGn%ocJVe8>Gg778ES3v>IFu_48?}11=%atJKQ6prG+&yDGP6B*KHY4uZdSG%Q8YeU zs(B{0*Se1OXjVK!Mb>FWHZz(n@nm+~mmlN*AUy=wP$&#VvuByhtQ1Hub7VEgZ06vA z&55!((QHn1o0BY*T6B8cG9U3x?5Y;l7b~NUI?&0OP##iOq6jWhOQ*R%due63pnAf{ zGVB9o&*%WD9;sC8HKJcr%ZPg_`D$O(iG5FnET$N$N(Q@#-KU1iNuYMJKpe^h~Nvgo^gqBU&j>ug8jMCYs87 zON(EP)M)o4AA82q=9;mxb`;DVE+3bQ!=$;ev6rEtaeW76HC$mh+>*1JhK-?quRa

;TDg*jvi;h`@JPMZ9c}JbzKPOE3>9}Rhxo3AwutmC~m!*3R zm!;kn-F`ZHGN`%3CzmwuDA2=CaH0r*JMYu&Zx6g z(vhZ-iD6+RU(MH<7LKzY9UgC0uh6!LpV>3)E$Le0vs2|pwJ(U$joL!AOQo#8YGHt0 ztwa}Rv(vO%B_3^-t6(&etI^i1r^$}2GzJTk*^PBN`5?7ehHNDc6a4?XxTH}CHw<^% zYC_G=RsyEFhI(TIetnP$ejzLLq+_iO>pnVYev{Aj75l9XB18tMg>IVqukNi$(UA~w?(&X18n%JjfS8$`A zX-pN>fVaUrdD=9Z$4chB+{#s}7j?wx(3fZG=_&*lNQz|>YU#PiU){laF&Rull*zXD3Z0$NvTjSa4Jj_L?ZvK~rTy8b}>#(#8QW7C4F`udh-9Se!H+yD`p2rlPntvxnLN~Ht zu+Tf?l1doAa&&0Jq3tc+#vLu=ofEZ9eLoDs?3~$sU^IcbYqHOe7p_N$Aq?qAW znjj5{>d1#ptwG1$(1N2DEubxDinXLTknb6*7ii%g2IHQEU))eLH7kYSKN(G?TlXhDlBqSHaXBVyS=N8E$_J&4GR zOhoLgxgbZGlZtP&HfHBGrpUidER{Lsuzi_%gDl zN&U>U7=-95HOK9h^2u6aUol@o-|uzDRa8_S`bjz$lrM#zwjT6@s7(uAZLD;3mr26! zDIn6ehp=2XrN(AAORQHdmzDRz$<&Fu$o)<2A1bYh_L^3fM*FB*I7?Y(|1H*t8yj3@ zMg<`s`Y3HqXz*!IZWdwjgti;hNZcvyjnt&g+AA?Vgq9pq31veb0Z}uHNv;Tmk_eOX zx^UE3ys*U{w?TeewlKIV5iOar2+{CHqv}xE!0gellV2Ky z>xjl#Hm$BTdbr-C{bkFW;F7+D?qQ^a($^KzbONg9P5q2}t`5^mY1l{{p+6@sR0J0| z3si4!-IiDx)aNImre-ckG`Joyav~Xd5%-eIGU2-Zv4`HIP$<)?Lcp3PE?vF4D~+p! z;wIPbRSTAPPwH&hY4M|sxD|ELR_sF9%4D-mf(sU2y;4ifTo+VE#^RPv=AC}#>V69! z2Q{*w@(NyMqpm2i)qP|p=n+$jsVZ@$%htp$@#xm_I>BjT7&gjCml#C!VN_N{l=5k4 znwJk&N;auY7w*vS_fuf#5WGRgL-g(&2Bp0sdOm(qxsw=$nEt&j4O!>vPt}O# zpeDJ#d(rA;&mNRcb^Nuas*Dzd#a3iKM0OjfsUppH^*$+Aa^tVYd95aYiQ3j!H zUzq6a5}kiwoV0}sZEhh0y=Ed*Ud?4ZwXVTnx?brmGTesj$WEqwR5jgdqVWj2Ox4X% zEv@awXr&;ers*9T1TOd zV{yF#Ph^l}=)-dmx*KQe&a{wVjhxK$p=5!NW)00h7bNS;zLmfv@`fdC9>b9RL%Kt3 z%ABgbdAK2|H91%$D>Yu5fEypKbCIqOe;A=DKHI{P?6N$_R zt$56|WMq&9jj-#YpDh$*afqARHo6*C15L#6bZf!RrW0w$5hfqa*VT$Dw|^6UvTPnL zWLS_yf-*qmkm$426E${E;Ax8vuE6TItsUs#B;!zTD?WL$6|8gwNo>7qqoMZX>s&WB zPyVGmU;?96`()xzWo7kmi>|gNsL1=WY-S*zm)lZ^Tf1h)YKiaZG(V4KjB&I{*_)_T zYV9+*gO&w+2TiKgn?$jg_2*4jLVCEosf}*&Vy)32RWe1BT*=0raCJ?qgx2swJqb(b zeoOkpFbIb-*-$Q3^0XF~$aE5Bzr**qV0-GLo-RDhjO9PwSf=EuzV@bV$GEa*(H{#(HVS$)-8zN4$HA(#<{NG~bKl z!sLY&Kx8x%lzat`0U=tX224IIPWRKGC`(nf$qb~~HFPSOYl4y{(eO^ZEOh4+JZNi| zHEHj+(#-*hz`a<@;QD7fh*Tl8M@Kus$Qo*lyN!-a?n1j&;AzjvSk0`ZkG43#JhE6O zfUxgrF}0n97gbYCiRzP~)%YCHDa| zbhZeS%m?R1i>p%SQ%`N=Sj_m#g6(2cTqnuLD2 z+SZKnKx-Vy)a<-wS$uBSg4o8^^5}360`rmrJ3H8F7nr05GxO?1xJW0C+EqnWlB4!m zSWkg$sCrDl*XQfn?R3%&FJaaer5cCv`iN*rsnSD{TV}T?xf-58LQ2(TDu1QRGqmB%T2Z- zKm}UXm2BW>*mrQsCJBZf~UAi&-qk z6P-#sj(ysBgQ|Nge)^c`7W>D%jwOu_g$PMs#@5IR`*YBIB7rrwvY38{9LX`=N!CfU zni4jL$SX}w^D67hH=r%8N~&XMQ*3$)IW0Zng(^&5co*Oou*pWZRZ<7hMVbFGDhaDa zxVXBE#5VLHtvTcbZD1nRY&i;ZOo~ej(o}zG3QaA>ZPgZS+kxpRawaMI9TX!o zvb&-n6^ZI5jZmeMG{H2EXhs@)5nFRadpe06Din|+Ik9$|RQ^zJYOT2*7Nmn$OC-1R zBqYt21&w?e@v}5Wwgy=u5h9vyNd-U$6gs0;u3`?&!L+_II>6qzbZyW#eOay%v~}>5 zFTI)+K^~oIytxR1JvYkHqEP5Qj@p`^^rZ* z$_8Wuvt*%}?6nM1g-J?~ALk>6_nVqfCMAUS5Oz~|xnH`}>jrR4iQJUSmR0bcB+oKia7$v3B zSdrhDRvUUulX-hawR9?{;_&EjI*7(v^-gVl_zZTwufwM(D||yv6qw9RgRz#_vxcRv z--WM^Xa%z+-K;4B+7d|mES}*!vwb02p?!brwY6&nb7w}r6}}-MTFGLF{Zj{+xkAmE zHZm_tCUK3$aNGBkSqYrr!xf%%7#V4NVmOSeX@P1-`h;Lo*VL(LLSm9D>h9DvGf*dC zZRsAC{pxK@xwn#R;iyF`D{->0qIqf9Cobz$wwJ*&K3xe_PFa76#(X7-mV#VbIopem zjYhd->xxY2h2|D+Ll>g%wZ<*V8|W8=N{b5T9dTc84EbG&?NLhi#I zHPsY?bRiwVMUm3hMXUYec9yVdaTO{h(@&|#N1IR$>r^ZsYU)61)tUs}(w59Q)3dxy z_FPKhu38B1K|^TU`b}`Og$c&Gb%h>v3&EJ4<{6T-WmCyky;O76%-XAZ+G!9U8_xZD zjhlMz0F$JHTC^&&k)lRebUD(uitho->>mwbu(7z=g>j4#E#2xm?m`<}6A>UIpyy_g2drh&ZP7<2 z^OIJJX3M)gW+rjctjsdPw|uCk5$9B^ z7pcP~r3ni+A-rVH)g|!|&@>WC|~ws(?m9K8&+gC5&aq zYB{YcGhaL>Y!iu+&F|-`>tOGLZ5*YTSgh==7X9H2ZlK;Z(I7qBHaFwUFjGTTtVVXR z-@rBFS(`*drB2QVmEPWq+;jWJVfsfpaS8R5K-Su|+7@y{qeu}+Phz%>Y!74AfK8w; zl6~!>M76J5wEG1U)3Df7dF46{oxL-pI>{EF9_u#N1-KsGLNPP?E4DSC>pPG7bkejG zn8*(2CK{`FhBoDxnrkM$HPKNM&e)og4VQwn5#%=VQXhS^o-VNr3RB_nDn_MDyM_Yd zP>T|y29UrW@-5wz;Oy8EpjhX3<>|sTp2b#9XqO7b-ZjL~6ZdfEi22d(8izKbK zO1_1|i~&6=#AN!HMO)}grg7UJ|oPaoww%vjIVfXx0dceB-sri^oG2z3o1 z$d3s}HJyzz8F8pD4jWg31q!vq&5H(cs<}!e&L*FyuJUZrA4MTFt_ZoI?97Xmsp&6d zl_(&B+WK6cH$<~B(M2JrPGO6e>6z1MdNSh5N7N_He- zE2)_g)TS0Kjmw8?B3J5SEQv zGVw$T^(Dk^Q`UA6jz7N{*`s8gY?QE*wJT^|@Vwgp6P=scqz%&9HZrmOxdy@m3`uxWWUu>HIpRw{nlG_4*A?DA>UXrA%Jln(ybd!88+S%YO02u7?Nu1 z!P#1s#y~S4Qq&YxS#0TE+v>mh1_(J#aSnzcgfcC$qDyQ|W-%LUqd~|Io_t@XkMZ6& zq;+nBQ=`UNYi+70X49xA>WXNi$UkbM7O-w^-2hEe&PmN1=ZIF?HU z6LpWEjEz`lVkV&h)-+viW;X1#ofU}iyeoz7`=uEjc|4RjY9UVQ2t5L3p`=%Z#SLkH zeH$Ix*?e^XVWM28&S}-x{)c@TvS20JVG?k+Ml+8=dEB!=itF?o~jpU*@4k5ds>#ZzNT~J~2@sc&m55Eko&_DFrc>SgA`BYodicj+Lx?(L|J$>57FtwLZyJrgyLx#MorH zv4pRy!$m>Ww}w3#t8G9EjoY-ss{a(tD1)oNZG;|YuI=>joI>DG)3B}N)7Wu|3XX|W z`y_9_pkk==(EAa>n=kxs?96A)$KR-u>Y*9Ac@ndaY2vc%Bh6O(+)a5>*CQhZ+vC$} z>!cOy*Qb?%79n!XqkH;C6n( z33LD7Kd+*~8s9Hbjklm1Y*gB`iUviuH3-`ltHqdP4l;fhjqWzV6ARGPA*(;Eo3gW( zDGN_V=Xp5EHhi#|bc5D`SM}hJO{982YlarHXD0ot-Fzf@PE|RNY>>WSDcxJ+C~5rFZ9elS>2B9N6|2(5%+8lf@c2%L%^6tu=YEN}3(v@}LC$ zPjiw%R0C;dhYIZx>Bt|n(%P8aC-G*>iM(A zdo&nlGBaU++O9O#s%Oj?qG<^6^v*LFp{_0koii*Fs^45 zP(z{uBzaAjId02MxGR;5H`~nf#7buH=jeR>#d5&5I5plw#FDWZb&>a#n23SoP-i)_ zfKcV5PYxfZ`P0-l_Vs|+76ddVBaeo*oy#%u+t}1gr-KfHJir5zo%)=M_3*P+{n7`y z2+WtHb8O!5dyzAEv5lqJWR=>d(e!A47I)i5pt#^ywh$ibPCK0Mi$P}IzP+iEV!R1oZ*$W5Tex@fK8~uoN zauf%*V%bXNvc`8D&vG^T#mKCoAkO>H?gamI>-S9T5#F#3R zGqpAK8y-=z$tC4P3nO>w;>|;lidm@j*L;Pp-rbt(rQ3z=Cb~0u$-0D%OjahQ@u-C?Yb;+bPQ6Drd zdH&CWvPYP-avFl6J@Slqx_7ndPHF9=#+XJ&9dWkIJyGL=Xgnm9^fX(&e4?V$2Ndm? zwD8TC1l8o58wXXJsmf|w_fMx~PifKfD;=R1%3fr1PJ1G21_O#})Xc`17Q|7BO6-sF zLCHG2~R2Hq{ zIayUFiD7>KCM#P}(^HG2Wh`~^?y8Q)HMv9BN{CdI1c)ChU$jn7EK?CR>L;(K)Pf!z z>6VHm*YrYz#-za|SgN?{{Pf8m3z%-(iE}n;sdw(zj&1F%-Jro03mS?tLqRm{YEp^j zQn|gqSSa-=G2!(y9h~)*y~|!#DA9%5UhiqOsnI$GoN5bd*$w0LS@UpbvZ?0i(f6%9 zrW&Z4cp5gk`oKRx=dVqBHVZ;YRxM~Vvq{X#w5A;M?uO)L+7mJM=Q}5Mo)aC&NqxNPJA0Y)TURr}M5>Kxudq9~?Y$E`p1Etk36Y8T(QJ2M&!nkrFErhOf`n0Z`n;J8`X6hC58RU2Yc*=e0L^y5B*;u_{m*9r=%QAWV|~lc-o?XwLR-)bUZFR`HNr zm}{gj#;Y-B2zTtX$zoTwMwoA^4H9IM0ePF>H0GibjqKGHX}3mZ1>K&HtDzd!yjg0} zSmZGRbq4fP-Rc&64vVyrc(u8>O(JNkUIlG;1vQ^XOBT3VC%nzARl_$6ANJ&MEf>_` zHriya^yi9`8Mlr5xSfBH8*BP0k;TZh8xgxhlhwQA*qya!P>JWzI+-5L7j4G(k_IFux;XCq>NlE z+*8?Tg%ft+>Q$w__t46d`HfnGy}2~eB1@R}%Hny_q+KDa(XmM+(n^FxSsyy5Q%!xl zInROqcSG_9#Y~-iHvzdZ=4~M;D@m=-{rmW+u#$3^7_*?3Wa&$7M-9(jhs2U*fow>Z zIcrfbyO~{XYwQqY>_=fP3W?d7f46Go}`{G`&dd+tiDih8~w>;>%i5K z(*5YLn6BUFYKZyv*OClf@s zr`3x>Uu)37t5c~-V72<#ypTzKmV}d=VJWM!qlTwQ{f)CKs?m|QFt2Cyp4k*OPiADb z%*hk^lCjutNH*$i0%S{gehw9}!~&8N0@SIpELk~e3cRrbXswAy?ls?_8I=mW5`^*% z0)6rvbFnPBn2qqG+}d7M#=?5y7@jOmjM6<31Oov6TUAoSNWf&o(xn|MR!lI81|_QeS4y6sJ5 z*&Z<|HN7)~Qdz5GR78Bij9HWz!XZ+hrjMF=>T#8sQF=Z1 zU~(8W1~!&{wXvGkLA43{$?O{kD*i~?O`9lMnQx(&scAbf?{PBO94Vcu!NWrA2;>26 zJuE~G3@^8?$u-PR!;37FEjJNUq79OMmDu$4Qa1I`EGJ4H;TWH@T9?%mD<^2ZttvXXPf7l zx#XeLHf>ty2=TUOFq8L0+HQu^eX7GqyOl6_mv%n4V%dsCjeMBhK1=TzM=kqOfUA!_K znSW0EiQM75wyug^THZFFC591}4Lafl9T#?2doQ$#v1Hlm3qAfPx1Z4P+>PYbTUg+6 z=!i$_{X~MGR;^ln_M)~Gt4T-)IXvssxu?!KY3@mO9}BOI_@2_Xf*17_$mhrIcot3w(MGGk!0IH`x(84t$~*EUS* zX-?MDKz(RZPjj=LhV#8SK0Q<%VxI+jh}$$0>A}eK8%0BnZxlu87mDcl;-A0t8a`0u z|3~|3n>Vp+Q(_$_8Ou!QK;*33GYxt4tJR*u#eIc{J-HJsV?v-$7-syL#-oeqE)bVk zRkBYPQ78KJ!60+U53__}UB6jlTi$$&9z}4aEh4U^g~nOrspnBX^fSRj#%-HEVs!E5 zP5v39!HWySbi~9hnpU%Uo+d5kEsBiNoy$^7bi|6xR0VIC5YuDH^o?O`3Un`ATY1DcOL)Fcj z5F9D6#JO9Y8{=2%e`TS*e)A^YIoW*w6$R8tC0%KsW>U)6l0mF&gd#`+JbM&<73EPL zRWN$kDju>bj+&s4+}o6Rw4Herz1EOaWVU5Cq;`!y*hGQn)5vpG8=kXq7-Cl+LX_$- zBbwzmYkH+rn6q!YWIW~jd#YnZhnI3T`=Q0tr|XpoRVEB|BwwnUC4phs!e%!gv1tlC zx5{4C#T60(f~H~!fi7md{z!H6oyal@$VNgF6VOOt*T4DBYE26n#eo7l9Z0ZlPtZ7A z%uTRRruceu;@rRa7Mzk)QV7j)NxUhAqkT;tQPYgik|Y?rYjaKvF=d^Yp=1TQ@1@wD zTT6I-qale(VG^FD$i9rD)TvmCNcPQt`o9yeZfkI9#Jt%N zv7~ex<(Gu2d}vgZY$}nHsov$$_S}3bdVCa5o--|_s$JOJhSWTcqMDaSM-Wid00^@w zioh78KCRNDNWOpV|zD!Cbp=|hJkEi=m@nDwNwG^!f5#hxZdImsL90%mL6 zw>CmtDFru?hv?=k_2ct5^Ti||0$Nt-{XW)pwR8^I7n69GPs?g=vXWabCIKPQL)6>K z;O1M(ecV(6uzI}2D^LBnUs<+vmdktyjl}ZtqS2D_!<&n~0@Fe_YX3+?xo?zjA}vJ9 zRSly8Wp{oj-%!fi7nJm+pvCAu3DWz0zM&Knv2yb!8i;*I$Ik!!@?j;95IGrHlW#!+Et1e~M2JSZ zS+R@hvMDy?3cUc<@~iP}rJ-z~jZZ6CCb9!~NFP_Kss5-BXXW|I(ol`=MhYaVUC5ZDrm>u$ab2$oCFL%2@co%F-Woc< z+&|NrCihzoeo1k$Ju*LpqXC3PQ3es(mAy}>oVxiv&?FAk3PYr%M@lYjc6Es(^Svdu z4X2|RC8KXH4H5e~C!RzJSG?G&AR84OOIL*fB!Y6ygtb9t6=b{`DZ-$Ce`(=ptTCZh zvIg%%;QGOQJNe5q`Fw3DX%F`OB`a7f*Ua~q2Kexjre1)2{vUjPNr6=L*(I7&k7m7` zE~fWT-FO^fK$O{dCpFRB>$){~kflwLye8Si_vefqp7j}jvF*7@UJ z-h5{tV*sVAF3cnYpIa(dhOGC~hnaY2nDTGWElDnIj2m>tNgq6Z?9edKV&edB&Omlk zZ-zuuu`1ghllSVutOB4au$PY83%y-EjAy;SL)Qfv+p3RiteHUa%I9ndh!CtzAf_i* z>swAH5e4XJkyJoovh9uynI&Uo5llRIq?<3cTXVWBwNhY-q5`2M$kEqATBHQGuR>95l6lW29ss?!B}Dx~L3 zTN!s-#7gRtWs7x(o_DfKBtE1V^^-P~L=tW)eBO<%VH)7aj~RNmEaRYLo5`K+`s^S> zZC)P)H>M{Ot1=%tb1Q)a->%`>m<{VCJ*1G5E9W> zl|(dQm$`lVsV&@+o+XLL_(%lv76$n7mj!RCxIqRTU%cb5&|Fou+vLTrm%G<7iGaFHfZ{B%Ju=@WenhUA9{8dJ3 zb(>Su_nGQSuZ7o}G$jq_b=uqDE2lIohZO`vh+cSZUyQPboGFi-#5ym#L=}qy zD|j`Bs%N|UjC0a2S)h0_1%*rR#D_YRimm#Pl#P?k)=e#u>7lvSbWff&-+YVfSzO4; z2i**dJ194%vE9t&_K8>N#uAItD@QSN!+OGg^!bbV(Nb$DzWc2 z6{3oL=2oNGkElUAPMf_)ajTawb@dtigsZx#Dq*%=8{T{i8Owt$jQi|7(Zr0Kxa@78 zbVAk&FDq^+LwU47!y%$iqC-svejg%Ly@N99eqD_{zGmW(O#{t-up$J+g^}|8L8PY7=dEc_!jr zBBUl8JN3wEKeg7DC)fMpBzg&7k^Ty zr83|T3ATj=SM|S{j8TtmPXwMat3AhPU|OTrZHzo$v|2bCMnCo2WYos7HXmPzuQDKL zV|2e*rICi^&EU?)C)vHK{L)=4B^7IC;0cRGMcpIOnmJdSA6Ket7Vh4 zr26N=kag`==Yk@)QHe8R%U1l;Yaj|CUA2S|dAK04A~&THOe}(Alx^cd;TI)}KMkdc z%C<=&MP_E#ld@z$Do=`6-?i$gpbaWVUX_CGFw`Y!FVMkCDr56kp+`@Nm~N?2mAuL6 zjuUQWU2nSwtTqsob|GxjxdvBh0+Y7u%YebOTdvuf;DWGn*0u~KZo{p)Ocd4BjcPzoM&qZOPr_1jk$R4r zh}$^(@D2kM7-%0@xXt#J&G%6W_atF9`3tkfnidJ!QN#y-=oYL#j_;zlxi2ufB1OK4 zl9nH}eHzU zHG#y3hP;WN$jZ8AUV{}T1$MD3R^-vn>^9TFH?qRzp5RP;f`!+^Bnq}7LKcq{HDsX& z=gldpNx95>Q4+KD3q1wBj*u*w)Ru8wDIV?PE+gy{l4e@sh&*$D50J7Q7Y1GXIHyU2 z(MTp;CzI!r25Tv*)4;4hX8f|7^5Qr?mDLvX9~2ZLYhRm9GFfaP{=CzjzRBci3yeu) zlA!k{S3IQR~nitup zytdT|gmZf1Nj2JJVsl6nE=wN;OO)Weik3+)ub^(M(IZ{zTUq^d15I}cVhe-K8fgsB z2hzovHNu{iWC3p!-@=iA=5gVyS>7Zh!dVN+k=>6-X>J0F+iO+^po5TI3 zywI)*Lb0f!RZpZY3#c-}w3;cYRuuV^mW9D9>Fi@#iNwoW<(U!qfA5^=Uz2qr4aL5G zLyKnthbYiu702drilXc>0W9slY?n)jZ=#ddm#F-cTFPRohgpPkiEkcgk|$N3$D`Gy zU(~Ys7TRp@588uky0~a&vAx)H*F^Ol9dX2beFVy?LO*^Oj`#C4Db#{I|KXd#@5#Dw~q1E-sX;wi&rN=%cZ1 zb3g{J^`nBO>60u*V2uU^mcf(d`o=1G(hawH*DUFwwE0e6Guk*Kf_+;sNw36bz4Xrc zpenXS9#sjO4TNoSp=$_JilBLEv`s$cZac8(StISi=!n-0jA=2HoFQ81laHF#ca(pd zi*WTloJ7P$zj`N0mW;QEzCz`oPv4|V>WcbOEzZb`HmqrY%q~YPik52L!x)nYaUn8F z*y^B;>l>TPw03Q3KLwK6IF39Xuc`c{{nATBhg(z~L}?#4#8+Rj2M=VH3TLECntcA_1=Jlrwwch40#k6xaiqe7ksju~@kKwCeJXuS7r%p87_$=6Zs*t`5=4%xu zs%Y#mjUyF?rB2?J$C6&A+02X1DxhkS+8%fBxoQkTLu@dhl-d(#>$$h&XBmAy9|tS; zCVE2aGxYf*<%6#f&_i(-o8+=e)^8! z$@*Z!4sT5qs1FuRG+f9;eFa+^@|9}W(bno?R4NhLXNSi47uH!Q#Oz&Z8c=N>azk{qR+IeP#I~wIp&S>ZVOSC zKct+UJbYJ-mP*dA_2B$=(}xPElTvT%vWXT9iQ4|aT+X| zS2m@M>ek*Uax{78g6z(wQ&1+QWoGSa-6RiZM~k!@6Pcu0LZnqUcJ1&uGqn)4R??$O zGt4a0O3jtteB{g?S7Z2JFR7cysI)8-wy-5T^At%WI@MSzO!(ednGHyWAnVoA&yBHXkk{1kG^2}*y!Nv0@|~_S zCm+!p4oe$*m58RIi+)TayT;nl;b5S{cUy9$Ay+oOIp#8FBOV&`)Q~;Gi76wKOMo%~ zj(*g{1=7W=eSoi+v7M2xa7HUxwzq#K*=H{G*=_TpuzinA1(DrfVH*L}q#7HER&Lua zjLE!ZsslZrX)`DBmR1=A*3`Lap69yP)Xn>?ak9l^u1Q^-aPv@XN+{Ku+m7*PI#Rj{ z22Q#HYJ9m+mq#fDBoezzW-fz`)ECL*A)9OUXqh^Ht%0Dmp_?wQcblxIE!pU%4SglC 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 ZK{<2t9r4^_1aiO3@l^V=LBY$-^dDblzaRhr diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/da/BOINC-Web.mo deleted file mode 100644 index bf0f918f0b17747740c9dd67cf2058cf83edd3eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20469 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Client.mo deleted file mode 100644 index 04fb1184905d0ec16a1d22349e72db3081fd2698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4852 zcmbW4&u<(_6~~KZVZjT#u>6K)sf9!$iuU^%A z@B4ntpI&(Sr-JKcJ}>e)^DZIIfwNEX#r0S44EPTCP4KyQ3vnJa;H%(U;QPQof-ix8 z2Is)1o)+TE;CXNbbYRf`EAS)W??4Iu4g5U#?0bZ`0@lGdz#Z@#;M-tW_sn~RxCx#C z!}|fa4*mi>3;r9dhxgA2Q3JO?34XuCpMk-~5qJaq3;0#A#^JvX?t?-9Z^28Te1Bo* zJ@5zklc>eseLVOpz42J!F4X%LifFA_UeW38y>);aiO>h%@2tEM+34R*9i||K5 z3kLgt2z~*48(af_0|tM*_?!^m1Mh>u4}SoIzJGwh53A1$p}-%33*g^NeECB{T;RR| z2K_$N`DD0Rl3MM_U1eQrv@{)g_4exeHJLh@>?UcJG&5B%gp@s1Oe@t^ zZRw57osvV7Te*H`b$NA3-q_f_EC-oNc%BcsHfgIM=6g!Ea%+|Ll|r$kby>E0su4E7qbi)w0!k&@#G{cI*57Oqzj@a@WzsQ96o)wm1xe$zbpx z)g2S%+D194jhAXab$(HbRlS>JXp4_BEUS}N%jCG}f6%g~oJ+bm!kYegeLvAWv*O50rz~L?Yr!$>r8tyNx+fem z7Qn&QpDwbl_FzZBoQg_S6vq@uH5#()MC{k0M2v7^aZN?KGTuBH46?M9#GnLv$zFmB zoyv%pOwwrpV%$RIE4>QBo5J41MYgNFBChV~!*?4QVL*x%1KuR4eTa;ZT$h*|0y1%gemLKaK=QbT^RJJ6uJ!rG8kls5JPo zRBTKUQwE}kG;{f2U|_&CveXX;icKfkctWaW`h(n4RzgjAvbZ5di7`BML+5eGwpRO? zN{FRb`~D;?xAl%Dl>YCG3B#j^$~)L`w$%QP#YA5&ESyj&08mmAH==eQFyN!rT78tF{O?*--(NNf~yHoV3#j@61s$ZDd zRDqSXHP=nswX1p8)f#3|&TQOn)UH_->qc#v$S%r-x%u<8`MKKsMY*uBxNxyHcWG`8 z!P=(UO+#~-$nkCgQ8|BM@#1`K?jmxx66b3Tn`j45j9rwQ6xh2-=4qQ(>|Xrw73Z>g zQ`sG=)3C1E`5P?L-JIfEYpA4Oo%@z)(JBt&;beFruQW}nTMshRdW?=m*;X@at7|J0 zKg`$XX093SiDs=qQZB}9IXB3XREIv8SPIVT+l}kB*Cuko2>M!WMboRuxkdR}Gxam~ zYB!V)X&9{AFve4J7V7i$S7*dZsuhDmu4EYjxr^D=s1W;jXLQ(YCbmA2g;%FbD@!wP zD@$GP$-GaaR#P*BJjlabut!5ux-PG#p1z*sohX*<_*`WfC1R{QJi?nU4V}6!u8$6F z5OuWY$ebM}gw(dB3N}!w!<5lfdi2PrT`z7LjrZgh(?jms@FbO*W5LH(&#Dx`%M#}x z^0mBc(@w`xReIcx4hi(Yjt)CYi#HX63e_%S#?j)s>Sa_A3KDn6#*5o=yg(>$GM(6! z(?X`li{OD^gqC|bzM3t@3~cnp`4~91b$4`_VFi0_F>hdj<G4ES_ELS2hk)_yfB-aAPhn~Oh)Tv7D?7my0%0YN@@887|D%6B!K=}|yJSyPSJQlC5|?an{a!QxtMDy zY}ArGg!)-lY!vvGHw$`CpZ}=TG*KCs;zSd}8W}oGIx#*K+^`{6XnF0BjAe4qO3oa! zYwV-rXF|A{s^F5CgJKzfP7OBO{jO?qdbc|@)wr0O#XwUdXZOQ+gIvgxqlw&0n78q) zj>Skr`{1M=PIlAOTsgw{lIRo&*=9DXio!S%>c@A9sqFmd&>xi97899;2aE%Bo8jQG zON!uMD<>er*O%1h$1W*qPB`9GV)E)Ge07zk@Ks5$X<^138NE>6D&8rgBDKmv@yW_ePJpu^kn) zzO<*J%Fzl+UW~a@a4RyXEHA6Y-<+bihf;tK7!IcM^9l83l~h0442oXCDSD%aSyf!Z j@oBh|Dn&~c%W$BI0yHf;U+C4*qW*;ZkqFa7uZ#Zx$(<0C diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/de/BOINC-Manager.mo deleted file mode 100644 index 7b05857603ad5ca48dc086316cc0a3e7d94b24b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79596 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 Lsh-MiEJgnp6W^9p diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Client.mo deleted file mode 100644 index 18403bdb41996074a1c19428fcb42762a66ab47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5441 zcmc(iO>A6O6~`~MP%vL@fdWz&w}`5n%+z*B(oRB2nkK1BKCE=yrm9eQp1HOko_TM0 z?~OmY%1525Qc@{=s0%6;2?QHYEY~&uNSs;10=+@vW5EImi8T_eU;*NH?wvQDu_sO2 z1w3o!KkvPJ&pqdV{^#85KRHT8)YuCb?FH2e z+Bz3hDQH%t6asZ%X7!ATVm}OYIH8|DGjjT<_G9hMcz(qjub8|WWTL*q0%OXitdmgJ zW25K8dZbUkF!IdE5q)BG?4YhyjK}kOZ8Gx8MusI*MwjYQWP&6!sE&s9N;!Be(X)}C z7#$}b-xGet9Mq*LQ<~OgKQg5xjOKOCL{&c)Z)0_w5jrvx24f|h@B{7DYUll6BFxWK zE4mz-SO;OE&72=61+7Mc8L#4(bt%M`*q;piU{X(;`MlP}kOk-VV6Ga@80`gR?UjjZ z3My(*_+6IIcjkwYwoWkHE0w}Jp?m-NpZVWI$sKd34c=jR@ne}h?4$8 zPMcX0;*ynRFEZb&!&AA#x*uSnQrSiK^YcOC&1n-w1hRuPRU|*p7K@|jN6(%)_YzLd z_)!>CZMwY37e(l5Jx+97GbMjw9;)nkVQFsOPH*$2r@WZ_dBLRQCW&=yNW7oSx5*lH z+IUaKi(UNNe2PlqdaV}1%+b*?oy^w^i*9FW*Qioht<@70F7m$n@DPQ0iR34qj}uc> zV}Y3?)I?Nn=91m%8Vja_aMo&12VT|eqI4`ky&-CQMQrrT_*id!RM0;Rmm{CtO3}b* z$;2^}@-uDFH)WhO9Vt z_N1ObGTl=tofoGJ3J!xA6ZpuaQ$yXu_J|oMqNEjWIFECI`ZOY)LZt_I65kr@}!!H#0obnm2kq%%jmPZkhP^-wB<$U7rjbC2R{_e+8>AGxRM_?(X^@1-b}gv6w`vqx;JTZMdMX7zfXoGI^rwVIV~^r zq4CfUO6MzK={;-|w5bf78aZ`rn}?zN;K0!^NXTZcNKqDSwLD&{czz&l+>2t9d}FM5 zJom)*I0=IGojVrLk`Z-5KQZnn1LtxlOdw?_(T#>-LPCf0L;3v!Dt#;6NSAfGl{N$# z>1O(F+H74;*L3Suek`;TlCGvp3|dY%Gy|BDuBQ!#ZKSu-wfy@w(|WCS5mOuKV*1N; zl@+YPmCT1_Z3nEi4L4gC(kAa%n?mJ z)*fFaE!6&wQ`Bxlkg>_15F!;Th4lfwa(#mSYp3(YO z!Ad4@>%UlSSMU3*-JgoKtS6g%OUpnfm#Kk8=%R=+Ub+v(!f)5{j$y8=y~C6>tWeu@ z0)%#fFsXa#1NMpZSSivbZ*6yzx3_q(+mGcef~qbAuX#3SyJd5*2@Nqh<7x= z%sXk4A2vwslH)8Amh5wFQC)Mah^)lE+byJ1LV>ho;bN(CYX|Qt$SWA!lKvG2lYy~+W^(JqfI!oz5hz3*G0j*_D6BFO`Kz}cavzQ+Zt zh22V_t}lyulJ~!5q+hh66=6vDewQO8>=fDv^&wYTJSI zo-KCX?M)qO*R0A(lg;OrD_(a3S!H`)w_TO(fo3GF9Sd4ah;s|B^)Rt>z_UBOG_jrz z)wlh0Hh$N17q=Vhb_e6XBiXp_c&>F>#234b$sXjIg3xmTFK!afV!t*j2e|fm%GQ>o zz_n8moNaGTw$dOmwDYJ)@08x&U65@_W!;m!$XT$nE%eR2B*&h?`^6~dnob|HqPUBi Xv!(Ib9k#j}w~Yd4?1AA98-n^TVHcma diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Manager.mo deleted file mode 100644 index 70e029741218c73fd0041b3eb6187338a2f32583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80909 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 O*6q9R@ILaxa{miEyK@cz diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/el/BOINC-Web.mo deleted file mode 100644 index a9ffa4eebd5eeab1051cafb00900efccc250877c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9197 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 Kinb7;KlndT$3y5MEePGWf8$g)a?wZ-o_H=c+ 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Manager.mo deleted file mode 100644 index 41043f37e27904871a4d4292c8e9e3347fa9e839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74823 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/es/BOINC-Web.mo deleted file mode 100644 index c031c8548de133fe22ca24e250d026f7ea2c1710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37351 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

PYe6)T5QTk}ScP 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%0D(+rFF5iGEp zox-9Jn&kl+1PvPGoWwvsJF>ekYeX@9f0yeg`4di7h)S7^Y$onbIBAJ(JE-x@yV zDp-^~h0&zqZDyqjBdUW0vVS4Z7BM<<5JSUI)&T3xgKmOq?Seuj@=S>tYxfmR&W>`S zxXlEEtZW9c{64A^A)(L@Z zGvo=b(SnRvA&ZH7p^2=?NEVVsmP(Te$U_qrQ?+spqtHDtuRzfYjZw=#wqqA9oQ3pX zKDyAdB5D{@r7w2ys6`T+mFV!L9Sg%Ki5B#fEg~{(kwcZQTEV293}Zia_~#mk2nEGN zWhG})@ZRL^msQ2$S@mFI3h~GfM^MP7c`)J17OI8MWZ0@AUDSY)(_FQ9P7KqpP*m7i zF)*VI&7xiN!q1bO6;m6$^{FulUMJDjA{r3N^}1)L6Jyw3Vy$YAp;nN#>x~mWj+&t;2G2z+9u`vtEXcJqi&y5MsRGyR$j)6Yu`pD!K6jq5}LIvz% zET2@!XL??Kats4opo*t^*|c?Z%w=1HrjCw*;#lFYbc5EFPLjcxU5Mw%m;li>3apw2 z>6+G5sLNCG@G7DAkdgNzX6C>{)YesYWQttt*k6N}yi%x&Zg|Wa`IF2+udF` zSjPB1kTqy;v?7jdgkVo#gecJxasbT@t4*qTN`I&MAe|A1s?wO@AR3)FV}~_z+>D4- zgP1W1RF@+vb*&AF(06iz{2#tqRe984DHEhtA)#DlsByYTDs5W~9l} z^d}A{C&T$O#H6hJRqP(+a^-*2qY8eIo|@ozvj|W=LkhmM9l^*U$lHMT3FA}^AUUdp z18(^h1|rI^ou#R7ZvdOkGie~d%MYUwTUo8N)!kd2zmkt8{P7+2k5;kXa+4rN!};Y0 z(Lg?S3XRRecLt|sD?p!Q;CG-sN-q~Fo%c-JU|$=M~D2I zCj5iIWIc6=2WrS_E42lgpiTAqe7b_s%JxkO<3|3(RWd)iZG>7<;>`qI6`hWBi^ft3 z9L53pub>p3^jR!QGkPp0;A*4!CSgJB8~@!RE`C-Gb~=bql?v{%d9nH~(?M?ML^B6W zLtp^Pe>Y;6s&GsU_8;Yl8?#0Hqy7aBGonJdh#@)6&Z$~4^bo@o-j?@T>A`Ao)7hg- zYh>i>D)tG@9UB3GRKv)gg)qXd2g6*I%(3P3f2+n0;t17*xYbTSBNb1EfFB~!)Fw-( zyr5Neic|ano{#T cCfMmWdr1|6AUJk)VkAEkkH3-h;ryHb3yLW3C;$Ke diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Client.mo deleted file mode 100644 index 327bf58bda3a90ad92f93790254ced9602a13f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmaJ-O-}+b6vXIhkDfjB;L*2sR}iddjEIH=gpl>)X3FwdE2SlEQSm=`^zZpwe2YPD zPBQ6B-ptEPzjt@ODugZK9&w+zO*|l$Xb?YXc|vcg`NP237t8~6#&D0$D{BP1?00Tk ztR7dRA%k4Hw?)c!X|>8kaGS7w2R% z#X=Sc8Oqr@ch}}ptB+MURxVg`WR=OEw9WsyA=pGly-u&a`G+LtQOlZuhQcl9)H2|E zIGk&#%qh#CrSllh?y_rWY;Vtg1Z#{`h#uhv4Z7cU>!!#uYxPtGmc(hC GM3o;5HG~2H diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fa/BOINC-Manager.mo deleted file mode 100644 index ca7972b46c9577f7b36de436a88226e02b72b172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 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 DlpR7S diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fr/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/fr/BOINC-Manager.mo deleted file mode 100644 index d3b4518466da21591aa9cceb963fa2102e0c858b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80770 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Client.mo deleted file mode 100644 index f7b4427f1c009d95a122e91b5c71954500720279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmaKo&rSj{5XLcj+M{O=J$Q81?gD}pjRDb+fDp3&xtX$zYo)ZLEh@f)M_v)20h8kBfPM2r& z%@j*nAY>@#Yu|mFORe62%&~I7S`({G{-ACC&kn%~9SwSe?&c0j%%hGq0S%d3EhuHc zw{W=7QkfH$KS}2?oZe)Y(A?UeS)2)*t%dFKi6<89d IaS~O&0TX0|4*&oF diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Manager.mo deleted file mode 100644 index 763ee2e16f413bad07d80a7ba37bdaaa985a28de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45391 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/gl/BOINC-Web.mo deleted file mode 100644 index f0e65b2ac5552a5aa60e0be671f97e9e9ab8dc80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1573 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≀=JQxX%oF#4;ze@=ScM%29V zR`6a=N`l0ra8p{LK1T$f^Lbx-oZ9DZh6d6~nb4zPED?y{{%}kPfzY0-{q+t8iT`x& zwU(Jf7B5+|E}RQBc9tTF+nA=Sku*sUDG>bjTjJ#JBhTqn6T!u_Rv`@Yln0lISa7tqyEi z-$Reo0=g&fjNN2Zoz~@0K+={vZ!&A}OwRr?=rOh2Q6S3>_Ik;zoeTvSq5Rf=<;zuuKPHqsvVuFE~pe~D5(?#~#=)oQvV zldoT&Yjvi4IA-9GCQ&L8$ITkU3{AWndYc78rVIT3yA{qtAkk9NW8@5usZ{=F zN+K(1|8zWMjRdfROjoJ1ER|j}p;iLe)q+LXhian)ym#ug=9cuxIy~3eI6xvD5jqhe zgo%pseUQOPU5BLP}LnqyTYX!|zMf1J{COik!SCaCvL7A)5>=lI(Im28dO+R3|{|mj8vGmuWQN^CjS_ytTgy^b- z%Binn`|vuUVMUry&MMyC4aGC~L(XzWhp;r*;Lf5K@%8bLM6o)0vzkAbU3y#&^Tht< zmy~SV&;g-sV$}9mTMVKDfCPhDPvloqKOeY^0wkq#%==c_ z;jFbY7XR2hf0sulrG%Ui3xEXZy7fdXty@vr_B%0fh8SRRQ7-f$GUlX)1V4ScVYdZn ztGV)vt}B$04wPMX$njP+i$giWB%%UgrYW!<7hP#ja_VYB8!v@PR0yTwd*;-EiJ*g)3XX6%7Dq>j~(4B>)WV~9Nem|I$nk-MR zjX|C+W=;2SGf#}j9tUG}1RWyK+j+yZ%(G9LPDrN5TS8+T$$)7jl;5)q;P^AT z17Z-P5a~q6>KP#u9SED{jn}gfnJ1aYp+scnzDf*TU>WTbH#f|F-( z(IT=DhYl8R!r`!1I=aMW^!5$P#L$xW@*cOL##-LhnHG)3w44A5KqeNTl2(Ei;6}1n z`jv<+_5fQMl0MOEwTD!;=;cR`bH9b!IwVqc%i{0-{(8+tT5)7dai!o`0n@vxu~G@H zAwYiDcF@1|6X|%cEaJj^%}adcOU~#^X`Vc*{qe{N zZ6%zh!G%gqTEF%d*Bhf`dvG;}%-bM@+^SZ@T_G8{hRMXWtg!5Ohy=OdV>fusNgJd5 zEZJyQz;REBLdTJy{kme(N}f*YM9p9Mh&@&1VpRh&a4e>E8#M5 z`uZz%k6hrLXwyi`9e27=Zvn_ng?pYtp5k3=?}+!ZAZ@x9|_-u!|BNQTG1MIi z)!kX%9>_jKh=kS^uB-%T%%v4FV_Ep7;DM*I2w2ci(^Y&D*cvefwVR H$glhhO7lGC diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/he/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/he/BOINC-Web.mo deleted file mode 100644 index 4caee7fb84b45f241a56a26833ae3d578c2914fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7595 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 VAA|>yL1$g*i+Z-X4l$Xhn53xzy*mj zZ^8*)gJ)r!sEW8S(oeIR@7vj#{d52BcaP%^^N2ZM?lE&_h>y%rN9F-LPr_IVKfp^D53=7IExbz zreVlNv7}8qwB7qyi`feCC>y0BOxQO^>qKc#S&2@Y43<3pdz4NqI5eNOha+ocup)Cw zlCA@)`Rxk{1XDe|_y0-l(0n Lvj6>aCwhMYX@jq* diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hr/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hr/BOINC-Manager.mo deleted file mode 100644 index 936f6cfba7a2f81c28037e9ed178e45dc12c6927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8088 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hu/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/hu/BOINC-Client.mo deleted file mode 100644 index 10502548e5d183d526358a827da86daee69e26ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5082 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�r3g^)gka`249VsLz#OSmUimXnri<(n}IE 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Manager.mo deleted file mode 100644 index 91643361f99874fad605c2fd231ee5ca982cd4e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79091 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/it_IT/BOINC-Web.mo deleted file mode 100644 index 36b16b03e7320fc24ec2bbb6c0e0d4a8222351db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36761 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Client.mo deleted file mode 100644 index d723bc38c88451466885316df7833c1ebf5bc6d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5353 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ja/BOINC-Manager.mo deleted file mode 100644 index 1b2fa8235ce40245bcd410831b55d26e75e6a1dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74201 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�*vSuOo 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


6z}_@N1UrTA0bt(e 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Web.mo deleted file mode 100644 index 056c76f75f23c390db14743ea32d9d0b331eb43c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38887 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Client.mo deleted file mode 100644 index b022b549e8bda9bde2d2873b4cb26d3af9795a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4817 zcmb`KU2j}R8OMjxQb^%J>&KGoISIg znPYn+B*aDUKwN=^REdUOK_w#5D=r8Z?0y5p1s4bj5QPs>@tZlj>vfzaRN~0%zkSYg zo_SvW&&&SxxhH=rxW2;Y3w#cKK!_vY)D!&TdIvlR{u}%*xc`Gf90e`-0{ABQVel{D zm%zV+)8G?N3h@o_C^!c?FzEjs_zCdOpalN|eieM?DIv~)b?`+n1-}FS8Vv6}{UIT) zf(OCyybCUX_rOEoyI?&$e_DtdcmtH+4~O_mF!=aK@G|&M@MW-u@!tlwz@Yz6;0aKE zr1JA7_zPn4Bk(iapL#}!7B~ks!C!&r!FNG^#JOiHd#-`Ojsi@1rO{OVg{TC*T5fu!OwTVbKw31LR9tQsaE`$F9HF);p#1woJoCBYKuFA)^z*GFc4H5=HnB(a6Xy(u?z;f&3tU6n6gzp`*a8Yk6;GMQS*biESN#Y4q% ztrML{Z)NGU?AfxA3$I+cc;&pjytsT?b~CNGUv}GtN^}tOYg)F-qR_b?DHP{(dB}wq z!oh|9UTKO-XHn+TE0;RCY71WFaksGRy5+?MTV_dq*vrkrcrBe*{9ZMgJ}p~ox|PZV zB`t4@p6u$PV_fjiiHmkK&#X$sTv4FXZPjYok}$mwE%Vwr)g};y?Tp{=sGNI+*!9rqg0zeI5E#zV80A%a zPe8^31i0`I7g^Aou%lwmh)Sa@jwxVrG-TPH+%G_hm|;~Ani1)S`Q}cyo0*o1NeT3l zYl;v$osnCe)Wr?kfmTsLprY(p)N}|mdG~9ItYw+qVrO@pR7YwSD}Gjt3Dlf? zEN=92uePKfQDu?=qB-Uz+}&mTlw2wOp3|a?)5Oq5;*ee4<-axE5lv41X0y3?dvWRd z&08d6!xT2}#2QhB31uidrSsBtb<3>w;82tg)v(ozuMg{j_&5qc#N+gY#u%6%A~6xO>g`YAo?*?dFi2AYhU%j5}DK@B0I*Bo*|_ozr)S$Ib}yXrRsb4jGPR@yAtDTz_N21_33 z*Y!%*WHrRjJ7z(wQH3XwxTBU}SF86%;fuToXNNXAq!+GJsFO~J#j4@gt|YZrsyWpd z_L>v*WBZnLU}bIIwM|lcscgGi(>CP3#p})5g+j-^QM*WH8*+Af=4fqZx;ArM&dxSw zkJqM8Oiv?NThbdQ42K;#p3T-~X5`F?#?jf@^l{{_Dd%g=Lgfyg*rFkqXt1xU%riF6 z6r1snbIxV;6wzNo>{RbZ{5yp>k&E{ zGV}Z9uguTw#9^jBz3+m}J=v@^DauBymLuIvnLNxvRnTzGE;ldLPVUGBCzxxsxtv)= z%{Ao77325atXLyhF6g~_8)sbaF(ww0MS2^KqX-a9BY zc-wg+u9A#IJ+Nl1vRrXCy**ET&uPxo?K^A|r6rKzF3n#}$-FEqwyIsrM+0fEIe-wx zg^1;AF5d!wlpZ6f!u zT8)(FtP9Hb$UG#NWb5cb$w4vYUN8d(3u8Kzz{F}pT`=E?Z5oaaB=R^q;<>4|n*O~|sTTUJ_wTX6giW=7ubKpb z)A(g$6t3>;P)q0LDwStVl8Dpn;z zR(8z$&>DL@TA9Civb!Dc)g7k7(0xUdj`JaW>06=qG85pFE^O60|Vn+T{aXaBvr{4TXccf`7*Skp1c9s%WdPIYT=_I^&cG!;BpkuI8#P`@eaQ zc~u{2*|j^7LPn^Lg}@S=#`MP6#Q8Uzc6MyS4(s^tWauIiGiWhG0tcEz*Tc6NiaGUK F{1+Y7I|%>) diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lt/BOINC-Manager.mo deleted file mode 100644 index 32526dc9082d3149c45a237e35696c7305b5c178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44240 zcmd6w37A|()%P!pEF*#9nIw=I5_Sh9O!km%$V?Je;m&l=OlNw!hh8!n6n6x1 z2N6+JqPT&8iu;1w1oc%E_kDR?(brwk*Vh;Qe*aTdw{LgPMAYZ|o^Kv1|69wg<@t z54;iFAAB8nDELHHpPvxb(z-vME`$gaZ;EkaA{|0al z_;wIdL|*{+1-}m-2>uM*2mBNG81P~6iQuD8a^;T)A4U9BQ1A8l_);HV4IV^#AE@^) z2Su+EsD3>Ud^C71*a5x*6dhmh)87lKzn=ir?iWCf<3Uh#{2eH|?z71C^Kel091E&n z3qj?d49*8vg2#bnQ2n?86dm3MYP|P=n(t5e_;)~!|Gzx`9@IGh0;=9U7Dv%i@KA6F zyZ}^v9|n8C`#|+$kCR>beL=Nz1gL(V0II&zz=Of3fCqtnpvHGOsPWc8m3s!L{yiU@ z2i^**{HHp@5weFS8P(XT+& zfAp!2Zrz~xb`$sxa1y)&oPSyrb%I|3RqtOxwSOGUsP|6-j{ui|;`58amx0d)*MJ9~ z5k;_UbO{J6N7sSk@ArXpJ^CiN13chNN4Kj%(eY)V#`}7333w;?7S{H!K)rV(lW;Kj zY4C9H+o0(ACs6bHcaR}O`<&&*eHQq5;$xub^-NIncQbex_@&-?Trff7v*gQCk(PjU1+ z57c~5fTHhJpy>Z%P;`4Ycog_GQ1kysP<;9Lb6ovLf$Hzcpyp{AsQzpOHGc`Hal8P$ z9=z4#DG*uwav!Mq`VA;PKI+^kIuD!=GW4hlil6QVMW=6pF9LrJs=rU`b>n#hfj#WPW0#N)g25KBrpvJWm6yM$hJ`wx| zsP+FlP;}aNnJYgR6o0MtGCCRx$6+8yK!^b}h?oIq_pvLuWpZ=i7KY-Vg{x?wbcg;$N zw}34D=$)YG_A~Iw;2%KM)3wU+VGpQrF9+3+%Rtq01;|p5o)4-&_kzcR-vc%7y;eIq zJPs6J%>(xZ&jKY6mVx_$n?TX)Vo?3K0u=vW1?~f01M0n(fEwp3LCx=Lz`5W@z!>}y zsDAE^kP=;w0mXk$0kw|%z`ejxQ1ui+t(z-AjrUqmbiWZ)J?{ed1n&ns!3RL~@6Vvx z-RnFzjs>9R%8I{dA8Pf!(A(1Kbb16BNDP3#vc&f*RN7K+WIJLDA)}pyb(s>s|Zv zLA}2k>;TUPHE);r^a=26;!~jd^;fMRE&*e3t&bN$ z^?L`XcAgE2FK+==-v`0Rf?ol(&VK@GUiRDM+BpJz9P#5o@!x5n=J67bQ{WNAUkQqT z-UW(2Ujp^s55R-K--Bvz&wj@@M}q3dxuEFuR8a3<1)c=H7F-10531jP^Z29zSMRBy z>Rkz{KU+Z6R|V&TFZbym1hvk-?&IG9H9vm=#oy6p$2a?cClWmyRQf0={wskhKLu)> z&jK}1w}8ii)1cma5LCHCws^XMnvdf^jq4;({o4qto^kL1@CBgg^h)qh@U7s%;Ju*a z%NIe>;Sb;q2)pAQa$9|A|fITs)^!Rx@);4i@A!BZ}b zB8o&8fGox69UxnG^e}iXc=ko;df-){_~>V#+Wjrq13m;U2NzxJ__Yp-pI!n!0en5E z{=E+r-+mlayPp9?uU~^2*F&J_aKI&wPmTtUAbut&dJKS%2S-5h*V91N`vOqw?gsEk z@C{%LeiT&sAAp*NKZ2rnbg7%y$9Q}qsCteA)!!~q{a*p<{Vkxzy$wWUMpbYncrUmV zeAH7Ny;g%U@oPZw?^{95!#BVs;A0?uFSs7mcwP#Mf8GG9|M!9F$5(y)``|Iee+`zv z121><_$xuJ*Y|+x=QlvT|4Z;X@K4|=;Ik7q?)QLd=M$jD_eG!nL-0uAzXA3B z0fTOTIt*Mx{BTg?&Vd`iyFu~e-@wDclZM=Q&I2`%mx2qy8n_nR399~I`SgyQTL))= zn(xh^_+kV+4lIM3-y6U^!JR&S8>oK23)DP*64d&C0Mz?G0G|Rr2x=ZX^R7SVfSUi! zpvotpI7c z2i^xh3_fAZ@!6q8WA$h&sD8f(RKMTvaT?s8_yeH$O&L9}7Y8-x;9FZ3Q)7 ziBGSB;=3EbM}cnvwVv+;_XFSU@gtzdcOR(o-vmXcUx6yWAIvSjJP3RYcr>W_Tj=A< zLG@!3D7scajpK!&do z?0bbPe*~y_C#d`$P~|s*;_q#s##aF~Pgj8_g0BI^AD;p>j-P{10w3~tP{rAm3&0ad zzZg{ipAXIfUkY}D?*g^{z6pxI9tKta+^Xx(`Jm*^FnBz8HFy_zJNS0+!kU|(ed@0L zV?ed@WbgoRDJc1{5mY{c_yA4!5cYzw`CqT{HXMOq)z*C6-5fmNgKi$$6& z_ISTf|0$^X-SaBPXUBu{iC+Y2y*w8b9bOKe3ceML!S8|^@85j<=w~?oSOTh@wcx>E z4%GZig6hZfz>~pSLACp3@J8?i(`u{~x<$mnr5Bd0h z&vo+hN#NtiUj~YgHiI@!kGF#A&xb*+gD-;O@BaohPe(n^(fJfGCf*BbJr05gg4;l~ zKjqV}^YQCJ@$nl$(dYA^=Bfa3%OAP~-b0xDWVOQ0rpP7dZNL zgNGAe0-gb01Rf7w4@z#o4;0;g0;(SmdpzpzX;Si9tJhP&+>Sq&%Yg1 z`S<$xXF$>Ct6&WN1r(hQf1&HwnV{(24=OzYWAK^aqrh9i{lPbbYWE$W`1(JXPJxTTw}A7(Z~F8-U+Va15vXxp?r|Ha_iNxh@Fk$p z5!84;18RQ03&!C8f_nd`m$~-mfkzTw1S)+!*b8n2)!&;z$+3@utHD2l;-ja$+|}O? zK8pAVsPf}r2Y3T`7Wg{wmEgBP@yiw0QwDqi_-OFYp!jUB8ytTh4XWRr9(zEIZv!a4 z83o0!SApvH^S~I~32Oa*0(?C96HxX31=Ktr@(L$!7J-i;ei^8G$3d;1Ye4nyR&ZbN z{osk<$3U&WUxMoIUI<^wje|gyKM7QQtH5Ky%^oMg1;lR#MgLENn%^ISYWJ}aMf5%a zRQsobF}NOF2$sMTz}J9!|2|Ob?K=Ied!2`k1fid`PQ1$<> z$75gP=4B;#2+H09z{80@46X;C_&O(thrv^b-vOQjejluWN59^U=jEXI`&KXqz6G2B z54hFQ|0?iM;yXdn>wTc;@c=0Ld>hm}{R~w4qj$P>aTuugo(vuVZUkd+415CkBJfGz zZJ^5C3yQD50@}QTM-t!X4NmVl4pjU?Q1smH@jCEv#9!z0-vK_B`2C>f=X>D6;9hTZ z>4$;)5uXQ2zAOTlgHzxo;Jx4l;1Rbu`BwvB2loU&0G54?h) z_4GJ!8Z3av6ZE$b+ys7%@IQp`_hQn&MffZUKLeivo(6`$6+9nIcoYd|gD(T;_{>j$ zFCpz$U@y2IL4PMWh(1JoE#cQb{wAJ(&+{^0PGfr+&wU^)6Mcv92I9j$|NX>YPIx-; z{RyKyFD2;j@x(_66~gn0p9_Y++cM8z;dy^DCJ9ILd?DclJf9T`gBwUY+Q+}lv+hNF zow#^He@7C3H9>!C3FCxw3HsB#{fWGH5|;Zi|7kh=L;OSG8T>QhV$yCQJc|(i?&kRw zgfEe>C6gZV#oM1H{WpX=c%INR_-w*bp7r-m!hiDoOTs$BYY2-8`gIvG`5z^`l`zxavq`_n=PjhbB+n0kO9;a) zFMQCKdldL7@(?@GN}l)i>7n@jJaj7^d@uN3@T|`S^c>*AT8H z^JzY<4}6+0d?r{YTu!)#pg+m&zfk63@B+fG{ChX^T;uuO;D7kE!#)0iwC@wHBYcMN zYQm_`doj-!_-7uYy?DNnZ~)Jn!B~m@??vGOypOyh;fze$jXc)~ANOfr1fNTI66N%V zd1QazA-)gcEk6B8q^{<95xAc#61|A{vv{t9KlbI6^+7@x@y}<{en;9_#CQ6%+cSBq z$lHsczat1gCEQB>N5Ch8n+R(N-zOYTn*MGge88TtD@gw>;TGag0P}?72>8~VyD9=|CZsYln;0^wT`8>bRKfeK7 zK)f5gp727R4+399cnZ(2CG5lVe-joE^!HZ>(W}UN459UJE(s+C@_qr{N%%F-Uj|Z*Al)(cn9GF5&0B&I(RjBsL%X)CF;qfP=eUk8X;!}hRdHx!>oiM=jkHAyFixek3kLP!TUm~2y^Sy+x5S9`2H-~in z{T@7n@La+PKJ8xchyM9;@HkgA`Va7C;?E%*Ll`9fM8eYvD+zBWe4cP1d1n$XAzVuc zf7kQ;HzGd=zX7f%e3R$pzQ7^ip9rUtwzp3^hv#Py))5~goJ@EZVKw2Cq(|}mYP~v< zFXi&NxGRq4#*?G@Qan^1pQzXJmAFui3%O!`#`IELuaZ;czqoTWU!2fGS3G}ib%A?Y zRxXwDL$yM=6tAdM%9Xa%l}VwP&$T7@*OFS@s_lwb>?qV?DjF_S#uHWLO0P>wBlTn? zANS{rt_hdEAzzy;SH|LO6|M-CxG}kc{iF3-oGVY3;@W6F9;#O=`BE(&Di(n5?rvYG zR-Ryxh0;juhB<5(4ZC!+EEB*+E$*_E->fcPY+Q4gZGFZ&F5ICWmVQMXI=SXi<%VQJ&b*xXO#74PtTrG=}j1rRtSf#ofmhTYzz)Ry3HKXlt zxdKO(sk-8N(9~pi)CuDdVq5l|y@O>|)7+{SPG>JGetV%d#Z%7e6o1C5Z)m7oXOWF3 zC01_56>b!<_%czw7Reu^jxl4@wg0kOrFdfh zXkoZ^;_|3-#W>4U3|@iTd!o*jNE!WGDpW_K&ef7sog4ByYVkQ9{UWk>d0|}2Pl^*N zRDwFH}fH{!meT1D#QXsXXI$Lt$@QRk+5iPbupOhL8&e62As$*Dq> zMw;5_r<9Y*JWQ2_Ml0n~;mUkGS*VRd=BRTZsg5O43kFHwWgE0=0488~-)QY_@M9Jl*|6G?5fJDT5Huaza6hZvUR z7(#kMG=Fnx4DPchdZZB-O8Fcar807=TB{V?&QKVR^HD<-j@x00)P{y5n z9ITJf_C&dYyc~x&w1EtklS+;%D*3@O#6V_L=ue>{X6R_~54M6%g(9f41v z)et>lJ*x`^wilLKrRM&P#nKfL21e9R zghJBjVnak&PFSq%5=GgJWqToMl{Lz7!l1WUWOrTFx7iV2GO3dDThc@&&wiOl0#&1y za+UlDY*K`0;_@(EYb`jOuMLf=8p#e3y=pU78-<^IhoPgjjh0~Zo_INFeceqT+RFc< zzNB674f@u0J5VdLn~ISRer8Pu)kc$AoX?6`#9Jkw#Hz@r0L? z@O$EzzFf-Nc7xId;d9*`VLfdxRAG9p3s1dy)p#;L7?YYeRcE+t#8e5b_e$NQiEWt` zw#wd_IxG&CX#D@LuLV;dQ3~kcb_7md>ayusSwGyWJ$+{jRPxs z;#9mOjeHY!g_7+(iDuWVAa1cB;pxu?OBDq@%)BY88c0KmSpsH&dQZd_}A~w;{a;0#k z&0Fj(h-QsBOqMrN{)Jai4pEuY@l|U{m@@h?Qc1?OsYDSwV1BL;sQ|#H}aS~JsOq(hHe#4q# zV;!%T#M`{;I-1&D9Rt)iE?rq>0lN*-sA|Nn-X!bH-Z7(;|n8h^~OBXSPBi-IRI!;~?_hD|8ORQte)%+xbKnWkN zO(yUt>tYb?eoUh^GIe**qv67cUr3c0Vzj)>vMRz$j;i#aqlvzWwbRv6Dm z-aK$~CJt)ZgJi_`O=h8+vUGl;#!HQTVE5(A7#)bC&QK+N9Cc}p-NhR-kr^!fE9P*P zhS+0Bc1t(OGGFXpTV5DWlg@~NBGiy$h&;e%sgSS)$L!)5ulZ9|I_GJ!V+y}Go$Jh~Nxpi@Du;zp zokuOOzY)Nc#PBqrcP+%l@q@jv6@^MH^6fuOIk?tgJGuP6#`IKNeIFwz* zO9%SGyt$1wUkjz&Zpth2XN6joX>nc%wzBIOJ9rS*Y`U3ZpFNq;|vue&a+6x6;vWm84wbx-%Xb4Tvm5s--e+oE5(%NLGjFyY0o~N$5 zs;qpu6CkygPCSO-nH-hMLHC?|g+)V;d{6&hb*WUVl#7q3OMV@s9c`zNt=$Rp=RE>y z`qGuc$Y@O*#rmvHl%bD_jwCmZnrtG`Idvohv1QyY+H5j=(mBgm9MN3W4Da`^7+7=e zsLbuwcfDVgeIJjmOeal5b8}9_MBdjE2YxNHE|$Yz(g6EVj&bmU%mxl^y0)Bv5 zE!ByBv!8=C#zrs0THIEb`_#Glyd2bSjp6{4JLdpolCN+aUR3?oU^kuFjxQ+gtCX!T z(egr4?84_K9^6u>)bL@DS=g@1!-j_@XnQ1ugCp2E*iBn%B(iwr&9Z--ODprJW#DAI z?{8I^Cf{;}WTb@BgYTum@QuviA4|)lN6Vj;#@i~?L^*#{TE>Roh-qyXM4A|dabgs0 ztmwq$a5BVJ7a9-hKW!l$nLwQ}i06YjtL5wWH=Ozunl;0FNwNZy;%IEr@#M-5CJ3{O z^Kc23mFD3wkx9N=d)$?4;*%My_T_l7isc0Vy*sT4aRx(6E>8oqZl*r|uyL;F{2pe+NN4Y{d=t?;@O}{N6dg~Gq!;ziA(D{|= z>4&$7f=?hQL5%`_k+l_I6-O(}l@aVYQ@Mj`wIo_ukwZkvg$#+6l>%LfR;}3Bbvh0} z&!>_6Hg1a*#WPAnTSk-Ouqt1|&?rV8(+zwT%5^yU2}{)-(=b|P%DrtY!PX*rqHW}y z-?AHajaC)QgRp;pW6{{|jfmJW6*V3?q%x}>(Po;o(>?r43oqcC0{x1&sx zQW(_vG_^jFNplYGXnof4T@BI3gIfSje)UA_3svioW@0@?G2T@U71pCzusqlMac#g| z5QROj;ny@re%x^Swv`x!3vyCIvRZswDVBNDYHll#=B9mU+FVRF!17e{6eGkj^cgiYcES)XCnj``GrzYdmUO$8V7LU?F) z@9u)gSIw=2p~5gjjp4oS4t5QE%ZW6Po{rI4ZKCI-lO`u8yM0j#Q zuh^b}S#fi<>OJ`z0=l~gX)Ihm*|=6r=TwU{Q_|5LE%{0^vLY>%3IM6fbfc2y%y$0d zE32v?ezzKA(j#syCN{H4pYNTv(IyTzU`5=XP6^88t3#E7y8|$@Sp(lA%n|q%_p&?n zm!xwZa+jKsd`|F=m`-t-mAeeLbA^o~-@RkJ*zI1>q6}K3JK|ia14|YnVxhM>#vFuB z;|fJ~sONS;!WlP>IQk+-iJP2TJ*NjR-(X5{xR+9!%==BYIl;}&O688JyJ6vbEzp(* zRHDxg*k!Fhc@YjbLwwm zqfaVBqh#nz00y&V;9|b7F3;RzO}($8ePeD`M-z4~-l((1I+*o*(PukD1aWC|rLKw^ zRM18tpJqjjWSq)lZ(xwYO9Ou(6qu(G&HLa=@*=1&@GFX&eg%%iWypiFZXq9DC6jAlXwk-9VZ()1m|zPw@i-jz^w&8R`tMrR3GzNOU69I|*u$M9ox+j&q$z zeVM(CglfnQWHb7Uj(#M*fmyRX0nM|k`kD$VA$8(4k>-(?_YD{sW}ct6tj6r8t!1Nr=QOfQNw90y`LKn|EAvtRSYaZ@ z%;r*#ogl*ih2e0L-Crt~Rb~Q9DZ=2!-!|b_J@?#FB6<;oWZ@PZeUOhp+NSQDG{5EV zF~}5irvw=CNo52vTdFbD@}=0n-W#R_{5AcOD2}5_E%!KFUV5`+_RADjhY9K3lyUcB z%uVEaU~@8~RoTzQ8%ZXAW6Y!OxP-J>cZ^WBdCRD{t4QhF&ADzv@o&Nl+!}5~g8t=G zT6UaFYRX;A0~UAiIVBA##fcCcz_>CO;KEY$PVJVFObofd>W!)9Y5Tzhg(9Xock_tUd#xXb1T7thdWckC_7+SG(Oi?|k{E6r{sX=T{l znEmcr%63cyn`Eq6oz{p!(0J*7)@0Wh{TzrP{uN5{TBZiElvfnxlHhVV_7ICno)JHF z)$Wc9{kaQkLKl-wRO9wi|ASZC#?f#PXr#EFCDdf1Mgtfl{@^_{ztA1_Q6ZeI%PLZL zMK2|Y{Ri_LF;h|F)rJZ08GWWYI%ccHoBQD%U5-%gIB2;ilb*8-=+%+ho@_kzgM zl^hLVP-aWG-M-$gYFkIl?Qiv4G*s18 znueX>%>rNvRo#$gE6<{{JAXJu-6q5_Kc~T&mx>8HA$KXp;`s;yndl2NQO-}{Wwmxn zT&?a9St?DmrCj8Dggl&s$CRqMF9I;Ryn4!_6N9WV=0s*7;&5f!DRy-T5AIMt+RDut zF@@eA$J>Fr5|ZRW(ZzbKv>-CIOTbm#*)lLnv^AeAIjOKUU!>1SZQb8EHrlFdwyC;M zfq_h9fp`uCuMJcCfmzS+>CxBJw(49xG|>Bv_8m4;g#WmkGv zDIZ;^e!8m!+Gto`+IqMwXjdlL`WToK>TX>+&sDhI6sEzAP!}Os${dr>6A^@MNp#>* zYkHo!gfD}<6~2*hK08IQjmq_jZtDttqO*R}O7GHFQQ!Q|-D?-v`@G9b@1$S9xQJs+ z?FW{ZU742PS=HsD-}y6nWB*icTS;4OtcoZoYm%jIcXelXx{w>1(;!hbOrJ-&<^u%J zK=UA}y9>x+^*>va6XtB~@Un@*#>~%B)szULJ>wtuCo5;8A#@tILL1Ihe_`K9W7q9$ z8o3xzERXQQ49B*y9qgnuX>2~(Br%xZF4*7gqcpehs(Cn3S4fRTtXUk$<2okOjjBLi zQ*+!Y4Wl(?5!3Jz+-lpr|N2X!!xa5eeS8o;L-xR-e0*7r!ohx_#JxFvoKxpgu6<&I z4IDDT@&J|bU24`*ZS&6A=kCEK2q%(DEGu2 zeH#b5mg$%b7V27#=b6 zH%w zmki_{-*4_cp-WH5FA|&Ke6|yjEWzDW(GwSI9qZSuU(q1L;_gMd@?4{$t^suQ9!!uO zwUfBWR4AQg$|tk_l+6PxyUuKs^PeGgt-!L;{h^-t%)vsf@It zG+MZztFNptrn;75{!H+NT2H*J=aT-)&?UBhSFIVi#P$D-?o%6u`_0?F3>PMS=!xsK zVLCxo8#fNDThXf)2nuy(AzF8X_B*Ltoj=OOdY?t0dbKXSv5 z-+$*%UwO^K_@_6$>8H26{lVK`mubgbyM1)4Yf+E3ZHO^aFU(kAai+jYAnC*uSkl6Nrd5%{Rq4=wQFag9FH-}IiFc&tJzjBjUb!V&P1|(YOL(uYh;zP;II|BlTU$qOjp^A|Kv7exoGXoSFc}vr zajuR6S=x0ExAahMMG9-WI(^d^QXNM^qvGkCT(xcpyDQN=j7-Te5UOe)h|Mt+Ztc8i zI2*ypa?~z&cl7c}2H(VRc_7EOKgMi82z@#^#q^})sTJ%KXSfVX;-jg@rRke0`li9t zZ~A6=Eg)aE?!HR0Yo}Cgv4C+pbGNDcO1dJZ@18^Dr9wTPsF%iS^@Z`a zd?9o%ZOZklxup%|%JfY+H%~3x!Ce~hF{`7&lMA)fCbB8){FNLdpT1jto*END=9mJc zW05&Fy_I}njLYL~9cfIQs3{&D*Y{Q8?uw{rOzu9GcZ^?+GlWd5t5-9tpaU)w)pp%c zfEA^Ya#PlZwqxiTce^|dt*}-);LNI(_h|J zwzp?}$8vjXyLKk^v05SOWLfj3MvR)3)TVSBxuiv0o5G74ZQgaSBM9G5hetEKrmuG2 znd6@`fv2wSA2)q&zM|L-Id<)2)QLVaP4vmR7%5ts6c8kg%uB|BaxM^D-0(It}3Ql9zX_GVL~e1pD<(=n>v;Kz^@G~#}4lh%@5_p(!} z6Q+wuE@Tf|`tWQNpoxw}5+rh{Vm8ur_IvYVEXh{WZ=a}pA;>eHNB5O_oh!z8-z67C z%6hr8Hr3<}<5TtNyV%y@R|c?!RbAG68kZaG_=sxPy>M5B&JC~@_;BJwa2@Om#;yloktA%G&sNFVBonEd7QZ(=ayqtJnEheM6qEl=!@z z=SEjO=hT$Sy@iA|Fj!`DLh4E?u&hf=fql`wJxlBvK5Fl+u_*Obdv9rsPvENRK#=EL z9;=t>YQoZQx${90T`{1+2}o%?!ZQjyql(sYRmB-A);bx1QiX-uRgpP}3N*h8CNz_U zIh<#Y;bV4}W)dbPDQ(+=AD_MnJ>2pd;+PfOmrN9jx$<}+>Sb4}CSy*nR0hl4@p-%M zaH5_aAE~viJSJgh&K&l-4Ry?LTc7C@7kIb@qR!=#?b`Sng=S8y8;{kd?@kLs0Kf2U ze{)-7HVtuVEJs1#Zb3>;T0acITJk~)-(XsruUAWX>A_-FK1*Sv(&+THn;M-d7p(^? z26?Nkzgoz{^fZ-LipbDgsu3!3?IDN$BG!vg5uKJ(OOOMzNXCC9N7B?9Z5~KDQ&-}J zoxbdCFAAx9gPdE(3WS4X%EJ?b(o-bsvZA%Uh)4mSPR(QG;1{%3 z*q(Q4XtiBQ=W%};z`P}qP zwY(0xg6hJj1N@vq$rhX^98N3|C7GDohPqgZz4&oM!1C&7$UgVk{Mb-|EeCcF+?(xg zSSe08|Nqn3Ed>NTtJ^tLQ|qD|kMPVH9dNf#bZwE5xP3-XxSw!aqUO2H%rX#& zMsMwN2*eHEPNYnWG!%~)lG5~xjS*z2X>a+big!%k#Ret1t7)m={7MRjMj3{fNQzE2 zF|G8Uk;nzaQ_UD6p+wA4XZ2!^xF;KsA zhYhAR9uL;Hvs?HYckPs6?z;&4=rU_Eq{V^Mv3Hp~ z*s|v8=oV5B%~H~9beV^=ISH#jXhK=pHJz>>NqEyp3@zBJ=hqhQSN4$Iui^1 zXY)*nqwRY4`vfwFXczU!bbEa4@tKQ!C$Oq1{%>@fkL;cDmlo7utLEM4 zpRLF{dfLVsjD1nTl%0%vhpK~U^x}>$If5ZC0qX4Mltb_xn6-yFzB%MJo{+1-oLq~_ zfMDUf$aJyEIVKs1J#?PjVv+{t;LvW=-InIqA$UpRR2@JHm^Ll#HB%4DhnK$fhUzd& zS*`h$zkDs~3`S9{ApHXo!#%yEAfbnTjxz83dYLq>r)I0PQ65=^FwJ38;Sb4Hw7U#^ zg2CCwT{F1WiQ{Uc+Dwxe^Fd>0rA%L4O|~J+V6o}Dr3N}vvuy=IdE1d}Q$y_SG%>)Y zBB5YJNu{KCGUI>56X<=J+Q)6#Y99MqHz`=V$t!{YMBUTI;kGYk+9s{NLG8aLJbD@h z@|E`A34mEO>sA5zncK^LM#ar(x3X4+`HjqJWxp7Z;T;<~J!_0olqyd!WSRN65ReL~ z1q$t(@?aKO&pJtx1?y~~>8qt^SCjh46yDvdyECuILed^0=giENrX?Ox)$v+=KTd1b z3s@FD5fiY|(PHkM(yoK~DA0%jI^7j2w*rwnnqx*#QWw=n)nKwTb_<0 zijWhqq73IY-JRXRpTLM$EA+P8gLqHp)LlMAx`POpJ_TF@_3mvk^>=e!t) zxUrLHlYDA;l*3OFj3IZ!^5@%*kejU=_l{3bd4L|JNk+Oxf`qG_1Y?cYyd_geU#iw8 z66(@bEiL@OAz>?!yb0BN^UFve3o3{+ZKBScVAUhvym%*KWaYOD&ES%gvpsJMJ^@i7 z?N~;7_ol}gNpMUr!A@!8s95YIZ98Q@nKSLhD8e=7u(ubqp1HE-4}HujVdrW-)y$M6 zTE!R63A_|~hzDQIg&nb5OF&9qK+9zZ2x}=_JOh>b7y^_nCE;LBXDnV3+;uBl-m3Po zc!H-RKE0i17WoD_*SkTS^`jEX9PMcbE zPYh<`B$g5D7p*$a)`#nwQ>JS3FCXZPpha8amo%^Bt_id6G;zM}LU_)iTFq1#?#*ab zd}5005i3HF6&di07PUVMl{pu*93I6v@J63I-_UV3XDc)RNCL|xEZ-#a(+KX7QKUaV z2HS@g&^7Ew61?TZYP1V7>8uz7jP$#R0K6}qn=#%G2d8pR7Uj&fzPM%|IXSztMV`g0- zApc>34e3H-mk!Q9jP^v#c9uCDorA`&M^;ZuF*)Zmm6&v-FLKp{H9V6bn7Qs&fkEYs zpKmb!U#r^%d^ye682S}4giKg`a-8)T@x_n!gAObroXSBOqdCxhxIr?zLl09cPc%!}?}j$tcru|K2X=6EMF(cgMp_J%>V=cdg-5v;6a3Dth2D^&j@4#S*2Q#t`CEIp%Uz*9zaVjl&P^p*E zNSP$3PryuYH9J*c5H9aHnPaX-Si~I*_j}JDwtQV@oVpZ|?iAE!qcgE?d=5Vq@J6!N zrW&t}bxctjx*61qU%)LzF0wgVU~ADT7*cxS2Kztt0_nIq zaJ?-Z8&x0{7i4C45upI&ouFzcdyUn^SqeWm9{e^&H$J+9JW#gAT1}5oe5+nt_XFV& zWdWK8TZg-Kk&aJ`eEZauT8{O?>_115dDWZ`+i)mggZ+bQX8lo$Om%IdxI1bPf(akv zcj)*!S~_IrY63!)l^^cCG<%Cst@(C1yGEtpdKCfjI7?0s7q3%iq4y8&uC()ZU^+;y za8a1MW=O@|y&;7N!Q!;b-4zV;4;QnEO>LK3boOrh!Qo48yqErDh2)pNRHdhI;NVxA z-}B3jGEmtovIqf9H3MuMlw``Kr^UYdCS}K`u~p5~xlAq2lOhFyy`gcc9JDR*&6Ca>w+p z0@k?9LASdF@l0J9(9#z;1yD1l$w(p8?Hgl--TdrDbLW~nl}nwdP{RpHTsgEy7uhHE zgcDG`6z_X^Dlr$VKkY6CARf<(q90xmgc!o+ErY{25|&R3y(AW(-XVo$NRoiid^{etdj*R4`(se$-n_+mHxN=mHLOp@Jc?Bm^JHC_v6 zfx&#|=Q(ED2-ccM&D(p?Qmu0FJB!8qy=DfgH|r(ynftU_ll(ZCrDu`euARBN67EH8 zmh?p?&kR_&!DuMQ6aH2&QuqN6Y70xs{SRg`zuOUIo`Z4NBvD;{yZyN9R+d3(YqvVQ z{nA5ab@pc2dEhi-3{5s(dx>@CHG)_sCCphjOUV`Oa>x(x)^`s@4rAW+6VjNA>zDs}F^Y+%#66Z==MSvhdxmT37DH)tiQG5+MI zM|)xBjL`2EUtYEL6s9P857rdJmwzo3{7QCcoU`%2j4m{wB_GuI5Ho}0xEsoWTw z`?A^Hapiv=ww4*;$6iug7d*aFO5JgZxech!v^quH?c8vQk`=bDke~2+YkhNucM*?Dj5B~E1&QFyz z*R}!e7n@;17tiJGL(xlJHS9WkY!IjYG+%Zo#-d<4^_>pOHGKsUrVC_^qa9q~HaOGa zv+wi;quXB=Xf<*F0fFr3$xoF@F4)gprbznK>4QXr5exc%!kHtVrGVFc6627b$%UOnKxgn0(Hw(m25{#$E%gM+aSTyseOUfuN(O3mhEr1`F_d#siJ(3aF**& z&i%&^(mizdVAs9*ae1GOs74|RgsJ90N|&!i;F%g}6)n?u&)!;xwbs;1@VMEw8P<;P z4~LMcBTW{J+-D7Y(|y}Q8F$}JmWmxCyR+fGPH%5Fe~WT~EHJwSi#MW|yA6SixH#qW zW)Eqa5!0ys#V2e+n@0}oB{dOvXpuUUoyqd9r=`uM>wPt{D_tFyDj9|RQl?~(#JW+x zp(Y`cf=k1Wjor(-S>d%A(_liSwil$_==GKv4rtMMlqySc97i{MGGBa9wYd>o#Ryv} zawmQA0Q*ecyKghKLT2lspGn$`nZT;FM%)*k;jM;HwPPuc%uww^rnkzSzj(KLANpcW zAM@;16KrI<;y4@V6wggx1ljt_^fbu#%9i;uP57nel=1A0 zx{FvG!pTByc6q_y4d2l}SyB3HExW6PT}hYOjLZ0?*p}uql*r6Vg6!bfirrS5T8154 zhuT(o+NFQD;`FRa5=)L9>pMh6H<6pIg;bf&HyK*$pnVDiXJRKHHXq@eOj*-=xbfXV zdg>V~wAY1-!@)WmiYu!&8}1ommHd_bIt+ddlofuW#Hn1=Bkfu{17pPfS>bk#?h@$Y zp7uJvALA^SPc4ug!DmIa6a0Qm(8#D88JlpkO$EoxW7Q)1o_<1tdrqm_z}?Hz&k(0c zRiv8tCP=J#Ns@XcP~PP=Yo3K%7Wpr8Pn9=+GxHQ$6XDl25*yb$L~A4Tj<;9AJ*!e%rDT)NtY^I zWY@uNcFM7=vM{mi#j1rL#gW;d(~^`|q^G&V3-NHOSEs~h&3W~=Arje&eOeGMjg+uR z8YvAkFFSXQd?yu>s8ESG5V1R#>Ppk+)8=;9-p$JK{!&OmBy3PM*eBzysQ)WfH3rBQ zV_%H4@XD;+%XAA>(e;VmHg;ydMZlXlee-U+jD&zybn@ZPN5qY?_WT)$lR54v)y!MY zSVoYhGhV7uCs1K^!kisfW|wSAHlEF7CN=M3@ty{p?RD;Qhn<(6Ap-q{X~ku%cwEVYLH>zkIZz7V%JXHD$CdkW(xSxJ_@di@D6Bi+Yg+P8lK=^&< zRCUj;cO%i7ntxUGxqRpQ{@<;?{r-3VhT?O9>nFG_zEdd!e(~M>lh1pUdJ1?4C}XI2~CK!z#{{s=e%kH9a33{{_eNU0wHSHTtV8Swp}1AhqoV)Ol1LAFxA1^yuT zyC8q+kN79@-2r9azXUmo`bSXC@voq$;5`iDRy_oM7W^Ri$6ycqQSc)OA^Wa_vi>>n zVQ>eO`8D_gcpdD4e+G)aKE+_!_eoIJzY5B^egR~N8iGFz9)KSPzXFPUzXOUsz7EPd zcR*C4{u&g${ay3^-$2pdcR*R^y(s0Ocd!=tlRPgoS>!$k%Kk5d9|!xO=@wT z%itTJ1K$MS1-`BKTimAH0t6qPK5@p8)?8lzl$L zOGH&42jzV0;J<(u!2gx!A5*FT*C3Pd@eNS;`nL_f1f8w+2@}?(chck z4)`7L55XObE&ILmBk_D624(yzD0+Val=WT#KM(f72{;8c_$-?UuU-X3-Y>c)vIIhQ{bP1!ux*)MgD&WWuNzbH1g#%D0+GplymMj?+2jBUxMEPzYIPKex5~8 zvHBHI);$7cy*~hD-@gK7-rs}U;G3WapZgeR2EPG{UcU*-IsY7lE(%be=90OnD#-L0 zDBKWx$sQND*FV$KhxaHS#bT}+w$rZm+1R6*CSl=!DQichX0~F&Gj6Y`0vTj&zyL87xzES zwb{Jug2I=lxi+|jv!b^rxZ02SiF|&FOSrMlg}H*gfxwdv_^dqed4>zx2fhe*zK2UK zuWuHkvB{nF%cr`!_Ew+0vUPb=?-iw9KAl*fR>fF9U%Ev18Ch2@A1t3)W#VOfV9VuG zdf*PMwj<**ZIYz4-fQNLjrWH|nP``@)W}q>$aPgTs}F59wxyS4cKXidmGjj-0x-5; zT2onV5agi9>b$bHTu7nEWwCGj)$$n;0kQO?sC6~8Cx;Y=OeywwUDV#>39{|!&Fz=M z)-UCVUV2x(?euqVe$ACtZ8E)SP=MDvHL}l@p*Im9MWB;YXF6t+ zqL>cn_r+dyXiBR#`W0I-8C!LJ#vR~0A*IOb>ZmUlGo>lC4STN5|d}T+gIt-Qt_DXB@qrIXU2A#E{ zu}Bh?XtK;dwyO2kUQldOE)r#Wvxd_tM^>){Lm&Vy0leY25wYCO;p7 z>}%KrBK1*9)E87P(aGTu9+|w0c!=eN4qvFP7drBySJYKAUe0|VmOU*K4`s{9uCk~H zQDe}rAIQFkxx!h6gR)HRd-QS(oqU~1lnUPn z0bG9wN6kbgrFNprB13Jt9*HS>u9!!tzL(k7lrkX(7vjX`(2fXCj4dJHZAVb&4_MZ#=PiK&jS)vuoD6YIHu26Yu~+y9(TN|4iY_m1 z+WPywM(s*0$A*=-1?IPvs2qP=_I<39>Y*)(NvkK9${*mR*oXv@_gP593Vv3wP|p%% z-_EBHO17#;#GC`k5J)`{al~z!&?R|{KpzYfg6cvm5Abu{3FdRM?p~cgtS-8}g=Jfv zs*A;-U}KzoP?|B+^6C;nK;-Tfrc8K*UBYOT;zq*k5NQymrLwwg552lFwt2^MWL$V2 zdqdLob6;O1vJkuybTYU*5u@NM<%)JOM3*%wMzS*OYx%pPVJ-qQ*Yr_wUJ37!w`5IU z!*t{MP7?f88(oSoB>DTZ8 zJthjU@QyeSu^p@IgnWnDzfil<%5blCZGV_!jupM-OJg%$Fc?84?!}E8wS_l5zHPZR zu!QI~^-c)Kgx-}9`C@z#(&m=%Ysp6Bm|pF&sv|+h_3_J)f<;#z7fnT(Xc(i|*CbtI zt|3_!CkiVDkBaq$EeZFpur?_SU-U(&&_WJ}rxnwiMBg9c2QkOX(xn{)3dXYR(S{!} zg)dU~W8yVzG^%sgm%tXH)7{YaD8pP z4(uw?r=pb{fEUzV}@k>rYBkQ;*Vc(|iNVK_!p z*jlwF^s7s1?$drnTtw>D&Q{WCPTpa4BnwY4rr z+uqq_T<5AiaB_;pu*YTC`nq0!vitaYXYKK|wWW*3SDn_hMcLI?i;;fWWEIjpQ&J;w zb00A-Hg@XlB5`|?i$$MGDQb& zpoF0CJ8-08sxa~!nBqyXr*bwmiJ_~?v76_;^I;jdoKi;S%qa+rvm-p$NV5fyX)-ge z%RW`oQ4*2|H6Y)@AB^Xv)yw*kwsUnvr8k!lD*+ zdU^~o2F9t4w3-~uZZZ0r^XM>ajWX3aSN6nkKDKBW#dy`Ej-X-cQo_-wqG??;X41|{ zSLX8R4GG(s-NTe(9Lg`+GSl{DlhR=MQGtz&ew4m6UC1}R(aJ|omv5lds8oJ$K~`U6@chi`Z0qJr6XfrboR^!Nxh{j

tDV{eML9PD4lszE<$zMDTg4Y9^P4=m_PxNgmjs(dZ zJBumz8H)_DapN2>hPI8ULE9!yr(O)58yplr4oYEZ&Y0ZKx##B%9sxZ9k6JZ^c`qBM_rI2fgb@#cLj*Vx*~Jn>_WERFC+mgQ?(JtJPF=P6fKzZ6 zn>&2)w)WH4z1inR8a#J>dIJf9zcM^nBib89NX*zbwYFZWzmqf|9TesCMnYiZeM%aN zj45GtAcZgwk^&W>6#F!AKZ5|4Iaig*=G z3Wn*;ZY4nL+QD9OW=S++bh)`ZG&uQbRHSv!eGy_$RQku^3Z+sS%sD?m&|` zJL-`OCxORwgFSvclfI~sB$>E0n;y%Lh*gmi@!4$5ruVdkc%$UCrZGehv4TKLWF9hz zNQ#R`f}p6_Clc_&8RQ#BeBPhlj0s~hZx_RM<=VW31IWslaC>0^-=tHlAFCO0)%$*JDssqvkju?`OcoP& z;&4*Z5l&+!C%P`W%1UTkv@rw~* zQ}(1}Wx~j%WkDqo)jN+(T??1Og|CF0ef=SF2Yf|28Q|&ev8Gx5+tD z&@>h6^q6L{sR87@6a%!C#`7`{3(DK+>s_KpCZ$$eVnALp+rrClHWcG!<dTxpgrgzmlKYEz% zUTOElUQ$IBTo9bW;f4+zxIk5kDvI43M~XuZTqp|29{`*vzSlFmnzdvnVXAh&ot^I2 z{l53T*Khvv#KS*jxW0nV7w|dpKE|E}&Od}NT>k)`0R9vB8t}3AGj?{|a0HKJ+kSF9J^iSAhmd_J0ff1n|#54tyK!_+MayoU5Bx6h*T7eS zkAJkZlK?-7`yTL2^T3NR8Ur&R`S})*p0kgYJX{67hT9(i1K``h z6Tl}w&e+$17l2O#6|e#PF_7&19(W7*cVH9v;^T~kz@Gr={y)Ga;Kmc>zP=9x4Gc8< z>ofSqR{RBO*q5u{2$#Pw-Cv-EeX9CRaioj<1|41pp9MlP(+k^S2n{3oK^p%0BEGS_ zkKd<(aM549LW0lX1IoM>Nr!aJ;q!TXo}`P{ynUs-?xYgVl$@|(BeDmeCOKTVTm96b_JWr&+|1R$oB9b)B?noZGqL7)L z7-SbSe$vncTDXwkbE+t97B1sfnAq^PE-)33^FnuJXxWN(Nt8Wh`EH@CxfJv3{FuW7$tgSkYy)@xEw|?AZSi)A? z5*rP%84MJ8en(|(?Z-u08lGv(<(@KjnX|R5ClVF$P{U87I+@BkJeK_i=S_``?ajkn zs(X@)EaD;pXEk>k)A`tx-z;W}Fw_n-y$35B(iqVJ5rs~t^HY)GzkvN8yaAFTPc_V>AR2MEI|5Nl61|HDt$wM_d>T}P&}^0Z zEEPl2tUqQq` zx9)7+xPJQ;1f!=4ouxiUM4>1RdFqViCYPaV_n{#_p0Z)D@26LJ0e%b;Kx7>ftu>$u z*`{p2Qc>mb1Etuk36qo1Db0+_a}5QoAWLmOmss>L8;^_%b(%YivO+cGori0rC}Ip9 zn!d3hWIL04a1|luR_@uOvfR$%45>`|;F*91?nzKsK>BN>;ec!$r|j+7qLiS3fZ?c6 z&@crFjD|?3N?p#Ui7#*y=brL4i@lQ_DvYFjVxq=bIeSLn>=g(c!>Kk%6gCY)wr{K- zDSi;{tsRNdrL&&Q6l5|jF7*}W$qXn$tvPAP_9RKegywLg+jf_fi$GefxlW?Pl$hiz z?c|<%-6(C+;jMS8spZ5u|cyCnSoApvCMCvz}^yx#j$z5 z*!4fYX-v{+$s$H|>NjNMUcj`h<4}BqrWEO9-|ITWQ8DnF@#rEH)PAR&-_&&7g^-T=v=WY@P^}(K#pz6r2m&&C9{_hvUczoNK{qhO-Je zx6Ge!DLZ#NxFR!3L-KA*Ym1t*)Hsb5ZUh2jvL)z5kx5Ni#ZV3B%T9 z*TFeViAMXDT^qd#FT_3l2H6zoIzrVQ4Gp`DTQg6-#jbGh*9aG)qR-}<-^Vg$#4bj3L`jpE|3b~HU&WfqR3=C8sZ*Oblr(j99j71fJ`;`dX*-1 zVM30R5ze4rQV3XV(7Zy@UXK-Nb%oV(y0)*A*h34-D08^hC?Q?SHPDCQAVDCBM-rB0 zwXUY8A}pJtG>r~A0`-DJ@{w%ge!uKyC_p&{y^OLlZ2a??WJcze^C7yZ(Br#4(`Lk7 zQSfesjRmTAiWtpOh7+SD66~Wo{dFPu(`b2~L0;#MwsZXGh{`4<|APimmxK6^hTSr2 zQ&;6xG{E1W4vqtkRq>`AfTtm{#FtXU8xld9M90aX-%EyI80Dr73#o5qYg??1H4vP-No5m3ZkL_Z*lD1+nt;XIDt`^DW22P?cWC{ z&N{q@pnl1VbeoaJtv|oVhxL)MyMUCU#a;D;;M=Cuj-(+H}O~nmu zAYNY6RM_zW_<;nmFbE0VVZuG26f`QM_5AW7Cbb!1(Ug@=iquWdvHR+5hH9_2{{gI< B9=8Ah diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Manager.mo deleted file mode 100644 index 227033adbbe4c2933d714db4c03c3bc4522d2fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74726 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 Trt3*N>E|$WQbmA|%-HlFh==^; diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/lv/BOINC-Web.mo deleted file mode 100644 index 8c5c862a221c487c89c49014c7e24bab0a499d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 681 zcmaJ;J&zMH6bv8Lmedq3D9?*`m4jdogc1%Ek=(7a%RvzdIo@|0lRZ1Ky?2C)jvs)4 z2GP+Vpr+xkP@MulgSUI+wn02;WXm)5oALX3#5Kev#1^8i9>QGgbZ+5V zYtAdN<~c}DhdDg}>y*))^!JB*19CI$1`}8s>*?4PDyRLba5OU;-dmwvDLh^w9>fvZ znHi;g(yg^*WwgJeIW0}G9u-WMJ?iCNU8ET$|XjB&Y@4xQB%G(&Ukk=^GBHQwi6}j~*|8_h<{vgjLKl@NfM)1;lVoJ1 zDAmieC^hl_D4RDpDUXBkaJ<|8TokfkV6+E~=2lA#>EVUHzAS~(w~3q!>%iZ6oIRku zR#%5O1WR|dG`Z3RC%u{S!BhGWG+5#5bep6=GGoex@+1o5FhWscAXlEIrm_+SXB{}H z{2{hDXZymzQusM113pcyoHip)5B8?sR(dgQCWrFon4-TP9Sa;EcK-G4)#;Bnr{BM> u-@V=<>-V45AHMwl{IPxe5v)#(&D}^jk9noubn|MI1&?0`2cuZ&I`NP=RXUqfi3%Et+l{JEOM*Zt9 zYsN>>1Q*r?82VBb&{>uqGAmd#9%ayVCmqFeZ;)>weSpkK)33 z-bv_P4Zio`OWw{VwDck2DAuOJ-l~pRdI{P1s>FUEl^Dk}l}JLX5N#AK6de$4DLPnm zih@C$&@a=B-E!PxPC)BWwz?Z`sA9r0C>O0tK1i7O1>7i`yo2NLdwn^L(dIJ>k7VgN zr)u>r8!A_?R83ftTDW~@sb>cO}e+F1f}=( z(IgPLDEPHo9DAxv!k&t>RB0}uFQ?Z*PuDxS9F)^dmS#Ec@HMHR=VQjPkf5z$!}ZE! GJO2Q(j-JZ^ diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ms/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ms/BOINC-Web.mo deleted file mode 100644 index 634472cf3d65bb1ab11cd95bb5e7797b8a91ea3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24737 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 Z&c(jB@xGenU^0l|G? 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nb/BOINC-Web.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nb/BOINC-Web.mo deleted file mode 100644 index 396a8b3edb0c11d438059bd2951b85c688c63b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9004 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Client.mo deleted file mode 100644 index d129320e5918c182bb428cd5fd205f4c7ed569e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4860 zcmb`K%a0sa6~-^YkYoZ0nD_gFY(+#Sb{CDgJQ%13Ux%6Z{_d{QH$U2RiUo@E71S;9tNmf`0?o zz^6_r^*VSCyawi=?Ef3^W8j}a4gL%K3i#Xyl)4PIz}LVb_+9XqpuG3=2bKC3cm|Z` zV{iw22RsY@8*It*rW5}y`mKno7R--8mTb01df6W~6$ z3JyTA`)zOwd>0fypLt%X47>q;0sJlaZSc?FCiv0|GBub_=~W3KjlX9DA&jN5C+eK&wx;7abb=kH43^ZsNpa1o8x`{J_+KYzw{ghKFf!Y z`5Z`mWR(r*rnR_^wr(%olPC*+DuHGm~LWQ)gqfcbXjU`WFuWT zUFKHLT$$;eJKI~^SM-g&gG+jxSi|?_xSyHG%Ccf$by#MZO^bR%btTnjb9q4y&g}Qg zIIH%|%2XF7ALhE}GG68JICFsSd+?p-X#lzjZW9v>O+G-F0@tl%B=V5Mx+q#^ZZ& z+H-zg__=S5qq?Q~+2IMSiR&phs@aoX2IJ8Nm(aTs>A%620+vD&1OHW4vv zxYJs^k5S%O-Zo+AO2YJC>~hQIx#<&#%#9ZBk4(yUnL73`w;5?ywea zrG+`twx&vx0jjg$CEPt`{HpGj#fj7Wn%ojY=ZQmh?U=iP9jOi{ztQRJ-P_yWz55o) zn8cY&N4`c(7E2lGQJEJyAKNhQ&ESw8pPB>bSbmE9FH9g*rZB}+1PUEvKmjU3f*X27RZWd%9EEnN|YSK!+e$(1mqyK zN4QFgbzzT+le9cYhbg5j{Lra^0}m7^J5c_PGQ2N)JdD`~$3-bYK!|XZ#c)`XL_|Z% zY0j?Fmx&j++PN3KW~nFbBf==mmq;{XR=s_U;OZ?1&T`QPi?BHYat!l4k zHF)J+u)x=-!4ps1S`u8Zdan+j=Y^atGCHRhu2ZN@C)8dg_`!A*+^PChd#*JXTCc3^ zTVZ8zEAPiqaJB5`LC3ZA%HD1#*vzcgjbMw+w)Mu^`nh0zEm%LVH#XWE=YzEiYileF z_U$B==CEAHvyEVVL$9s1*ZBWD>u#F72s)Wbb9myiw%$iz-!w@<+q|4j{XgHx^Q6_a z*${P_wQN+r#%pQ6M0|seHKW?@n=YhP-1o+5d7v+MU7UvZ5*I#ZkG4*em0R1lt}WxR z-dbDPbZJ30gAPU6_SN$8I5BZ5eb8hG&esn**Mp18b>aklEx4A_tEjoQzSxb6mAkdL~AmAa&w@zScTxTt3UIm2%$mLbA2K#-Nf z47q0-;4zJf8+DuMpv*C}@XgnxBfo}5o0P+XND;%#C337BXy^jrfT%9Vg#M!?8jsqv&2IO|^Q$#&8xGhgWdvLLvS)w7auO^HC=UG>6785g{@Z|}_vYI^} zcs!pzb{jU?m=H?(voe%ep9phvaW#!RZuJw1c*!4zFh7QD74iGRFJV%X>I)wC?R*-s znfP7LD>nDT$w=~BF>+wLT{eQwneN+xEg=os2Lp6Om5?#EDkuwdloBbK%fX>789~uy zsq;BUO_CR77ZLB#ui*J|*?eT7T5GB{Ray%9etal1wUmgjMCt}!)&;yu!i*HbeOs;U z#)oo*MA{|^YQcMDTwrP9e1RMrT->OSn5L-k#E&fq;heryu+W}f&Gr&c8F%L6%a&-! z#KuY7mv{5TGCCxlNlnJ%RNqeHLo`GB)E%n3DvPKg3Er(IltoiQ9OaPVo6OnXYngAv z(qlriToqvhXVg6`Us&mfoJZ{}Zbvq8| z3FJtY9?LJJFHi*0ym`_dSxgO`9F}P+ajWGLih5ox6&ht-l@=g=RE$MuP%=#bBdqd3jr9+as zSs4%6Pv$2quewfyD4va#07Iq&J#|@B@Scg71}M>pACOD6Wg`iX=NqA_qE%}yB}DQ1 zjw3akKDh~U;&%0W=+WZSQsPfDy`DnSz%WG`jF^ih-qWtkaeSYnob+7JUZLcIsdERt P+dfE=zPgz-_^ti}^RD)J diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nl/BOINC-Manager.mo deleted file mode 100644 index 05362aa0521d3e7a34355236f88e320d56c38d05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76321 zcmd4434A0~xrbfDPP6Yj6a$l4m}C})Ei6N3A7B-2sk79nv%Ke= z_bgTQi(R*PN5t>U&7)|4_~gD(^!hEL=&mDV8%1|4jiTM*7vXO3yKqPN8;G~)X?Os9 z7VZsqUlv78uo>1owdNg?quz!hPVk;a2c>a2xm}+zkFV+!8(yb)T1l{pQQv z-&SyY?016O!u{c{unCfc=$OC`sQZ@Tp77GZ8=&I*S*Y|p5bPg@ir;@hr8jqy-{(N6 zd^ijq3QvT(Um@6E0CnA!Fb6*br@&7^rT;oDnH){cY^PQDwo@!uK#Q>-x;hcDEHY=aylRC zzKfvZb5h``!T$7MepO%r>bim8etxhY3HBET`-_A9o1yak>cDqHOFvwI{pVm8d=4u9 zXCWMOU;(zmcR|JPhj2IeGpP7K36*az!sFpq9e$rha97Nyz@6Z^Q2ADd2f{003_l+D z0Nfe#pW*KCC8+Y+4PjNh_lL^oL!rvE6)Iobq2z23PK9p@?w^9X@BL8n@N>8ed>l$n zo`;gNE!IZSL2y?n_qlL3Tm`M|UufK*jeesBmwGGvKe_EV$k29*<+8(lG!ff3JmVM{a_jg7?CY!}VvlJWf8- z!(9$vjs5vh`S(Mp^gIN0{o_#KZg-aF-+oZ#dL&f)dlH-idteK^0$vU8ge&1GXGalD zUGyH<41Wh_!rjjC_UJ@77jq}P0KNlCPIi2i%gsJe@-z*q99rOfcpOyuzZQOk3Uduy zi20aTd%nL8D%{UO<>wPn`TTddFMJ6qo%`gyJf^_?FtDF9>vD80l$_iHPl6A?W8q$XUViOR_2f*r2fP$+1K$I;hBrgy z`>nzLtMCfU_d}(7ZPC-+1(h#VsCeH5XTy&{rSoAZ|4+d!;6I__wb^-I-a7=&fRe+d zQ2BW#RQ{Y7>|X;V-*1J};SKO8cpsb!UxLb~rhc!NN5j1_p959y>!H&5Rw#MA8LE8l zhKIvPAR-#=JmBF~pycX$I0b$hDx9A}UH4b0^zAU{`8F9U-iN{M;IZ&vxD-nMif~JK z3ET!=4(0z^sQmsQ+#Y^B@D8YO?uDusKY)_wzrbdgD|vWFL#5{gsQa7_mF_B>0j~(| zw+HthK;7?2sC4`dDqnUjdp|NQaCzW)Q04X(sQX_Hb-!DouDcH^pB{lH!)KuC%lsjC zKNs$Rc^Ga5FNVs8%i&J&YN+_$1QnkzLiztG+!_83N)Dfeig)gOziwBke3=XPPeY~i1*rRMJ>u!#9qK*@!98FrRC%q2^4AS@{rOPgZ-A2jH$nNo2Fm|Opwe|` zFn<#&9S=jv&F`SeEmS%D4JsdBfGVFo=p0qw_JdR4@i2y6Q1QD2O1|C)cZFYud%^ER z#pCyIbNCWe_?vBTx!xKo9S1^{<6%(wxeO{l&J65>y3cy3_URh954;m9-aiTEN8x6e zpMxs5zeA<_;Ef*dW~h8>hmx;OI1dg&-R}cX;e9HY?+CmPDqnvLm2Zy*^AoTc^HcCt zc;IWi-yeeeVE!Of|MX>eCVT`=g-5;C_0@CXGR)UQwI{!Yl8+r<=ly*PRD53rXT!l@ ze5*Go`;IpOHk?E=0d-2cc^q80#yzzQ1@8`C6{HWdUHeIS78h0$Dq=?+v`0) z_J^wfheDOt5m4o{04m=)pxT>GxIe7Gz2Q}GPk0NI|F1yF#}AEC8 zv!T*+3{?CVLWQ#uN}daW8=&HOB~-b+6CMX|gbMFrxD@^wD*Z>i!SnHCcm(FxLdE+t zQ2G2dsPKLOCBF|rUH4y5@!jT)-k(i|syAz)t~&>+J`cdT@EX_$zX28R=8HYvi(nV# z)1mHrSKtFs`Su7@`|$!){CB*>Fgy@G4)=vyUh46Tq5RE*O7~(Y_j94-cOz8zAAtM8TcPgrpHSuVYp8tt zZ>a0H`wy>=Q=rP}6e#-+sC1T~hLXo;pz6a`Z}RvZ4t3vS0~bM+*9xd|ItMD=8=C4>kfFUr}I#_HRhwB z(mx+=2Tz5|;5ktF`(dbjxeqG;e-3rO=iv5mx2yd6IB+ghzAl2g?o4y#Q6e;&(>T zFX2MC93Jv6bRakg-wi(ur^EReim(Vzhd+Y5!pgvEz*fw!f{WmF zaBuhvsC;`4s(x(w9+%gH;Ley^;a>3MVD5s-ryATBUILAXEs9gN{- z@AYsFfx3P^l)SV<#rs^S`)-7a=M_-pd<|5+xH0gfQ1|&9lsw%Hl^@@Ly5A#E`Sb$R zeR4N?z8?rr!aNl&ffcv_ei5Dk{{dro?EAbuIUCNyd+?E%{`9}8av zUk8;xk3gm8uTc4yd%xGyL!t6z8T>L_2bGRJKHxkE%6)p^(eNP5OJNE2LdnO2@Id%i zI2rEvLC@DYQ1M#<6>c6X9{o`H@gHyjd>2$Z_7GHiviZ%VX%cM+yc~1$hg=`H18%h$ z<39K$?4S9Fk54{viG}&){%rek&-dw2@_QUS0JcNr*ZENLe>t29-v;-9 zUx6pXpFmxA@U0%tqoKl|50%en2Kx>0EX)_dv*9D~aCppZp58&I{J0#>gx5jE<31?4 zehexe&j!8(55v6GCtN<}!Wi>fxC0!4ivOih@_i$eyng{wEYV$1^7R!c|38N+hbQ3n z@Oh~FZTU$LcL%8UwgoC)C%|pt+3--<1LglM@OXGFRQi7aPlQjwqu`uRd3=g+JIrr@ z%D*e&TzE57xIcx;pI<}y+vC%oKL^8|Fwcfc--%H1Jp-!#^gzkQ2KW&Y`Z}ocn({fn z&#_R~uYp^@PAK$ylAl#j@>z!4!1Yl1`+BJS zek0U<-W2Swgz|SaRJyK%O7Dl@F7T63@^eq%BXAGQ&q2j!hc7s%K$XMsQ1#&~sQeg# z3g>F5`uqX7Bm4r?_4mR<;GodNhj|WExvdEHz0k@DD&JoZRZee)3hyeYe7hd* z2|oe%g7-qn)uT}UehrmRPX_lFpyIj9m;L$!pst?-RZh#G@}~#x4Br5C{oA1A_I*(0 z^qJs(4^;eq2oHddz{&9Ma5_BTZVzuMRC#nl#q$!V{J#Mzo_~P*!@t28?m{64lQh4N&=UVc;cD@_l(QUlYvl3cL~Ox(@~Sj|KZr1^e5B{awNSYr%X!R5^SP z>i$22ZSaq<0%v~J^XGkV9_Cx2()DX7xoEk^({&tFd7S}eKM0S4uYpScXQA@tZYVi; z5FQMlf~p6*e$D0lNO%zDbD+xUbufnShLWo<2HpcDfA>R$`wOV@c@`@C-M{YT(*jlg zr$hNKLzU+xQ2yTvmF`=i>i6C75cp%L@_HT~2KV@e`)h-TVs3{m@B%3Jk3h-MkD$`^ zE2#TycCX9-_E697f| zhjZY2AzexIJ=hLk|1IZ_pvryfw_RS&h04#j!=vFH@Iv@BR6Yzn;Q4wP+!FJ3Q1N&l zY=gH!)yKcWCnhl;0~cd{{JXAC%>16`TMtyZUk5jbpM{dg+u`=`+fd>B3{Hbjz-{5q z-*@@k7oLcD3S0ntpyc7BaA)`xsQmaoRQ~-QsyzM*JK)S8cskzzXJY;koDP2oCAa^8 zD(@|R==r@5RJ}L>%6>VNyuAvx!q>og@C$GX{1a3@?(!q=Uygt~V_pfjgXcn}zaOgJ zTpD;2RDHS=Dx8Pm960I6J{~(9>iQzw6%Iqm-*p>PMR+*o3!voZR;c{? z6r2nnguBBRpsw5TA?N;3?lYkBbp=#BUJsS-cLjbNO5VQ$C5I0}$;t1aF1#M@0>11&0cAc1#&87g z3*Qa5fuDscm%E_i@ja;fJO<_OMX2)M^B11}7%HDz0#68B8Tcxw^p@cM@OAJ2cs*=} zcR+>rI8^$c3hvwg(&IS;s$3R9`fH8b6RD9kGB`0^n)8P-G+KCyz_IzlEif12GI2E`B+z1t)*TVzhRZ#c;1XQ{G zFz_*`a(fmkpL4(Q>vn@`R}X=z7bijaTMy^K%i%%rD^ThEB~*QQ66$`>1@oT2_4phN z<=zC9?{lEibt2pnu7!&C*--b%L&bj>n%qI<LF z2&%oD8@LcEe>>nbScOX84RBld8K`#PF1Q)|Db)23LA8s2f{OnOQ2BAtlWso`9*=ne zRDN6p6~C+C_VAs7AA~u~pMu-LJE79~O(;41Ib02Q`LpX2oltW59;kSK8Lokkz-Bn> zFWzsQ16N?a0nUbhgsS)Z{nh8~j)6O3z7Xm@SHctEy-?}d;wg{s45;|cf!o95;0|y( zRQ{}kJHtGb+*aTr@EuU$d@-1R31?#7{As^#Hk5p{LZxE?RQP$gGb}-s+w0*@@NKXO zegIB~_d}J_GlARwS14bo{Fxir0TteQsQ6w6m7Z&$(s2V+`F;%U1@DEs!bhRx>M1Dy z&qCF^NzZsWFN4c4p96K>hv6~sZa5b{50&4C{msjBIn@2ng7RO0ivR1N4^7mt?@SlWA&*m?9z8nlCS4-e-unJ>%8Ps*RK;`FG zq1ufHg850f4d&;e>iwj@d$==TjComL5lWsehf3G2Q1|~5R6hL-?gRe-kB6JT==W`d zdtg2T#;^>PZ&yRz_uWwGd_PnL1R1;Srcyp!|13g}(td!>i!_ z@XOHT0;+spfO4PyPcPqfP~n~jb^i;Y^6#xs_4UqR{xwv6+wrBKM?u~H9H?-w4g5M( zzCHtwhP(aC%kdO=0Om`e;`srnblm}Wh2MvJ!{5Sv;Xk1K?G;Tjxo?Jw&wQx%qyYDW zZw}@ULDh@)O}wJ_WMklWaWP_RK7Pu)vF`nac~(t5MBz^KHm)04t+eB z?|`cRUxCVxZ^7B{X*dT?-fWWfw;fRB_hzVYJ`E+WcR(N zpvwITsQB!@rQhcesQAx;3g_s+1@Lgpr$AkI5tJO>221d3@GLlIt4Y!M@JiSR{{{D= zIzVE_U#ho@kE5vmzmn~SdQha8>0=y1N?*0X5as6I9dAgSF?D=piY{PvmTmjz=C2x;I z<#%qENzuXZP^j>iK&5*CN`Bt}RUX$v$;oX{a(M^T^^Zb@`y7;ECsaNv3D)3tKUt0hRx6hsVPQq4IC{J-vL7fvYfYgh#?}LB)I0UXx4@*bgqnycnw7 zuY`*4KcMn)*S+2UVNm(77%IL+_#;?@Y8RI6<2)5AU1tUsVT}0#xE@{ym47?$>+&!c zs@|Ut75+s~_q`da-hLUXJ^D6Oe*6J0f`5l9kNNv~dWYbFlgLka0rsEU-_zTC0QpY+ z>4x9IzIKr3%YxY3sf(e)y&9@~-XHjBsCeE3RgS-fl9N9N{tYT0UxWl7?QyWT7kk6S zm{&r{?c1T^`x|&PoI2Utr&mLz`)X+N4%Oa03f12H4Jto&KE%!QpyIb0svUVXlw7|Z zsy=@b>iX>tbvc;~CFe7s!dVU#|3NqcYw!&CB$V7Nnd0fW1nNFFLdnY~U=#cuRK3`~ z$-_S=a4I|o`&n=XEW#MR9ZC*950y{ffGXEtz%Ai(aC7)isCqeRs+Y&1P~|=cO5W!~ zg|if@Jk~;$*9B1R$(y0l{Yf|t-UlU*e}zil^U&IfXR z$oy1~cO)}D4F8PV8}RoYj#lixg!zY@Z_Tlc^OkV!(}9O76ZxHtdyeCD?7xNir<{M5 z^Ebj>IrKX$T;nG6L(JdiIEFB~gXK39M=1HyZ+G0OPSLkHR~<`!iwSp4#{62&cf;5XsoSoL|W?h@bu7dDz_!uZNrA_mFVi0^I)-``2RsFvnq>e+B-KBl)exjwU;L zC)DpOxFDR%`~t^9o$$LA`&EQ}Kj)8e{0Q?W<-qR)9Pi+Gim=+SzY=~y4*agcJd0x= z4n05k9T=Mn{TAj=;CEZ>z5~C?@jU11gASK}%=*0p{uf7AFw1T(=O<*$EAg-2UD$2K zF^jO@0{c07IhNvn8B{$wo%45ad^cR9>)y(d<0#6&?>gMRYG=&vbKMHU)9;JeuZHj9 z*baOBj)JPsU%{;t-WKeSgx{41ephk+CES;Ds0~p2qTgX5T%AA1QN{gn{65UFSeE=& zVE0GN`ZWh?pM-v|g74xupF?d@H}3Zaw-X^lh`w(We{~f`fY~Rf>kGPzL z+pZkfaJ(A#&9Pe=;`jyZ=)$5q@w+v4f52Vs^H;EYmh;I$1vt8 z#A67z4Va(B`~v5fa+EkfpF_XD!lSWU=0^K}1lJX?y9U!~xc`~+9XO7}yjw_{JpKl^ zf58vHx8lAFhkk#DALqD*;~Wn4=j~i~Am`cN6Bxe8wfZfBKk-xh|5yB;!EtGDAAlF( z(o8rzb1cF9Zrr~R!qgb(>~P+J+rgaQAIx;s(PWO~cLe8qhjgHpN59~h$*~j<$76pd z=lWgF_3sboM`HhJ&cBb{=iuw%N$`8Y{XgL$T=U~#-WUI;;^&Q+e}nxe6d=FXVcrow zVc?p`iGL3Vv+O48AHM?r^KcSwHO_wk zr4wxl_tS;^-p}zoM+JBNaI${+X-;zZ`2+TIIKGVeZE_61H*vlvM+fGsI35db@8$fZ z5Y_`wW255;=S6r~@bdutA#SgO-+*gyOMVw)-U0uoVetdbZ-5_z-wW6Np7Z4QC+zOS za1VCv!F>sQJLYTQZMgj|c>WSxi~X0w^*MMLcCW$T`#H|zSjl~N#cmbn`W*?2!T%M( z?lr;u58Qtp?96lccOrZ}#|MMI#e}&h=W|E<#cly^`rXa>!Eh(czkvS=et#fGe%+WK zfy;vb)=XHx;@V$w==U>@U*NVS{@SrS0`oA(9@zaFHeq)Od=`s8E!lsbcw&3p^_a2Slz87|9aO{oU&Kz&#I0OH; z!Y6V6Te#*y&QIZd2KL8td=~R`%T+guz z^IPCP;hHRt!*B`i`*3^>Kl*LS`C31<|JxJCtApD{__pA76X$#2_Iu19;{0D+r{6Z5 zf8I~+|6cfcGj;>P?hwx3ir;r}{Fd`GvEPC7KXR_$#gL)IxWA>?-;DbkaD6o6XYX+B zG`LLX!F&mv6#RXa^T#;95Z)KuR|o25e+%b%{OrWBmUwRse~$eZaUXy^^2qO1*#C@U zZ;t0Vy0E(w_eJK43~@e>qk{QTj^{Yv2)Dqmej^;$a{hblx9510^Lf~9!TGM-_esuw zgx%MJ|0USz_bBfAeG)P~6deTj;`lu0?}IOL{4QMcA^hEKzUiy5ALRTB-2MRn%JC7- z{|GY8kUx@wH!H@7;js?M7#%(6YX(D!gP`?w2`&^Ef zIR6KB7s4965}wa78Mi^qI|u()V3+*9%RQU0UkyJ6{~6*V_y54WJI7HR`pw~(%=uPu z1OBS;Ai`duYdOx#T>D=9eFXR9Hv@lf3huKxAI5zK=5KMV$L=`% z%!c~C8QuX8g>Cq|#cT-^ejb0DWB+lE6~X>5@Y~o=!EPtccM0~wF4$#%$75cD-$#Sx z*8~4M_$%S2-x}_#-?bbU;`S7rmkH~kaDFlNKjxZts9#68?vug&$JpJ5dtc^S^BDfc z*k8|aJbpSkz8U4E$O+-VpqqirYmQ zzx|w-ac{-_;Na)ynD@v2B#w6nyKivb#c?v%uMc)-;qOx%ug83Du-gcq!QTNKE%+V6 z{4>t=JDX!C&Ogji#r_G7w_|q-{!Zf1?{yrX!~Itrhno%K9sC^-+7+S@Vj$x-I~?%-z&%yWp#UT|uNZyV?D!H<61Vs|vh4VeGI zu^Gqjxb`);t;7BV^Tjvg82!~m*aj*2uIeR<@gVdkK%S6+#h%S-okOK{KeBs z6ZFW3Z$d{^dsT@}d z)mo+4RV$WD)7{%pzPAwf6bJBE9mx;H)uDVBF|;6ReTA5ab``4Ca;5qT0oBSiBG+B4 z_InrvG16Bk#a-pWp&y*?AlzA<4d*Y=FqAA_{#Vd3o z>neY7Q(s|V$WBHIopH5T6kSnF(Id2n#JRP4$tm8lhRD3*HT)fHu9p+uTS zI}MF>DwQZBLWvhwD#}+6KDAwvC*O$UDC_oGzBU|!Uz9Hlay?d+TAcO2czvN%i%%){ z`sIr+DAtI1si#;O%tZW@e5rR>CDdLR@Tj==m4%v#M)p=K%e7*fEcdUxu*~=Uvm4fZAv(dM#JEx(9P7C+U!@+@JSt=u zB2_AnB;j+}=sV<28|o%INlSiUK(ee#SB>+fZmL49vLSJ)Rj42cM%Ch^+f;|UB=TcNb>-oK z?s!9aI36hWn@`f5y&&J4FP7#jo})snn!q*$wtAqDuNLBg{BVipNCmmDT&h*d1M%v7 zsW8xdLRu~g*B8jW1sQ7#Wun@?z`t&&*A`JthK0#PRGJ#dAvVAb-K3*)N$vAo~p zc+>;w_By7Jl{`yRHmo4%lw(6tjh8rDAxqiRw(j+L8j0?+M^z-M$yA!t(r{cJvX&u} z`@=)Z+J;~|>Sg1ultm>TD0k6RrVS(cqKwtOrDmY5Gspgh)emwf+eX`D0E|A z50=x0I+a_I-w;zZy3293tlD9vOPxo!`-($xxe^Z*Ducypm3EC%sTA;3qX=rM9ykqb zI5rM3suYSPvYDDQrP`94W{n`x?k>b?nXBIczv<9fwOK4)4ETE*VR=XrWqT|muM&}?z!&8 z%nMbP15wjLa=H>PD)i)s2Wm2w>2)0Ox?+i@F=|?*9&ETuSlceFRR#`g?<@Ay4qFs8 zEgqynQ&T`ET2(%tvZ!r!ynIpXC@0KI=oj>#+Rzs@EmM!xw6btPEj}SIv_xhu&x}ij z5fy(0S8v3#w_X`FtvZ>*ht3#WXy<&CLbm}lNpxj(DT%zq8$#3Ai zokC6%-`+>dSuRm4YJF6?5F~X1+}3in$|X4E2}H+ zBFog{n94M5;q-X!?AeDm&z(JI9{nN>T?HLvgDG4@6#*|5^E2ZGg-Sm?_J)>R8&zaY zvA2(2XH7v3U7?%6Pb>9PHPOMQDRWdP#ZsXgW22517klEu`NR2v=?rdLa%a$xcPY*# zi!UYY{j?f@q<&cA)Dq2(r>W%ItmLOhbEHnqiM#U~_}@nx1V##l{%Fo@bD5n2ZELQq z=9&#@mHu^vY>qISBi!al3#A$z7dI_Hg%we)))&jebx~@g*D3X@u~GyVt1Y2HIdNGT zr4(_a?;7;3xO2Fd?s%wNA(IBFTvB*C%lS%o)P{X$nUbP3E96A6LO)D#BKu^UniKCq zxJQNL5~{UeExFKHg{!UAP21a19YtGHXzQc4PMpxztU}Zf=$2SnZp~aTb%(;~A_C;Q z?p#Eek}FIZvnvb4vr6l-373*y0^onF_9E^GI!Le^WmI&6i$%{=_C#%Ii9Mp_($re4 zm}a7>ytlOY)#$5sPx7&ILt5)IR#qK@xz+Xgf#M)(E?m$>=TpDFm9iQv)8S6!tQuy$ zwBM_nx`;p&lKZz>k=YPsybw(FQ5n$sTXf7Kj z?Ra&pgQD9*S3(9gb}8giGH4j%R4WW3xA{tuc67LuUr*4gn`8W?gOw!g>hR!TzOn(2 zY6%!d^eSiRw-#T}H9)mSgK8TZGMmuE+j+iTWcZ~m$TV7B)2JzG=*%}o7Q(`t*&w%F zeGDoJ>W?e&x^e{tF^rgK#+FuSZ9`X3wF`nFd#=83RIfYQ86gTaGfD3X@1CJ7bf7rKGz7KZYbe2p>hDEr~T(N?uGb&L3!J-z2rhS*l~l^d1rpsd%Wg=h~9Wc^hNy|iir zra$y##47P^PZn!B4H9s#C zFyb1jmgx<(J|;N|4Qf@=Wt(>3y@N(j`CNCg#|G}GsX_UnnMVHAyp>BP&h(26Ea_i! zN%OzHNat)`f*4OlX${i`HWKM6TV^T{bx)OH>*r1JuAp$YjTd1xkWyz-_2U0GakZJD z5)PZ3}KTL|bqAA5L>#0?$XC{Ew zc%`(udMjKH+XhW2?@=2g9@@UN^pa#usm`C!En5NWzN*6^sF6J557L&m&KzN)^_#+A zR26s=ypyL5y?Lx;&d;q})v>rWPP@K5gIk}ZaD}8;GToS#i~QBCOrS|w&h!=aW|cx$ zK^;j(8!)9MM0>*c6Cn%G<1vl?r`OuncuLEh0cPlCYCel8E@eM$;lCdo!+=c+se+PT!fYePg!MASz9oIlL$r;mCOC|5WYrYWKk`hH)z5;~kXOiP6cgV3@k zq7r7z{*6l*oih)UX1r-fu5J>K-b#Kj8LL#)z;vVTc2QZF)37Efnb*;c8HH<961A=G zZShVB&9xAjI_&@Bq|0>`Ihf)R!pdl6)_$Ti)6Y_us~gbK2jhG)_Q^B*6+&YkEnkmO zu&mGCQTfBHtJ-60bJKagTnFvzpyn|&4TYw}u&f$pA6j#{In!fil5DC~BmAUDXhs(H z6}tLeQwjZ7js|Uzv=1h8Ih3afKIvetnU#4Rmzz61UX5Z=R_n+dYhi?x zF+tK(8_^610^iBZOTV(fa;qgrjCzW_p@!R>$*7B|@0!o@%w^n=Ys}_R`Jus0eDv&@ zxmSqi;nPi%SEPJwXA0j18$y##yex?}nLrGX&k#$yJKY;{WWH-EPo^_HR?K^>XKYP( ztGOn1iE79PZQ_K6y*_Kt#A|`20ESpgi@o{I4YdL_+{2*XvkhCAR=KJX)XJd4pnv-Ge6+C1r@+%rzBOVULr2`nq~9Z`%r?FUbM=t{-H8GUlito7SeF`Qr`=xj4o!X38Rz|nu$c) znCViMid5#Jx#iZ(N;GlLF&fAj^wDZN-gSoN0`=%Z0gGY({&AmImC>vX<9!c zEjl5ZN{w;5G`(dtvAdWbV5Pxj$0xxM9@SS4YE1V3SkVWoq3l2eOO|{psa$vX{(ZX5NarWP0jk+=7lX7)C zPl;&*njEa=*CXZ;0z^J_BMqF;Afzq5S%k$P>UNl|A|`2Tr7CaMF66WzS`0}wn2|gR zq(&a&ToDQ_Q8wlE<$aDDitB0(PNcwB`zR9Kn933I%9f$rhWU@>i-M~X(Ud8x5RI_r zMM0KF7+v~x@=JyBIiyjR4J(lK7O*R+pILbzxTNi&`4}2t+S#YXX(Ut+8rmWETp6Sm zQ}NMALVHhK5ENHP3y8nheoL$j>JySsQ!^JNbI2Ysaw6%OQ3sRDGU56(XD6*qp-`gM zg@84TT-MRCI*lunbCm|y_Eif{ZXeg#veV*68F4FQ)m9)w*ve$HO@a#+E?%jnMz#yf zLmT3zHpZoX<_iuMJ`SpcVM;7`m5rLJ#8&r_nV^Sk(oCYnm9BdeyTqeg%j+1Yv0+#* zq`AhR!VfZ~Rb*Kp4Nc?rzVd(#debFERv3CHFy4iunde&h)QoAIU>?{S8t=DMfnZQ z<(_6u9LIDr6()m^GIfpJn7%G9}FSLFn)Nn>Z}Va$Yhw`x-zjO)u?Mf&BC zFWFI-cfU3Xn@o*_NlyvsuvU4!s|$^?lsxG<>g7!L%9phKH;4!;d>fjz5SeOMrDzK) zilP=O*&$H2h(#=M4>YrCr`Bw3u~K6i9>?N(-6_#rk`5EkK~=AxsgctvhE;vC)H|4k z-Urr~9k?J__x24FrpMPUX$dg&+dp(dl&#FEYN3Z4(oF`3#+aTmS)s4jx4L7p$d&qM zz-ZeC5-(!{lz{lcPOcx-ztV&MkYHO8>ye}7Ly7&3H zi9&q2Yo>Kb=}#vI^312vyEaS_ClfK%mg(FD4h!&XF4+L&*Z`Ugv%Q$?1UF< zWd~i9ft|EbwmgNat6HM8Rv^epSlahn(n^M|Ih4srX`q~^wy?0KlQ4!)&6I!k+)FUs zXOgI4i-t86rtp~2Rh8B$!i%CDEpF207yGYyr=*G0Xj=Py77yfyP@)sY9h%(=mbMcs zG1#nC<7#p;?a9c7WJQa8fiD@dXR6Bl#Enk2yI8e#!1XLYXx(j`8jo+S*x1T_D|(hM zrz*niHJH*pHCoJ!2&W}GypLU@^|Rbv*VTbJTR^)|+K0F9b%UsCrv z%4M-!7)!AriArdCnJ*~P|3r(`GLXSb(hWq++odzd$$+TQHMCZlYr>pSGT}V-ve0Ra z@u1yy)>e3fnC^y1^!p`R+}A(bN+n6trX+37BNq`xcN-oW--QN2fu~I}ssV$jZYp^% zgH64gW}=cUOttdW>H3t7jn%p~u7X4!mTzfE6zZ82DX~@` zDfeC`3~fy)8J^DPqa_HwDu8uKOX%)dKVHIij@D@D;#JK@vJ{-;yOu&+f|R<<_+pGh z!x%%Zwil(;J2Q@CYIHtrdAw%z!q|H7((qs>`uWlVTUprs7?`96GsFBumr2L5+D3*b z$x)k1tO-IDmB`becKcSy7Fz$hmoP|-(g~34^vHypDaZA#$&_g6K)I9hYp-{oHt1Nb z0a8>yWs9H2AJUp^O2=xVyOYWCs%<38P`Q*K<0?wJ63#tDKpXdTN46TTJcoAk4aO=lse)l+IRVozRpv(X)E ztjJCz-BwBMV>-?JZ$PkE@X{r!{w6yXa1z_l?##@gv}l(Xsb*hR7zR^lT2rUWXtL90 z_PDL;ukD<$sg|7Suzm-{$c${_EohcU@=V25sU+1ljU$sg^^Ke}b3}V8iR>>FP-!`_ zx}H>+AU)NYxlU$Pf>%o1Nd@ z^H3h{Wdot<{KOya-9>~}gP^TbpnPcwHJ9blsl*+H{NNbNnp=9W))tl)PcGDVupvKG zsbm{b#s@+9RqPQ+&l_g{(ssWwj0Qi^$qO_?I;&bh*YBQqgY+rOm##|kFG}|GwsJ;w z^lk{9pk+1_vFy{LMwD@~U6#p22LeCJrg2?P6F%-i&2ML=Jc2%BmMp1L3YL$OtE8am zZB5FlOzXzk1Hkv_B;lFO1=h2K4Ii%HrY&{iIZQ4GBX>jGI|uS?0b(1IDwj4dqK%xw zID?JwMAT*}nXIsZakld#HQFP|ws>|IBQxIFw?r!}zhh*dtrIKAK1x?5xFUZ+Dr&T~ zrnGksYsFYj#lhjhw6l)2*q_>ZHy!MJJByF8R`@=oC@>jt2V*s{XX#E|jBAgr(F!yq z-K-%3+G|N-EuP^#ld;hXZKzzYjd3dwB6`>rz7Hc>$r_OTQ=^%=LbZi@HQ(G?qhu_q zzS`DLe7j#}8FY*fpY5fo$qXvShC_W!%UF*jj0q-nO`RIXRi=P5*Pps()Pf|eiSA*A zpmxe;E?1H{9Mx!LIZjrUG`tSm^JSe5QDm^}PnUs}U)IvHT(FWvYjr?Vj`lDHHZ}Uk zWZ#ZV>4oMNZbRd)Y}Y)NCWy_6j;y=YZkDfT1m$MOgmzgY)PkTuqFsx;L~=5_S+Nzzg|7A zo+!a2y`mbe%IxB4jZ9%lHMZ4ZBS(~+v_`9og;=|8qt)J9hRjzS)Ow|5uZAPD*E{&u z#DR_cT4&AD)}59ryP>)?H{Dw>Z7_tGwEaovYBe!g zM4Q5(sgJ!wJQ$$|2S!~&;Z(xD?M4@RK>EUTC-JBYty@l%hsnbTO%VQ zEy1n@;hHt}(zIV4KY&hF;kttOWJ4MgP?|`aMONyWPb-#&Q65J}cT|=p?x}>Z2uOO- zS6s&$vuYK>OGbFBr8uD_F-p@${~nEO&`f;ey&7VBh9aav%IKzDV0xj{p0WNDP1W~% zHH2JY#&|U~ocUt<&h(6~F*EE_tzGR6gjR*Zsmi%Md8jP)&|updvsXD?SY6{=dM5N5 z++*6L1va1yqvL0OhVs-WTUF9iIe0Pewk<{1 z+2Uy+wLPo`CKd=YdFZ~>-0{FlZ-G(^HuR;+*N7QK)V{Dg#J1K_Of2Un^Xj^Rn&4!% z>_prCjWc}_tG6W1F7_Mvl0eobnT=CR=sizY*SYSw<$^&PQCfP987P6Qwa?&N$o1J% zibzv8W?Rqp(4qC(DE(a7SIVe8zBj8|Ck>0CiGr~vnQx1yY1@)b(oM&=#!;#w8C#oB#HFAK5^@`*s+)#f zPxx2{g^~8?=~Sgm`>F!sAVrB$y-a=ooM*m;ZQG0eQomWMWLUSFbY8TWR5Psw+QM6M zH@_sv9K+rY8wa8>VP*B%2jiWLfi+t(jS3J?wa54hQ#WN*XL@=gd;HXgnKprCQC8L^ zH>c5D6IO>%6qJh0>d;KvNUx5ASojXQ2CIw&`QlWVj@V$=*;KaOJH1D`|2^E3SoqGf zH9q}~1X15dB}|FxDJzCXK5r?9VFok~HPT_vPq1L}FLCoS z)6{^;TXNUL*|huARh}(f!%RetDqC(SJM&_NZSy9wN+v$S-2ECJ24zNNtcyZUox<)o zn?6sc2NI=0{x-y@@^*!ustV6lr`tB!=kIP7r(`oHw(7mg&t9hSk92I*KE6O0Y%th4G|ed%cq)z@Bo{ZqFy!D9^Wb{YLYZ1=o7W_G)YOtXU znvzwFy46^lkP!@5wM}0GCidnM(_mk}RLRc-ZpP&HnSLlN{Mvlf=vewRcXq$Crn$l` z#yVQdY3cK5sZA;AG0ld!)!k_F8=r8qYm*51ZFECs5PZJf+|9-|N4k&9pe{_zO$o^! z>*6(8O3uW7Bn^pclKm#5swPS9`>iK*4*6U!A>WuXCV){M(ycEI88+Gz^I>%@GbGhk z&a+aL#z2EBQq&MtSxj`VP4(Y+15~7jI0r*eVHwm|(IvK~@tBR((J({^o_yb{YY5&p zq%t?gsV;F=TN~uWZ0d5NPJ%j$_M|#$0qf@03{WNIoJig%N2bhe3q{Z?Q5}L#sdjw4 zr?tt#(SD~hcSQ&eklWPP}u?b7-;6r-H71z4I#jNli0l6P;km&#>%H0Wum zsC|ej;E1I##v$s3Z8FWx47gp|Ssn?GB~$3WADu3gr+A5@Ru(nmp-1d2l=P~w@}fCs z--gIEaK6%u#!;#vb6WAX|6vDL9lKO=(@rsLNV?slE zed!_d2z-<|Pr}tU8=i|FrOSt6i8{EAO2Vd;+*C~?n+*BoscMeA&LiEuF7<$IA3W>h z)4pLP#5~srFyS(PIKvICku9L{+;E#g6);d`{O*?9Bt?TxC-l z_J$%Ghu1eO=<0A$m})$Ytt}naTZNi$v(l;@l-n>pufJr5=IC(SFyq;XHlliC`}n7@ zos}s-#$+wyyxat-QOly&UxXK%_}zFcf@LUwkxn`fPPfiuu-%M6muH_RH_>!AlAFO)J$9XwFlCY8+mMlKAJ>yIp2 zSzCe?pz2{di}~-|ClU1Yk;qpJf4mlk8kV%p;fWcSE#(mUY4YGtPV*)f_hh2JB~}Ui z?>zcr%kiTg{jnE}PzwJ$kN&7QMTEe0h6l+k;Jbhj~{ zSQAHvOnz9sWgiRU86HdLIS=ih(N3u55sf5Qb>fe`xOzHnn%38+CylS&d?TAQ=`B;G7pwo*qY;XN%g@mVicO%I>l z&>)3|qMGYweMYb2@OdJQ1!<$0mtva8cJEZXSOD!R%(SYf4ABPc_2mKH!Be29G={>X zUE@=~WM$P_Mm_vje~AhGOlFwuk2(%)n5hT+=)b85@zl1k8XD@%)O16S+8rMcB!!N~ zjyQ2$kKRNUo^D~P!FNWgR4wx3Y>`w7Rq@%7=r3ebNEDUNNJw^ku%4OkbA4N$sKv}; zk!)$K|NezxU26Qtrh?<9JhnBB-Mj_fwbZbwx5|vDr6?3}eJObCJI+S=B!#LXVX};V znZ|+eB_NW<&{WVDpAqChg-Y*h`a7FGBp%7uR;xGlmCI3g8bra@t;|=d3vxaEiK--` zl;kyy@2G7@;jV}&?>U<9iIw)@k3;$*k>!AG^QynFYKqT76?yH9DJ$q8H5O(I=x!7# z|8n?19wi=}`J#oMIm4B#LG2B#L@tL8VZB@z%@V4|Edfl`cJ&Vw^w>t2K)@+|FQxD7>Cnt;6P-)L>#9zV z%w8K}gKnK#poV*}S`-e!CQlS3PP$_3gh3h$C4YxGccQPV=uNv9YBa z1Z%8|2~W2_9FtDw+g;QS*zB08`KeW+b28ml}lUW1~r1as>dF^``Ly$^wEuPy5PBgEz4+wH5#I?fiRFqNL!+HJUA_BmFnop zYp_b@p-7@0_|N*bwMRYSN-l0lUA(!hF}s|kjm|-P>roPutMP-_N9*+TJJC@>>{%M@ zwe(4AK9NA=8eWc39|O5UPUTWzk89aC*zch0&_brC(%c}(1hEj`zh6famX0CLib7MLaNz~{4}BSac3y4 zcEMBQ8>MXGqhbOTb{4xb(o0{YEs-|HV}7tw&?a*m4=4{CGSJ(-#)_@zXwFz&PWpyu zZ_CFzkg@(ao%XM|GZj8eSNaqs0%@<-(tDwzb=uKi@%P5~+@+?Y81$72(Yo|KdG%eR zjQcg$Wv=0@-aUsNjSDOGju0i!YTy|e1s5%p0bxzUg5WRH?cAaw>KfMFp9&@H+((`o;;1zf^M_Xh8 zYnY`9>p~M=B#cjK-?rP?q%z!Ls_h{>cQCL0-&6e#3XTPl^6=2VodaPC;NOXgC5GB< zFZLZB6{LzMDZ}_Dedl78HZt6?&4$9Ovl3yx5gWAHBm?p`=Bkghz1k@IgSe?(4>OnE z!3X=QS4$0Ki#*<;wt;4=U9E(V&{2L8uQt-{VGb7EwAvQ ziX)1lRyXFg95e;YLQJM_@WGY)Ovke}0c~a$@8}+6&bc*b_1(lEY-;eDn~o5t z@UV^tXoEr@^l@{|2W84YFB}S^+eFW!DYYz3+Fjxq9&5@Eu=v*SFi&z#8p_OENVW|a zWL@7=9Nz!YT90}vtsePs$1x47T|r^GhOW!)6%y7fRNa_W2+cicNbbtKe|R?ClAaDz z%%?pi+F4Ra)6IB(lx=xQUMCGRX>V8t1BMeDt}zRlAlfKi(2kG)1WnN>$H zf_Ql@Hp~%GILtXpo71w5v~cfiry|(C{h!B+|ED2&6-2S3q)fN3_mUF?Wo56$%vX+& ziZ_vxu`vtNwCHE5ZK|sFZZ6h;3uHsOCR~lW*j?@_XMHm!+5)qPuHe=uM#45Aw2wg+ zY$@~16Poc#JpnS>udTFYUImmyS0x(8S6M45dcj)5?TH`Ra@WD|@R03UYK`a2o*spL zZBg>{b!fMEi?lWkdADXl$dW+vnss^h_wxny-De^aY4FVu_Php#V?Bj>4B8s$6ZImf z*BgHpR^k_y!=eUpW>9DiVKoYCfO-&>0ZHmCQgNJUT$qK z?N{qnm7;87oG9t3CMH!XH_cL3Vb>Cm9{XF9Rl>tV&0#(RHDP)~*gRm9ovaU&ur~L_ zj!?2uFB&3S!Z3oFc6ERxCj_WdWm&QS)ev}nmDMUCFM!Ypi`q9(;I%b~MHomV&&d}{ z(#NgrwK0T^U2I-R9K++tiBS`81VK-O|CuT&Bv?YYY+37y70vcPy;h#b_=zY=dw6W1 zQ0moN)w^Y*wa!R`M6Fe)Z{bOv{-ehCgz{LCY!nR7OzB}eWmxzei;G$}Q` z_j;t*%}qzWi8=A$^4ehXmk8QZ`_X6zwl~;I#!Ff)k4k0!(hj*bp3Od2Qf2ZT5&wE5 zWm4&dZk}i98`S<}f{mJ`_s&gRdDH8;2gBj0-h;BduC4FX4#Xzx*|RT!sQ4pI?b^`T z%6x*x$shKtMm7jwIDlyI%okfTd8%K}d?A711?^S2x+;{sj5XQT6fyQ1k(#ZuA3cvumTojM=?GUSKK*ULWS0tfP?&))jdXH?2ZCqqc$Sx7s!H z=H=bZiG7IBQ7!XwzMZ>yMYXrs-MnD9x7yrMZjE!RS9LTmBsN;KY+gif*2`r9B~+JZ{{qy&tV1-u85D@~%_c6mp!8spz0z zCXCj&G>}`de8u8=KFn#Et#@VeG$oN^rKXkD;tOiCXr_y$V`*~o73#_Hr*$l8KDzEN z?0s%t%+jfzes7JB?kv`Fr#Jgc9V~ULdF?-gi@7aFaEH^ISC{qT{pJO%uMDwf(i$&p zJ-fZqb+!q{(&Zgzd;C=(spobSwywfLk3(xbTD z_G4o_t;2IqH71V`{CHY<2ou^oO^QA^MxEx9V#p3{_Qo==_)2=SM%#KItorJsSaguS zb-h+R&z^y2*{jg6_PJNjn|2mxZ#8RDuuqQ3^Lo8at56ugLtkMShY$#jXWC|PCGXmp zASk}{Wp~wtEc=v5MDe_yUYg-zKQ4@7Xp>XLHMUHlCB{PqA9Tv&cpByYKm8KfD}0D7 ze58ywqAF*|jH>dkzrfScBwpVSdl@I%97eXPC)Icfs;*y9w~bd6s{_ORW9+MOyYF(e z8>||#CY*fbg>8CCX2VrW3!OxUTFe9Lc;Tu0PDH@()Ye1rj4&3^WV5cIp3WUQ$b4UB zEQSQG)Vq8b-(+u0%2;h6Xuqi4_ONTKK%$qs{USDl3>UkL>=*GG#1qVR-$F^MkEOx( zSN0*|Nl{9gri4$ettuh7BYE8_4p9y!M>jWxlze{ zmyA5MiV^n}kxB04ss?I-UI*yK{0dQ6#;lg9O(7x#!oyywWAxBTq9`;gQ__{m>Op4V zv~fmlAu*|^vYvG2K^9KKM-?A&0ikn7>)RA7xa zBW^C#@!H`5&xq`o$Y>kYrrLuHWb$Ap{*6If`Kknx8j&l}zw>G*CIe9Oc>~C>m1(HH zCHx|z;dHMFz-4jaau8yTxsi|Z#m4T~5KJ!AJ+%&a_`X(8hxJ}r5 z^C+d{(L{}jDi`v$UN1x{O>1e@=vlc>dyRM@sp}XFdxPm zVy#?8uL)l>!%XZ+_X%?9Ei~yoG*bSNGsd@8nR!#AOD}OExX=}3QjhL4|7q*M{~CUS>c4HVDIeizN!Aw&uRt#qnI4WVQ{iDupCBI~Y-d^hLc`Y4)S zh~kxAnh=>(<|W{?jMG+?I+gqS7}`?$M3zXEBg~w#Y>=Y%QjJHjUMSx)^1?oYu=H(}w>yKAfgNj*Hjw zj3MLvEe&)e3|`a!x)M@Z5l74wB2bE zb6QOb8~xszVKr{vxmoKgf7wPh0KxB+6 z*%QQ5yPs&mx+{>D@IN>5nZ2~1|i8otq%Scd28#`#2>VkO0vc9>lC zAd{;yBdXv+kL|A@P@=r^KID3MfwEFmm_o@1K)e1d& zVqP;zgL(FRg+6_3haN4K$dB&k={XC%rikGb0zrmjll#yt2S4fU8hl14jd@(5;R9~m zl(4jGgv=tM_BkBx;HpPzL;s&7cSVw4si$nr@#xLR#NNYQxU)uPL5uRm-m0lZnHZ%R zCNaSf1}t%R%V5j;meD#>WN)RUE#Tdwb>){!v%Ri;->qO@Q%ltm;xaAI;&IKs+SXuQ zE&C_l8ZA}i(<3dAxhkQF5q2cfgD6eXb7)n|tZdLsqasq1!Z<#A37V^#mzVR7QsOF- zH+L#}ua@-;ZK3vCIqM2)o7EYKGg__+Q-cuuN*t=HI@*_urnf?TpbaTJ+H3=2*Sgduc}rM7)3AOJ<&E+vNX28^p&Lo( zt$VU3c+-pd44ijgD5}MNYv*ZSG=%e}PX!xpvy3ftC^;y@St-*bi@papv1?`k!LGRi zkt39i=rVMxNG%4-i771LYPLul=E%074o!H4X?Natnh=^|@0TXS!TGtx$^eQm_{%3Q z2)X8$m=m=wQu0bnQguo_ACgA|eFR~pjRN^{Dpju~^FXjZ7o(|IDbGy47fsoF!Xk6`HL&m=bD3Iz>*6D7z<^-?kOm!e9si`Q;sa z`5{IWahR1$zSx#d(1r};Vry0vTr&B@rBuC^ctsfaF&9>@Y_#gAi6;N@+}gBfwQZXe zTVar9OG{cI2gw;`Ow|cCD>v=ybD6u6pZ)CIQk&#sIt`S@8zk9B=u~;r@6Ykgxqh{w zdSTkA1ZF-!M@^@T3M|NR^TA&q+@GT+f$!#5JQ- z$`j?>E5)CW)14$SVYWEw*sPgS(}~DuzEXE`nj>MJh}VhJt?%}+i zBq@kD^Ha8R`ak$$T{0-}hSnyon#gQsu2_cCfpmxWD>4nk4mq=8(+}C%hpiH!RXxb)NGf+(Wz-@sGp#Ws(yGrfWu?AR zciF@s=5+cF|`Pa-C$@s*4g?KySHgHwD6&i*&!>me8`Tbv9PPF z+=`Q}5rwwYr#=(m^RR;4NnhvvL!$-HW=N1k0y5>>X84l()o;`iC4r_hp$a$8b`@Sy z;xn*yKT}toY%|FXH(Q_AQ-IoQ)T@c#@G(5!rcp$3kUo^IS`av+P9&3fr8B%f!K-3K z5wmPzda!O8Y~qcU2DL{PH|gxFhFn=d#Mk;-gQ_1n>b+Og7F1;PHhY#|I+=AyOlwc< zm^NC;QjR@COQd;&SGRpMZ=!H>N(3!|M1ffyVjiy2P;jD)l77rCn%EbyaurwNoV=Pq zT4%cW9jl&e+DSc*DZ=vUk02~xWb^H`1Ll~K0Agmt7%gRFbY7o)dPOJXxxUoXxbRM; zvvOBWRFR;UjJ>_8X6kDMubMfgjJ4EYjk-0zS%FKZD@cf~8Y<7(`=l-*w0~(wS?|uW zS1Bjbg=fDN?@eb~Pf}UGBpG=n!+nG^(f_06y{cap0#mIvrAxXdQ|`lj5G9C0yMMW_Csv)IvDMTp+n{Jf?EbWfnsQT%B4tNv zm6Wpo52MLT!Z#s~_36p9*pd|2b7xGZsufx~K?%^DT0@kEC(rue;+T*7sXi;CZIqv# z2~e)84Abd-dkKb3?-Nq;LBChLy#55FU+TJfv@C3*Xbe4!`YA`f_A0D`S?Mxf@6Pv5 zW6q1Wfch$eHUDb*7~&9n^uz8E{j)b{g%!w9KWSWe?Ng(#?2@H-;y&*#>C-TXq-TcD zk||Tv$&*fWCADUBOSH0#SlJAq#t?;k8COXu&=82Vqr9Y1nHYKz+9ZANuVHtDdT4oJ z?naB32(rTR%l%DRR0w9M2hjsjCiV7DeZhexXadzUcGUajtVS_6P>R>CUKvkI9>N^; z8NlfcY6WfNkPehBrlq*6>!V=;WTT$E?bNGAyY0E%WLi%Rk#$Oh71ps>3S{NgTS+zI z=Ec?%+LH}W+7=L&dV{vsX!7dr5ePX&q8j(Z)GI=03y7(=kmP9?|2N!_Yzz+SNPTZl z#%{Iu>*QJ89};5EXQUz!+uJ36=ZtVL>x)$^@>OT{nDy3`|WX&@eH_Ug`j zTPsv08UZcsvYSD|H#6pK2B>2$+A2^=+r-SuoadK(VwHNT%~<4tp6#qpxF&sPn|lkQ zLOn)}W^2W|@g|~1%^!{Li3E(*uI)Tu( zo?M{(l!rb`F_o{5Glv(dKMf}3#0WOMDmz7hAANGO|o+;`DO(|;I+XfSka-w z)qEZfnP9cflB5wKUkmjw6Bbwl3}X*X%{J9dN!zcTO=|Dgs&Vwz#fF)iZnlZl#hKkA z5@p+Sp0qdNuG#vRR*v~n({0uSjhW%D6(B7*k9GLBNh#KhdPBDO6mK^lq#Lfavfm=v z?cfPvLXdA3(lyga5SSFBM2~Og*-w24E91&c9Xnxcn~J4c#%+1GzNOC&bMBrL)_Gpty3{U zoGer)A5YX~uVq@?)zI1IHeIhk$Zc06pR*))l`q!+WZFZ%pw}PwvcI*zAFodWkABLpv8% zNm)Q;QBA!$yNt8ykNad;;onxw)i-t0V%yx5@AZlY*|f_-zvh@i9LN&>O0*P~AO-}Q z1IuiTvpCy~a7ayPCTH^6I@)78YOVGvgA@?eT5G}D5vrBQFego9?dytK54Py!G&9Ym zY?&p71jPDUPcq42?Lv0ml$wMuYgDuGCS$mrH`U#_PBsUqy(JRKKGcw*SkipyT?aFH z`6mMeyliBeoBZO5%5Ey8wp26tRxBjDVPjk_x6U_8XK$nyYq`meno-(GEim)BJGBHE zMQF?vI_(+_NN5S_jk0epBSHmRWwqy~H_6kgw4YA8Ci@5@k@D4b%gm%J=dIC+|5z^) zBignkU$@OnTpt@x7)Zmn7Yi@*w1^s@hA%L7kU#qRqR*-i+sEUzN@*Wp{C~G@==Jm8S{d=kS~ON%H-FRdx3{ zGegnNF4;(&bNckPy6zXDI;JY4xczpBW_qvMpP*1ErFc+bEBn-i_YMi)HXwySuOfJ# zNBPCnFrBTWbbI3$4fS?lkVI^q%;Cw76bq=41q1LgDleD1#%G;N7A%RFH3zV~S}7Qu z5i51`6Wl6A7bPxXRG}-%vNgU|VFxQ{HEL-teSYT42Q;t9)&YD)bRqLRU(0&N?NRil z3XsaeB*~O5!^B4b$;M8ds^0icd%Wap=)SfzqfL4VM;It2IYUwwz@kYTnE{dgOy%}C1;^gI8+|lL&h|>WoMA?y`LJ~wmx0tK>1w>MJBSQf1(07a=ZdPj;c zt7!}_yCI;(zc3aOrFN;L{lc`-hY}5aJnZnTBq?<hGzE{veEASXO?^lmKf1-y!>)_SIfp1bA;NyZ#>N`HoV=2T< z$#(P~MSmBms+-5OHBA8r0Hbycib?YP%&eQxO@G*aX?-QiLiJ#lQhg)rHB%Fb%)K_o z0_C|cD1S1B$2L4ow*+PY-C~tKinmC3}NxtEom-TdjKHq8&gx| zmsRVL6$z_J(Fm>Y&Ro-)kAa`>s`&V-h}Ds)RkvQ!y)gucGw>&YCMeq9V+98@A1!7d z=F#%X454xe&sq%RjlL(Zp}kvd+WGq6p?0QT0Q8|Rm9n2p-Pun!zT_ITmj;N%(1*q@>d#Q%4*_}k zDZ%O-8E5*knLCF+A;_;9Vfgi5|4x4cm5e+Q#qAh7jh+3$SST_a8Fn>k!Vqu?yx#0; z^Flf-5T#7e;#sAGpN-C7i57LGO<#7mDfT851x2^@Cgc~MmHzY3 zwycfCCP(!FJ9~i>&KjfJ;CYb`H9Ztz!miVbliX<*Iu@H0F@x2kBeA`(j&%xcfIZJ^ zj5}&i_GPyc6{?a2fDdwg~hLl3jQUc41+rafn?XSSv@E zE-7=%IGhj|GtupmxGNnh-t;@4T3<|$l0z5*sTOeLUv`ZNv7LA5(q9eNr2V~27?cJl zE>Ymcl7S3HtOfX0r7vGS;ra->%ePFR^fje*5N=M2nmPoKMjJxYye|Kg<=-s9g+w4( z{YL~JGV(wYAVAB98g7?qa%Ojg+=K_va2%v&Z-Z(=MA@3LO_LFs3c96$Q45QR2$iiC z45{dZ*v84*+|v2uhPPR*Bh{F9yHtT53)3aTQyxCYTstSL0E+Xk&11Tw{z}K< z-=)WHVJ|rt+ZK_Vo3j##*Bfo{Q;Wu$3Th&}W+d19f3DDI6qf`p30-<@JjPX&LP`Pz z&9qIhf3(QQQVsWC(cA~<0~0)ru$TSCY3dN-PKiT6&(MrWtwYV*v{b5s97oTXGKLB( z83im?*JCI>bWUfhTRDa{ z#WT7sd8DJJ6C&VLMUlZGva7QZ;epB%z7S~;QqwIOdMyg!<0|hflgaZRn2fNS4V$N` zRUX!ep}3~x^v%*LAYGWyu=N_75nmo^x0UMp!E?B-pW@C%jzy312#?ShSiP1y+-6P< z0m4wwB=?=qaueM$vD<1*Cf~r^VuwAR!{QL5-k;*_^3JM;ts%9p`9s}}G9vk7I07lm z!Zjmk?m$4{uhP4+#|>}@>Vb`V8u|~;j5DpUg8sUX#F;i5k;f1iG|4uXIm~QNdxc#W zZC^aq(kHXuHQD|w5)RcMbIp0cWoX$1E`Zyo&EPg~92kUCzq8fuE)7Qw1j66N)K`bq z4m@D+qs`iBPQisbCkikZDsvRT1ebm?`J^2R7^m(Ji<_OyY!rznVq$d% zru_@@n1FFQz9AV$B_PuUL&q$BQoYe=$0B3rc1`47AF7NmWA*uSD`TvIK4<)ab4OSy zkZa{kC83}k@>uoMJZfNqP$5YAX-(TL2_WlNV7MW7yy}-{yiy6ULm|U+Pv{YnfCYlz&xW489$scwaG*@a2dS zqfox&25n=@`l8qp>EHhEGK))2? z@$&$rU?@Y9eiW^+-6uYV%7-}?(vUh&Ud!1=|Ed0lxW8n)@;?hlW)Rq;b*9P^d{f*E z`Uo8B61#uLA2%hh{9ryFPRx|(cY0sMBxx1xoB}%=F?lA4GkR~P;C{pO)w!?Tb}PI- zZ2T}=4w=S$Rn=UjGVtSYe*l>djItFv;i|I;L z`A8W+PH3EpeQ#~)Af@D0DF zIZu$9EPJEavd_Fqnhq>cvq&^lD4vK%}NHjW`R|zf`&T=W0{IEHK9#nd83iN3LIyfYixzYUl%m&q@+Twn-n4n9-qruWl zwCr-1N1X*Cv~O)VMA{knj}b?G)za5-S=pqED2bI}z!@7CnK!mOD%J=FXV$!eWu`xw zzo7wan-sS{Dv&;G_^HLz7(tJ{r@RepnQ$_cJFSxjWv87&hasZ@s|GHo)}H&1m;>fj zM!)~t24dSzcG%&SpwU^cH~+f(H4pXi2Pqfrar0s6KTWUt1}1UK%Fy_ zQ$l!N)5dUfJ(@|?*Hc$u?rPZC?CrLPzoS~};k;a`?$%)KOrl!;yqaTol*C}jdz%T; zgm|=+`41*&x<>HB98V10fYsbbFPu7T*|ekRC9ktE*MGP3U&(Phk__J5N)=EB@W&Ah zjl!I@SV<7_sm$nB$wl~Hd=1h%6Pmk3MHq?}p~dRk?&0!7qr@ttD-Z|V$?0YyP>_9) zeSn7*ZG-<5hjc5yFMi9EB84m(NwK81k_j;iK-h!Q*V=PUmH;NKY;j0S3=2O*5GXx& zHv+vuH^OaItiMw#936Ze@nTv??QfJ}6-|^|A2Y-euK21jIv0ljWOgGy5h%-8rob?^ z@UmxDWlVd1df_3iq!>Y9&4oQa0)K4I2|sSn)Z>eh#5GK_`?;Z1sA_*d%BduY&&&|)q~{lQO*>Z zSO&N3cZq<6=@9uhoC%|7Yq0JhP|nD+Pf zs?v+HZ3zr?5$+yvt3Km=APsja=Xq1YK&gvpG+5gR^$R^~fx{+Wip{2}m|jGm7qhJ5 z4zfFD9uLAsG3qM5?_P*DVu(}@Mvui%IW}ocv!o0PbC7&itz{xeSkhffec#L}pknZG z>cH@?b6yX53O_z@=sKpAGOd*>Tj|IwFmv?ZlQ3+Bd2oWk!bFe<5 zmGYL1^rul#OuF@f5Na?7MN8AfRr^|Eb$!f)a%#=ZyLHB9;b_Qe^=cZ;>E6G`w zo1xO^dETq{{jbe(h<<4AGhuE2y^I?&d}q13H5mF1C%CPkvCmx;VDD6w;a0g`GT;4E z^uzVw9|#}4<}C$xJAWMNRZ)KcsA$Z?%^!5HXD%TfY25Sk9&Ek!DW}LK(v`I{fAiC@ z?+K_>k;KB_i4zBWTyvlG(8s#h*K@-Hi~qR)K11pbrFTH8m2>Oj>zr=QkzQ*7!+>-H zoC{-_vBP{$)mrCM4kpa1j0?F>$oO=Q$87cYTR%&c@Q&IM++{_W(P46+okz$SCw_wZ znOd8h30nhnP24(1CzqPLIq{^5+@+HzPriHp#a~{YxG3(7;W8El2{pcd2w&MsEJb|_ zN><)V!6paa?4WB&x-Er>A9;?sQ;>S!ZM#8< zF-d$7xx0m7V{aTum5fj+qa;vilk5ZfSeI@PI?>=un`}tX6M0B_o;zJSX7=qU8rbwd8{V3Cq z@32|?ucdn=4s2+In~v*9HD}DDNHdwRtB^<^}UHfnRGl&5mZY)%*kV zS5Hz0lvJ8fmR7uh8S0#UMS$x{ZO$P4O5>N9G0mz4bRCmGid}Ty1yRbCES6TRTd=iJ zco#uMaACR3Z88?nrY9{%Z)%MovM7oRO5plka+D#53Xmwd`_?6Q$*X<|nT)!-Kt}c` z?+9bW+9K$wuIi4OyKT}Ng0EM|!ef$6Z@N#eCqAnEAXF=jLZJ=OGxy@9q8U2^Y4-s0m^OromWNn+VH&(rhXr z^<9^M+=hs|$Tk+Kly{C0gN|q?hkU>b-y1$ED6}BNY}?qHs-S}2n1(aXC5G_%pkI&$ zM0bO)Y>l$Up{|{9fZ=xz4}dL~l+H8x0(E#zCDaSst*Co9aU1 zT7)#V5D*M1G7*K$qzEfU9v$5N0QT5wL1-qgj|E7pg2+4NMdB+hPG2@k2HJ&WIg{}v zpX6N(6y1)d#6jdZkNrD)*`~x>y>WJuCoK_cK27jQs&TI=0aVZ`T0ca+jv z8-P0OLr=K4odt&N-}W+0u}PQ$@x7i>H zFx1pjf9kU{5iUTZ|F$fzDYXl%Tpo>_kamDpd{EbvKOy{O`K?O7Gj;KzR2#~t@Cdx8 z**S_Mh?!SK{7=00(08_>X+{HkCW20skLCiIU6&aAr>k5TEIrIYb6+=8(KIs4heA&5 z2Oy`wDdYHaXV~f;QV%#15)9+=)|-t}fCvuzU*;)#X)4uN=yY~?MVX{|<~w@MOU@l> zju0tBl%U1A1jn|JdrZ{ciAZDKWcW?JA%%c*bkuKfJ_t!b4L6Q@7&ia0x?Ebuet$1H7h2> zdD;JgYTvDknkqf9M9ZxjLI_ZJHPTl5ZPIT8mO^XsJXZ?lkJKFl4UzmFqU`7=s zw-FWB2kkt$yrH&rhG8}WMj@{?^8W`QrW}F>~D^>?O038S^S5j+cq^{P?9$IOn72DI(Gt=7XnbGv@jI^u~*;U!q zIbD_6s;ugsZX-Z|gfIxiC2=gm!eA@}5@13G0vkn0U`Gfa7#Rl;Hkd=g4r2!bV+V)r z-~apG%gXBRU4a94Z0=W;mHCeEKHhutAD{Jv?@svp8Lk&_{lXKIsi<4x)_eX#q z0e(J>X}muN)VMwiR6CDnP$z&d1kz-30eBqvFi_)s2au+dcLPrWe+c*i;HQ9dz@6tM z$uZy~K#lVgK#l)j0YOFbUw}^o{yA_S_+&a&yY~Q}1-uWa@mvAw`3xvLycKv2_|?E~ z_`D?fHK4}#CW!Ihfdio0efUdh6L=H&bYKls|6d0b{@x$%e-tRv{Sxq{z+VM|n&i)b z>hEbUbbLG?_$0pH1AGzib--QV!$9@-Dd1BW&+h_3LGs^t=n25vQg8pMz`OYVTp&|U zE&|^G+yMS8@TY)x!w)y_aK8G%mn6xHx&I45NSFLJ5LQe62T=I=3*Zv)=?wbSz^g#b zgS!nZ($yf0H4736A+PClLg=f z;2Llp_z3Ws!2biRc>b9%hv@ZonC7>E-vNX)$>`-tay#(dK>hwbz}tWy1ghVk0)7YZ z*TVgcSNJ?ipyX>GDE@gLP@DsCoPwpvG|ue&=*-b1^834Au+-_2mv-Uoo1|4#!o?w<#K5zqY!a2fc!4B~%s|M+W? zeU_kL*2{pTzu z$&UkH1r)#i9`LV#kDN)8>%i}0@ZzgK20jJ>PD?@EJhibr~prd<*c4fnNuNWXbme z?*M)R_y*vofnN$dwd{Dj43s?dfWHEK8&J=`;hf9$0I2@I3Ml^jHK6GIpMjTve*zo= z&zyI@`$^zG`#f+8GZx(cw<}5VjlkE@`Qw3~0BZdI0{A50r^5H&0>1rm@B)yjC&jAk z;|~G9hVOp`WN69T=v4IjIPkqZ|L=jCfB8nI+q(jM5AY`UzX$kK;N!3Qyq*En^LGMo z2VMkfJU4)nhc57+1HT&hbmnnx4ZH#$yykl8)`RdEzrP3g%fRP>97vh`4p4e9z2SI2 z2^2qmIZ*U?2T=5S1o&j&uL7R~{7oP%nS2)b5#Y<-A))iz6E#>-%FtA^25Mq0zV8Co<0WD{5}N~9)1V-5b%$HzsS5U@I~`}GQ#(4zP|*h z=kEPGKF+g1^|uO?etsCJao+-}zxM#u&-Vde2K+Eka`f+jPXm4$sB!-(P~&*+SGc}= zDe$d)KMT}z9|bPa|0jUbD^LDP*Kcz`jpyY+;rU+R^MJcR{!6}{|A}6o1#ZI+KcBfA zyrSoFbqTn@??d1dfsX)1j~@aq0e=p7FYvE`qRTyblAHv-9{56F1r!~=6{vat6QJ7r z*T5$N|2OcZz$a`t9!>y%gL&Ksd=mGcv+4ZsLf}QduK>ru_X5@4Qwqi+yaR>bUxsO4 z!uQ_=iY`wYIG^4D6rSgS!sGqGR{<{qzXAC5;rAyG9bYd1&T;<)P|sfmJ`4EeKA+S9jJEyB`^j4C*Viv|8b>{|L3YCc@22|81OCp{^tC0V?}9(zR|3C?c2D2(_pj_b zUuQt!wGQ9+fp;*TZvk!tKm2#07w|=IgH}9u;j5jFQX&uQK5!oRRbLAY`Tc`$cVBVu z>yqS?d|&u_w?BUl6hEGNhx6;?oi3l>4g3Y3TSlq9h~FRgE+6-czscua0iVq8?*P6I z_^m+A_me>J$sdI8xBor&16~Sz8TYRO-w50Troc}EzZm#mf#QqDe={-+d=c<9z&`~_ zE*HMV_49qeFXa1o0iO!|AW-!EC=k*lp9Lb?$;P|kJMj8(AS6wG>)VoqE|Le{!(4#B z4txsmH-NVR{{X0d{s_o)lNB!gK^F7#o&f}<)+fOJ{$YT32Pp9O!{=i_NSiSHqhu~ z0{F`CS^T{mJ_~Ge-Q?m={vLdDtN5ApxEbM0}#CJ8Lr z{0;c@F`X;U?a_R4b4va@2joBvMdR4gpgTNPYiI?<;_?f)PCcla64z3SziI)0% zf`jBtfZ~~R;j_SfT;IoakqedE{B858AHKZ{_<`_Qy!q{1(lz?)alL|To$E)r#B2Y6 zOFXE*_i#zyd_C85xvp~^^|#2)C9bOVqx7z1Lj3<`E=+B*!}T~W@$lDjWnAy%x{GU$ zYr^&YTn});>d95E_$N8k-T!q#*^TBpLs@2R| zx5&$JQI8J{fM>g-JR9d}#z1ze!K57L`Di+dbbD0Y%)8^cyEO!cmF`uObiA3jAE|bE zrP|10tu88UH(x<1HP7}Cnd>$)W|V0!+Y8*s3+q0%jA501 z@NPI#_YI1=%y^w2Zf!GqNDtcu?53CDBQ=_hx|?Z#R86);^Y|vu!b;7En51wssPsYf z@9mWt1UE!GxncOlD=W2;8!_!Lfx6ll??Ren5mN7nUG09IEN+Mai?SX=Ut!Qy0d3phDDC(|fl7G-V zSFdgDZRc}vG1y&Ew`D%=`0rpK-`=cv&ndf*+QVvKW0WIk>lH&1KSTmYVG+X&>JtlT zy0T$}=vC!01a*M4_x93F^p>|ZpP~&I3+oI9S3Oy7?;8P_%lJ!;N_9GziWI~!~<@f^0~zdYS7n1aM&Wa_RLI1uwR z0w=qh*oLe;&F~mjEfxRP31aB_YQ36_!}HReM_7*6>cw4k=@tX&>O02J(_J%Q64HkK z)eO2X3WB{3S4~jq^=4IpLAX7rc%RR(=x>e

f(*Dp;hKo~tHh&y-tWfnW(uTTaUD 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Client.mo deleted file mode 100644 index c4f4dfc79e1a03a04676c9baee2b96e255b16932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmaKo&rSj{5XLcj+M{O=bMWY_-4z5Y8Uvys0U>1lb2DWb*Gg$gTU2}pkG`JIVi$wl zoaC2IGT%(Tuiv{nUzJc>fxWht{Bb z(}sFnjYc##)??ola)PZz;V?5CqTwLJwk6?%9500@4k=5HkR2ndLBe=iMOJ4l2ysNO zvOK%d)sUr_q`(+w^{^0hJ>fiNR%oY$HMQ{Pdb=e&O=I1 z@BVPEgw&^yKMU)~pWS9x*x2aG5Km;WqjNKny5P_lOCLSpHEFWH>DEaJGGo+KdPw3l HPNK>W6w8Da diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/nn/BOINC-Manager.mo deleted file mode 100644 index 622e4062c1f96d77389f2be5da26de9d0bb07f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 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 diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pl/BOINC-Manager.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/pl/BOINC-Manager.mo deleted file mode 100644 index daf4e8e68c35771451dcfaf5b1cf321208d75f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71445 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

bp6!L$j8ZYY8R6bj?CLeW5FV=qJso_PGo^bU(~s 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

unLJ@F|sd?L;x;ipFb`Hf& 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 UVko@fu1syDd`}QV6+;F87h_3VPyhe` diff --git a/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Client.mo b/contrib/Installer/boinc/boinc/bin/Debug/BOINC/BOINC/locale/ko/BOINC-Client.mo deleted file mode 100644 index 3be61092e62a362ca698571dee7b0079a2341f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5153 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