From 7af3611807e652047f0bfc95f924a27ade624a83 Mon Sep 17 00:00:00 2001 From: Dominik Charousset Date: Sat, 29 Apr 2023 10:31:50 +0200 Subject: [PATCH 01/35] Move build defaults from configure to CMake Moving the defaults for build variables from the `configure` script to `CMakeLists.txt` gives the same default behavior on platforms where the `configure` script is not available (Windows) and also allows a pure CMake-based work flow (e.g., the standard `cmake -S . -B build`) without having to manually adjust the defaults. The `configure` script also becomes much simpler as a result. --- CMakeLists.txt | 54 +++++++++++++++++++++++++++++++++++++++++++++-- configure | 57 ++++++++++---------------------------------------- 2 files changed, 63 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03eab558b8..7801938e3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,12 +9,62 @@ endif() project(Zeek C CXX) -option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON) + +# We want to set ENABLE_DEBUG to ON by default if the build type is Debug. +set(ENABLE_DEBUG_DEFAULT OFF) +if ( NOT GENERATOR_IS_MULTI_CONFIG ) + string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) + if ( build_type_lower STREQUAL "debug" ) + set(ENABLE_DEBUG_DEFAULT ON) + endif () + unset(build_type_lower) +endif () + +# CMake options (Boolean flags). +option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) +option(ENABLE_DEBUG "Build Zeek with additional debugging support." ${ENABLE_DEBUG_DEFAULT}) +option(ENABLE_JEMALLOC "Link against jemalloc." OFF) +option(ENABLE_PERFTOOLS "Build with support for Google perftools." OFF) option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ (doctest) unit tests?" ON) +option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ unit tests." ON) +option(INSTALL_AUX_TOOLS "Install additional tools from auxil." ON) +option(INSTALL_BTEST "Install btest alongside Zeek." ON) +option(INSTALL_BTEST_PCAPS "Install pcap files for testing." ON) +option(INSTALL_ZEEKCTL "Install zeekctl." ON) +option(INSTALL_ZEEK_ARCHIVER "Install the zeek-archiver." ON) +option(INSTALL_ZEEK_CLIENT "Install the zeek-client." ON) +option(INSTALL_ZKG "Install zkg." ON) +option(PREALLOCATE_PORT_ARRAY "Pre-allocate all ports for zeek::Val." ON) +option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON) + +# Non-boolean options. +if ( NOT WIN32 ) + if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) + set(CMAKE_INSTALL_PREFIX "/usr/local/zeek" + CACHE PATH "Install directory used by install()." FORCE) + endif () + # On windows, this defaults to "c:/Program Files/${PROJECT_NAME}": + # https://cmake.org/cmake/help/v3.15/variable/CMAKE_INSTALL_PREFIX.html. +endif () + +set(ZEEK_SCRIPT_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/share/zeek" + CACHE PATH "Install directory for Zeek scripts.") + +set(ZEEK_ETC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc" + CACHE PATH "Install directory for Zeek configuration files.") + set(CMAKE_EXPORT_COMPILE_COMMANDS ON - CACHE INTERNAL "Write JSON compile commands database") + CACHE INTERNAL "Whether to write a JSON compile commands database") + set(ZEEK_CXX_STD cxx_std_17 CACHE STRING "The C++ standard to use.") +set(ZEEK_SANITIZERS "" CACHE STRING "Sanitizers to use when building.") + +set(CPACK_SOURCE_IGNORE_FILES "" CACHE STRING "CPack source ignore files.") + +set(ZEEK_INCLUDE_PLUGINS "" CACHE STRING "Extra plugins to add to the build.") + +# Look into the build tree for additional CMake modules. list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) diff --git a/configure b/configure index b9d9e16cb9..05944e217c 100755 --- a/configure +++ b/configure @@ -12,6 +12,9 @@ command="$0 $*" usage="\ Usage: $0 [OPTION]... [VAR=VALUE]... + -h, --help display this help and exit + --show-config display the most relevant config parameters of an existing build + Build Options: --cmake=PATH custom path to a CMake binary --builddir=DIR place build files in directory [build] @@ -149,42 +152,10 @@ append_cache_entry() { CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3" } -# Function to remove a CMake cache entry definition from the -# CMakeCacheEntries variable -# $1 is the cache entry variable name -remove_cache_entry() { - CMakeCacheEntries="$CMakeCacheEntries -U $1" - - # Even with -U, cmake still warns by default if - # added previously with -D. - CMakeCacheEntries="$CMakeCacheEntries --no-warn-unused-cli" -} - # set defaults builddir=build -prefix=/usr/local/zeek CMakeCacheEntries="" display_cmake=0 -append_cache_entry CMAKE_INSTALL_PREFIX PATH $prefix -append_cache_entry ZEEK_ROOT_DIR PATH $prefix -append_cache_entry ZEEK_SCRIPT_INSTALL_PATH STRING $prefix/share/zeek -append_cache_entry ZEEK_ETC_INSTALL_DIR PATH $prefix/etc -append_cache_entry ENABLE_DEBUG BOOL false -append_cache_entry ENABLE_PERFTOOLS BOOL false -append_cache_entry ENABLE_JEMALLOC BOOL false -append_cache_entry ENABLE_ZEEK_UNIT_TESTS BOOL true -append_cache_entry BUILD_SHARED_LIBS BOOL true -append_cache_entry INSTALL_AUX_TOOLS BOOL true -append_cache_entry INSTALL_BTEST BOOL true -append_cache_entry INSTALL_BTEST_PCAPS BOOL true -append_cache_entry INSTALL_ZEEK_ARCHIVER BOOL true -append_cache_entry INSTALL_ZEEK_CLIENT BOOL true -append_cache_entry INSTALL_ZEEKCTL BOOL true -append_cache_entry INSTALL_ZKG BOOL true -append_cache_entry CPACK_SOURCE_IGNORE_FILES STRING -append_cache_entry ZEEK_SANITIZERS STRING "" -append_cache_entry ZEEK_INCLUDE_PLUGINS STRING "" -append_cache_entry PREALLOCATE_PORT_ARRAY BOOL true # parse arguments while [ $# -ne 0 ]; do @@ -198,6 +169,14 @@ while [ $# -ne 0 ]; do echo "${usage}" 1>&2 exit 1 ;; + --show-config) + if [ ! -f "$builddir/CMakeCache.txt" ]; then + echo "Error: no CMake build found under '$builddir'." 1>&2 + exit 1 + fi + grep -E "^ENABLE_|^ZEEK_|^INSTALL_|^CMAKE_INSTALL_PRE|^CMAKE_C.*_FLAGS|^CMAKE_BUILD" "$builddir/CMakeCache.txt" | grep -v ':INTERNAL' + exit 0 + ;; -D) shift if [ $# -eq 0 ]; then @@ -217,10 +196,6 @@ while [ $# -ne 0 ]; do ;; --build-type=*) append_cache_entry CMAKE_BUILD_TYPE STRING $optarg - - if [ $(echo "$optarg" | tr [:upper:] [:lower:]) = "debug" ]; then - append_cache_entry ENABLE_DEBUG BOOL true - fi ;; --generator=*) CMakeGenerator="$optarg" @@ -235,9 +210,7 @@ while [ $# -ne 0 ]; do append_cache_entry ZEEK_INCLUDE_PLUGINS STRING \"$optarg\" ;; --prefix=*) - prefix=$optarg append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg - append_cache_entry ZEEK_ROOT_DIR PATH $optarg ;; --libdir=*) append_cache_entry CMAKE_INSTALL_LIBDIR PATH $optarg @@ -454,14 +427,6 @@ if [ -z "$CMakeCommand" ]; then fi fi -if [ "$user_set_scriptdir" != "true" ]; then - append_cache_entry ZEEK_SCRIPT_INSTALL_PATH STRING $prefix/share/zeek -fi - -if [ "$user_set_conffilesdir" != "true" ]; then - append_cache_entry ZEEK_ETC_INSTALL_DIR PATH $prefix/etc -fi - if [ -d $builddir ]; then # If build directory exists, check if it has a CMake cache if [ -f $builddir/CMakeCache.txt ]; then From 86839aee340f021a68e51c3891fbb655aae5a1ef Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Tue, 2 May 2023 11:24:40 -0700 Subject: [PATCH 02/35] Surround string assignments in zeek-config in quotes --- zeek-config.in | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/zeek-config.in b/zeek-config.in index 98396dc989..91182796bc 100755 --- a/zeek-config.in +++ b/zeek-config.in @@ -1,22 +1,22 @@ #!/bin/sh -binpac_root=@ZEEK_CONFIG_BINPAC_ROOT_DIR@ -broker_root=@ZEEK_CONFIG_BROKER_ROOT_DIR@ -btest_tools_dir=@ZEEK_CONFIG_BTEST_TOOLS_DIR@ -build_type=@CMAKE_BUILD_TYPE_LOWER@ -cmake_dir=@ZEEK_CMAKE_CONFIG_DIR@ -config_dir=@ZEEK_ETC_INSTALL_DIR@ -have_spicy=@USE_SPICY_ANALYZERS@ -include_dir=@CMAKE_INSTALL_PREFIX@/include -lib_dir=@CMAKE_INSTALL_FULL_LIBDIR@ -plugin_dir=@ZEEK_PLUGIN_DIR@ -prefix=@CMAKE_INSTALL_PREFIX@ -python_dir=@PY_MOD_INSTALL_DIR@ -script_dir=@ZEEK_SCRIPT_INSTALL_PATH@ -site_dir=@ZEEK_SCRIPT_INSTALL_PATH@/site -version=@VERSION@ -zeek_dist=@ZEEK_DIST@ -zeekpath=@DEFAULT_ZEEKPATH@ +binpac_root="@ZEEK_CONFIG_BINPAC_ROOT_DIR@" +broker_root="@ZEEK_CONFIG_BROKER_ROOT_DIR@" +btest_tools_dir="@ZEEK_CONFIG_BTEST_TOOLS_DIR@" +build_type="@CMAKE_BUILD_TYPE_LOWER@" +cmake_dir="@ZEEK_CMAKE_CONFIG_DIR@" +config_dir="@ZEEK_ETC_INSTALL_DIR@" +have_spicy="@USE_SPICY_ANALYZERS@" +include_dir="@CMAKE_INSTALL_PREFIX@/include" +lib_dir="@CMAKE_INSTALL_FULL_LIBDIR@" +plugin_dir="@ZEEK_PLUGIN_DIR@" +prefix="@CMAKE_INSTALL_PREFIX@" +python_dir="@PY_MOD_INSTALL_DIR@" +script_dir="@ZEEK_SCRIPT_INSTALL_PATH@" +site_dir="@ZEEK_SCRIPT_INSTALL_PATH@/site" +version="@VERSION@" +zeek_dist="@ZEEK_DIST@" +zeekpath="@DEFAULT_ZEEKPATH@" add_path() { # $1: existing path From c2c34148caeccf5efb792606da332743b24d52c0 Mon Sep 17 00:00:00 2001 From: Dominik Charousset Date: Tue, 2 May 2023 20:43:33 +0200 Subject: [PATCH 03/35] Fix CMake option defaults on Windows --- CMakeLists.txt | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7801938e3b..bc1698da18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,20 +20,26 @@ if ( NOT GENERATOR_IS_MULTI_CONFIG ) unset(build_type_lower) endif () +# On UNIX, install additional Zeek tools by default and build shared objects. +if ( NOT WIN32 ) + set(ZEEK_INSTALL_TOOLS_DEFAULT ON) + option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) +else () + set(ZEEK_INSTALL_TOOLS_DEFAULT OFF) +endif () + # CMake options (Boolean flags). -option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) option(ENABLE_DEBUG "Build Zeek with additional debugging support." ${ENABLE_DEBUG_DEFAULT}) option(ENABLE_JEMALLOC "Link against jemalloc." OFF) option(ENABLE_PERFTOOLS "Build with support for Google perftools." OFF) -option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ (doctest) unit tests?" ON) option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ unit tests." ON) -option(INSTALL_AUX_TOOLS "Install additional tools from auxil." ON) -option(INSTALL_BTEST "Install btest alongside Zeek." ON) -option(INSTALL_BTEST_PCAPS "Install pcap files for testing." ON) -option(INSTALL_ZEEKCTL "Install zeekctl." ON) -option(INSTALL_ZEEK_ARCHIVER "Install the zeek-archiver." ON) -option(INSTALL_ZEEK_CLIENT "Install the zeek-client." ON) -option(INSTALL_ZKG "Install zkg." ON) +option(INSTALL_AUX_TOOLS "Install additional tools from auxil." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_BTEST "Install btest alongside Zeek." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_BTEST_PCAPS "Install pcap files for testing." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEKCTL "Install zeekctl." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEK_ARCHIVER "Install the zeek-archiver." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZEEK_CLIENT "Install the zeek-client." ${ZEEK_INSTALL_TOOLS_DEFAULT}) +option(INSTALL_ZKG "Install zkg." ${ZEEK_INSTALL_TOOLS_DEFAULT}) option(PREALLOCATE_PORT_ARRAY "Pre-allocate all ports for zeek::Val." ON) option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON) From 7b35d471adf580bc2baad080c99c4948dfb4d4f0 Mon Sep 17 00:00:00 2001 From: Dominik Charousset Date: Tue, 2 May 2023 20:44:48 +0200 Subject: [PATCH 04/35] Include compiler in --show-config output --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 05944e217c..22b4178337 100755 --- a/configure +++ b/configure @@ -174,7 +174,7 @@ while [ $# -ne 0 ]; do echo "Error: no CMake build found under '$builddir'." 1>&2 exit 1 fi - grep -E "^ENABLE_|^ZEEK_|^INSTALL_|^CMAKE_INSTALL_PRE|^CMAKE_C.*_FLAGS|^CMAKE_BUILD" "$builddir/CMakeCache.txt" | grep -v ':INTERNAL' + grep -E "^ENABLE_|^ZEEK_|^INSTALL_|^CMAKE_INSTALL_PRE|^CMAKE_C.*_FLAGS|^CMAKE_C.*_COMPILER|^CMAKE_BUILD" "$builddir/CMakeCache.txt" | grep -v ':INTERNAL' exit 0 ;; -D) From e07f3f305d9846d298528f9b3f637fc5c6385071 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Tue, 2 May 2023 12:06:41 -0700 Subject: [PATCH 05/35] Remove parser error message for bro_init, et al --- NEWS | 5 +++++ src/parse.y | 7 ------- testing/btest/Baseline/language.bro_init/out | 3 --- .../btest/Baseline/language.bro_script_loaded/out | 2 -- testing/btest/language/bro_init.zeek | 12 ------------ testing/btest/language/bro_script_loaded.zeek | 8 -------- 6 files changed, 5 insertions(+), 32 deletions(-) delete mode 100644 testing/btest/Baseline/language.bro_init/out delete mode 100644 testing/btest/Baseline/language.bro_script_loaded/out delete mode 100644 testing/btest/language/bro_init.zeek delete mode 100644 testing/btest/language/bro_script_loaded.zeek diff --git a/NEWS b/NEWS index 806a43eac4..fce932ee92 100644 --- a/NEWS +++ b/NEWS @@ -59,6 +59,11 @@ Breaking Changes - The IRC_Data analyzer declaration has been moved to protocols/irc/IRC.h. +- The error message returned when using ``bro_init``, ``bro_done``, and + ``bro_script_loaded`` events is now removed. removed. Usage of these events + has returned that error during script parsing for a few years, and time has + come to finally remove it. + New Functionality ----------------- diff --git a/src/parse.y b/src/parse.y index 2334b2eae3..4db15571ab 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1488,13 +1488,6 @@ func_hdr: } | TOK_EVENT event_id func_params opt_attr { - const char* name = $2->Name(); - if ( util::streq("bro_init", name) || util::streq("bro_done", name) || util::streq("bro_script_loaded", name) ) - { - auto base = std::string(name).substr(4); - reporter->Error("event %s() is no longer available, use zeek_%s() instead", name, base.c_str()); - } - begin_func({NewRef{}, $2}, current_module.c_str(), FUNC_FLAVOR_EVENT, false, {NewRef{}, $3}, std::unique_ptr>{$4}); diff --git a/testing/btest/Baseline/language.bro_init/out b/testing/btest/Baseline/language.bro_init/out deleted file mode 100644 index 0b182fe89e..0000000000 --- a/testing/btest/Baseline/language.bro_init/out +++ /dev/null @@ -1,3 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/bro_init.zeek, line 5: event bro_init() is no longer available, use zeek_init() instead -error in <...>/bro_init.zeek, line 10: event bro_done() is no longer available, use zeek_done() instead diff --git a/testing/btest/Baseline/language.bro_script_loaded/out b/testing/btest/Baseline/language.bro_script_loaded/out deleted file mode 100644 index 5fb003b55b..0000000000 --- a/testing/btest/Baseline/language.bro_script_loaded/out +++ /dev/null @@ -1,2 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/bro_script_loaded.zeek, line 5: event bro_script_loaded() is no longer available, use zeek_script_loaded() instead diff --git a/testing/btest/language/bro_init.zeek b/testing/btest/language/bro_init.zeek deleted file mode 100644 index 0beda04a7b..0000000000 --- a/testing/btest/language/bro_init.zeek +++ /dev/null @@ -1,12 +0,0 @@ -# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 -# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out - -event bro_init() - { - print "ran bro_init()"; - } - -event bro_done() - { - print "ran bro_done()"; - } diff --git a/testing/btest/language/bro_script_loaded.zeek b/testing/btest/language/bro_script_loaded.zeek deleted file mode 100644 index fb3d080a31..0000000000 --- a/testing/btest/language/bro_script_loaded.zeek +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 -# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out - -event bro_script_loaded(path: string, level: count) &priority=5 - { - if ( /zeek_script_loaded.zeek/ in path ) - print "bro_script_loaded priority 5"; - } From 94ec8167b233961bcd044c6669ca4601d867022d Mon Sep 17 00:00:00 2001 From: Dominik Charousset Date: Tue, 2 May 2023 21:24:53 +0200 Subject: [PATCH 06/35] Integrate review feedback Co-authored-by: Tim Wojtulewicz --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc1698da18..43952dc00d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ set(ZEEK_CXX_STD cxx_std_17 CACHE STRING "The C++ standard to use.") set(ZEEK_SANITIZERS "" CACHE STRING "Sanitizers to use when building.") -set(CPACK_SOURCE_IGNORE_FILES "" CACHE STRING "CPack source ignore files.") +set(CPACK_SOURCE_IGNORE_FILES "" CACHE STRING "Files to be ignored by CPack") set(ZEEK_INCLUDE_PLUGINS "" CACHE STRING "Extra plugins to add to the build.") From 7782f7325153e7ad3149f8be13a81fab180771db Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Tue, 2 May 2023 16:12:43 -0700 Subject: [PATCH 07/35] Add additional length check to IEEE 802.11 analyzer --- src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc b/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc index df9a8b0f26..bd9d913f78 100644 --- a/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc +++ b/src/packet_analysis/protocol/ieee802_11/IEEE802_11.cc @@ -31,6 +31,12 @@ bool IEEE802_11Analyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* if ( (data[1] & 0x03) == 0x03 ) len_80211 += packet->L2_ADDR_LEN; + if ( len_80211 >= len ) + { + Weird("truncated_802_11_header", packet); + return false; + } + // Look for the QoS indicator bit. if ( (fc_80211 >> 4) & 0x08 ) { From 5caab1a6673aa8737184104c2289803a7a8ad0ba Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 14 Apr 2023 12:12:28 +0200 Subject: [PATCH 08/35] smb2: Limit per-connection read/ioctl/tree state Users on Slack observed memory growth in an environment with a lot of SMB traffic. jeprof memory profiling pointed at the offset and fid maps kept per-connection for smb2 read requests. These maps can grow unbounded if responses are seen before requests, there's packet drops, just one side of the connection is visible, or we fail to parse responses properly. Forcefully wipe out these maps when they grow too large and raise smb2_discarded_messages_state() to notify script land about this. --- scripts/base/init-bare.zeek | 10 ++++++++++ src/analyzer/protocol/smb/consts.bif | 3 ++- src/analyzer/protocol/smb/smb2-com-ioctl.pac | 11 +++++++++++ src/analyzer/protocol/smb/smb2-com-read.pac | 11 +++++++++++ src/analyzer/protocol/smb/smb2-protocol.pac | 10 ++++++++++ src/analyzer/protocol/smb/smb2_events.bif | 13 +++++++++++++ 6 files changed, 57 insertions(+), 1 deletion(-) diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index 2723c8bc2d..7220c538f9 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -2988,6 +2988,16 @@ export { ## ## .. zeek:see:: smb_pipe_connect_heuristic const SMB::pipe_filenames: set[string] &redef; + + ## The maximum number of messages for which to retain state + ## about offsets, fids, or tree ids within the parser. When + ## the limit is reached, internal parser state is discarded + ## and :zeek:see:`smb2_discarded_messages_state` raised. + ## + ## Setting this to zero will disable the functionality. + ## + ## .. zeek:see:: smb2_discarded_messages_state + const SMB::max_pending_messages = 1000 &redef; } module SMB1; diff --git a/src/analyzer/protocol/smb/consts.bif b/src/analyzer/protocol/smb/consts.bif index 321875b43d..6acd464f6a 100644 --- a/src/analyzer/protocol/smb/consts.bif +++ b/src/analyzer/protocol/smb/consts.bif @@ -1 +1,2 @@ -const SMB::pipe_filenames: string_set; \ No newline at end of file +const SMB::pipe_filenames: string_set; +const SMB::max_pending_messages: count; diff --git a/src/analyzer/protocol/smb/smb2-com-ioctl.pac b/src/analyzer/protocol/smb/smb2-com-ioctl.pac index 8d65312f9d..d37320ae68 100644 --- a/src/analyzer/protocol/smb/smb2-com-ioctl.pac +++ b/src/analyzer/protocol/smb/smb2-com-ioctl.pac @@ -17,6 +17,17 @@ refine connection SMB_Conn += { function proc_smb2_ioctl_request(val: SMB2_ioctl_request) : bool %{ + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + smb2_ioctl_fids.size() >= zeek::BifConst::SMB::max_pending_messages ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("ioctl")); + + + smb2_ioctl_fids.clear(); + } + smb2_ioctl_fids[${val.header.message_id}] = ${val.file_id.persistent} + ${val.file_id._volatile}; return true; %} diff --git a/src/analyzer/protocol/smb/smb2-com-read.pac b/src/analyzer/protocol/smb/smb2-com-read.pac index 04679d804f..d9b2d7cf7f 100644 --- a/src/analyzer/protocol/smb/smb2-com-read.pac +++ b/src/analyzer/protocol/smb/smb2-com-read.pac @@ -34,6 +34,17 @@ refine connection SMB_Conn += { ${val.read_len}); } + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + (smb2_read_offsets.size() >= zeek::BifConst::SMB::max_pending_messages || + smb2_read_fids.size() >= zeek::BifConst::SMB::max_pending_messages) ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("read")); + smb2_read_offsets.clear(); + smb2_read_fids.clear(); + } + smb2_read_offsets[${h.message_id}] = ${val.offset}; smb2_read_fids[${h.message_id}] = ${val.file_id.persistent} + ${val.file_id._volatile}; diff --git a/src/analyzer/protocol/smb/smb2-protocol.pac b/src/analyzer/protocol/smb/smb2-protocol.pac index 3c354d3216..f8126ba3bf 100644 --- a/src/analyzer/protocol/smb/smb2-protocol.pac +++ b/src/analyzer/protocol/smb/smb2-protocol.pac @@ -230,6 +230,16 @@ refine connection SMB_Conn += { %{ if ( is_orig ) { + if ( zeek::BifConst::SMB::max_pending_messages > 0 && + smb2_request_tree_id.size() >= zeek::BifConst::SMB::max_pending_messages ) + { + if ( smb2_discarded_messages_state ) + zeek::BifEvent::enqueue_smb2_discarded_messages_state(zeek_analyzer(), zeek_analyzer()->Conn(), + zeek::make_intrusive("tree")); + + smb2_request_tree_id.clear(); + } + // Store the tree_id smb2_request_tree_id[${h.message_id}] = ${h.tree_id}; } diff --git a/src/analyzer/protocol/smb/smb2_events.bif b/src/analyzer/protocol/smb/smb2_events.bif index 2071a0600e..9ef661df77 100644 --- a/src/analyzer/protocol/smb/smb2_events.bif +++ b/src/analyzer/protocol/smb/smb2_events.bif @@ -15,3 +15,16 @@ ## ## .. zeek:see:: smb1_message event smb2_message%(c: connection, hdr: SMB2::Header, is_orig: bool%); + +## Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` +## version 2 connections for which pending read, ioctl or tree requests exceeds +## the :zeek:see:`SMB::max_pending_messages` setting. This event indicates either +## traffic loss, traffic load-balancing issues, or failures to parse or match +## SMB responses with SMB requests. When this event is raised, internal per-connection +## parser state has been reset. +## +## c: The affected connection. +## +## state: String describing what kind of state was affected. +## One of read, ioctl or tree. +event smb2_discarded_messages_state%(c: connection, state: string%); From 3ac877e20dfdff6d27f60b4fd1a3c37c84303d1d Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Tue, 25 Apr 2023 17:19:14 +0200 Subject: [PATCH 09/35] scripts/smb2-main: Reset script-level state upon smb2_discarded_messages_state() This is similar to what the external corelight/zeek-smb-clear-state script does, but leverages the smb2_discarded_messages_state() event instead of regularly checking on the state of SMB connections. The pcap was created using the dperson/samba container image and mounting a share with Linux's CIFS filesystem, then copying the content of a directory with 100 files. The test uses a BPF filter to imitate mostly "half-duplex" traffic. --- scripts/base/frameworks/notice/weird.zeek | 1 + scripts/base/protocols/smb/main.zeek | 7 +++++ scripts/base/protocols/smb/smb2-main.zeek | 24 +++++++++++++++++ testing/btest/Baseline/plugins.hooks/output | 3 +++ .../out | 25 ++++++++++++++++++ .../weird.log | 11 ++++++++ .../Traces/smb/smb2_100_small_files.pcap | Bin 0 -> 238734 bytes .../smb/smb2-max-pending-messages.test | 18 +++++++++++++ 8 files changed, 89 insertions(+) create mode 100644 testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out create mode 100644 testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log create mode 100644 testing/btest/Traces/smb/smb2_100_small_files.pcap create mode 100644 testing/btest/scripts/base/protocols/smb/smb2-max-pending-messages.test diff --git a/scripts/base/frameworks/notice/weird.zeek b/scripts/base/frameworks/notice/weird.zeek index 47a6b6dde0..919f683123 100644 --- a/scripts/base/frameworks/notice/weird.zeek +++ b/scripts/base/frameworks/notice/weird.zeek @@ -210,6 +210,7 @@ export { ["spontaneous_FIN"] = ACTION_IGNORE, ["spontaneous_RST"] = ACTION_IGNORE, ["SMB_parsing_error"] = ACTION_LOG, + ["SMB_discarded_messages_state"] = ACTION_LOG, ["no_smb_session_using_parsesambamsg"] = ACTION_LOG, ["smb_andx_command_failed_to_parse"] = ACTION_LOG, ["smb_tree_connect_andx_response_without_tree"] = ACTION_LOG_PER_CONN, diff --git a/scripts/base/protocols/smb/main.zeek b/scripts/base/protocols/smb/main.zeek index ed129f8ce1..91e27acffa 100644 --- a/scripts/base/protocols/smb/main.zeek +++ b/scripts/base/protocols/smb/main.zeek @@ -44,6 +44,13 @@ export { PRINT_CLOSE, }; + ## Whether to reset a connection's SMB script state whenever a + ## :zeek:see:`smb2_discarded_messages_state` event is raised. + ## + ## This setting protects from unbounded script state growth in + ## environments with high capture loss or traffic anomalies. + option enable_clear_script_state = T; + ## This record is for the smb_files.log type FileInfo: record { ## Time when the file was first discovered. diff --git a/scripts/base/protocols/smb/smb2-main.zeek b/scripts/base/protocols/smb/smb2-main.zeek index 8ccaa2df84..31f0a7704a 100644 --- a/scripts/base/protocols/smb/smb2-main.zeek +++ b/scripts/base/protocols/smb/smb2-main.zeek @@ -1,3 +1,5 @@ +@load base/frameworks/notice/weird + @load ./main module SMB2; @@ -344,3 +346,25 @@ event smb2_close_request(c: connection, hdr: SMB2::Header, file_id: SMB2::GUID) #Reporter::warning("attempting to close an unknown file!"); } } + +event smb2_discarded_messages_state(c: connection, state: string) + { + if ( ! c?$smb_state ) + return; + + local addl = fmt("state=%s fid_map=%s tid_map=%s pending_cmds=%s pipe_map=%s", + state, |c$smb_state$fid_map|, |c$smb_state$tid_map|, + |c$smb_state$pending_cmds|, |c$smb_state$pipe_map|); + Reporter::conn_weird("SMB_discarded_messages_state", c, addl, "SMB2"); + + if ( ! SMB::enable_clear_script_state ) + return; + + # Wipe out script-level state for this connection. + c$smb_state$fid_map = table(); + c$smb_state$pending_cmds = table(); + # Not expected to grow overly large and the original + # zeek-smb-clear-state package didn't reset these either. + # c$smb_state$tid_map = table(); + # c$smb_state$pipe_map = table(); + } diff --git a/testing/btest/Baseline/plugins.hooks/output b/testing/btest/Baseline/plugins.hooks/output index 97b230190e..8ab256052c 100644 --- a/testing/btest/Baseline/plugins.hooks/output +++ b/testing/btest/Baseline/plugins.hooks/output @@ -575,6 +575,7 @@ 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> +0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> 0.000000 MetaHookPost CallFunction(Option::set_change_handler, , (SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) -> @@ -2194,6 +2195,7 @@ 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) +0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) 0.000000 MetaHookPre CallFunction(Option::set_change_handler, , (SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100)) @@ -3812,6 +3814,7 @@ 0.000000 | HookCallFunction Option::set_change_handler(RDP::disable_analyzer_after_detection, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(RDP::rdp_check_interval, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SIP::sip_methods, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) +0.000000 | HookCallFunction Option::set_change_handler(SMB::enable_clear_script_state, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMB::logged_file_actions, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMTP::mail_path_capture, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) 0.000000 | HookCallFunction Option::set_change_handler(SMTP::mail_transaction_validation, Config::config_option_changed{ if ( == Config::location) return (Config::new_value)Config::log = Config::Info($ts=network_time(), $id=Config::ID, $old_value=Config::format_value(lookup_ID(Config::ID)), $new_value=Config::format_value(Config::new_value))if ( != Config::location) Config::log$location = Config::locationLog::write(Config::LOG, to_any_coerceConfig::log)return (Config::new_value)}, -100) diff --git a/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out new file mode 100644 index 0000000000..524f00fa21 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/out @@ -0,0 +1,25 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, read, 15 +smb2_discarded_messages_state after, read, 0 +smb2_discarded_messages_state before, tree, 5 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, read, 15 +smb2_discarded_messages_state after, read, 0 +smb2_discarded_messages_state before, tree, 5 +smb2_discarded_messages_state after, tree, 0 +smb2_discarded_messages_state before, tree, 20 +smb2_discarded_messages_state after, tree, 0 diff --git a/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log new file mode 100644 index 0000000000..f7d257af1b --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.smb.smb2-max-pending-messages/weird.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 34884 127.0.0.1 445 SMB_discarded_messages_state state=tree fid_map=0 tid_map=2 pending_cmds=20 pipe_map=0 F zeek SMB2 +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Traces/smb/smb2_100_small_files.pcap b/testing/btest/Traces/smb/smb2_100_small_files.pcap new file mode 100644 index 0000000000000000000000000000000000000000..4bc38dc36acb1212a2fc06fe6fea9f797b189fff GIT binary patch literal 238734 zcmeF4d7RGW_y6x1Ys!*TTJEx>Xpt>Osf1+Y4#`rfkYvj)x-E^R2HBI4J-b3Ky=F+NP;h}`maIzHLLRn8p7weySIXYdjo-5skhe-)XsnU`R4-m{egf#kgB_U274Sg8EcA=~l$NqO=VK+6%Ml#wbVPv=NH+s^tm8dpO{uGIdHZ-_?RU8MXTs* z>YDt4iXaK@?hP#_l}fFJ7Eeu$X|ZH-;9Lo>MX>Pm*=C_Swc!)772;2vCL{JR_Cf3^LxPeFq;rep5#0i=Ydb*XRpTt981Ce#JQG5 z_x7w)f9lYCrXT6o?1P4tZf$%h?Xt&TZr^{r=L%T&+zx;3lyiXD+j6s zY6L08mdOX;s-_2PVI?eITmW0@TyzBYiTexB4blPiA@| zWcv5CVo7IXc3X~@ zk9*)>T%0F4P^EIU4wc(huJmMwn$_{&Q!510;4`tWePh!z75eXY{7!?;+6n)+O@sXT zZ_1yPFJJQPyDHV1U8K@Q`3u3$-LC^F;fnI&|vxRQo47 zb$jB$`gN;Su8~r^N7tv?_I~P#PEU91-s>qa2AenEukNk%>(Yxi{P6j_Z;$p^cyX8Y zd0Us?c)=TEmfcXRdCL|l6)@kT|C8V|%vo(vSf8`hJ5k}&!&zb3L%)YNZ<(v)3>E$i zEj|hs-v!TbcW=~{D^l+wiv?m@gq)q7=gHY;V4=S|XGwvfj!_mjUe2ySlk#7+3Y2pG z{R0m*3N>rigleE%a>0Yn|B#SOG zaCdK1)3>KjMT@J-#I%StUD45J2PzI93*1RbR!l zh$B~)dY430 z^?evDt^iZGyEn2pH?kOoI zAQi@)x`FG!7%K9!QIYiNQ~~AKe^~*)2SX3vs8gir*8I>l*gM{h6d92|gDPNWOpB<< zKu3{XIEH|YCaNM_0d7TF*WP@!Zfq_V;93a;76-1SxLbgihDxYQc^k}Lib{C+#_;B? z4V1Xi%U!7CvtV%*xQn}cqqrBO)+37-#- z`Uctsx&}H0o&?hv!vLcy=`%5g)nz#bQ4L!gKs8L)sdCAO#%h>_7FT^1(_+?YKvlHW z;8tb$Jx#jltAXn$S`8(^OG7o>OSv1!Udn2i4%MKII|VEvA#itZR1G^*>!Za}-^H|u zalfCX8m73bAzvW63d$$V_rO8im_RY%lhtKi*C1H1O#pKKvzt^;W zr}lWny1CP+U;1o}c6DivR@Tk*VCaz);K(`Gs>SK1dLQQxTn6so?%q(pq=M;l(Bi5_ zF)gBg|2g`7j{ON1cB=ZZVO#wk1|#@yX8m$=J6x5_ePSpb`D;G9y~WRq$!}bl?}B>x z=~FM&IEcq7u&3ZBunApD21>!_tn2QycKE*n`OeZI%LmlG5vXLS+xt+Z(_vOg)a@fF z;mzA%X6?}(Rr(w)J_Z&y!SBM|y;0r1mD&I;p87AQMbv%1NB7Uc!gFrjFLc$dSTl=J zEMDFImsBEfPTAbvIiJ^#)-V-jd!s<}9D#29B!6HW{65^> z8woTd{dFqLT`?`9Kz*|al*$4@p}dCzabemDgu^^-n7>=WJwrvLQbqJ<_hdz^hKksz z3;1rZxE$=`?%pWiIjIfFVxgE8G2mCS1l)-OMr*}f6(QFD@hhT2AUWR%__rP1?!f12 zhfxL8F$$7Ck18O@?#l{*6LXK2(FtGP=qHpH}uf`I4pgbLLZ zSZJ*Z!WCdE$OSOLEdhpZg;P)G;8+m$2Lcbl60#X-a4mRjD2n?jh0n6bq9`6M6W;tm zP^UplHBuW> zGJCP_vONBS^7vX&1AYGjE#}>B94DHP#k?^sddq_>g40@f@Pyc+JTAm}tJOGh5xB1( zIMbICU?v1n2IL7t1o45MJ;?-7iwXvF8;T{Vgx+H z-Mvx#tJ2>@i>oHZw21L9$`b!THGXD>ZTz*^jkLS=9C&L+Qb2d)pK~2iqfJJQQkzjm zyKzLaMz%tYY|&}-8CX05zXf;qMjCyY`Vd+?^+`;NsL{t+G@9ww$h{sBL!y{yn9e5Q zI(kx4{w(W}{_y?l-7eziwc+>6@8!{)k8=;gqSL-Ls+hhEV_xm_g{-tK!O&w*>r`y^ znQ_sw94)Te$|`y+qKeT)3lGE2qNQB2chO?2BEyS@me$~29gqok_eM#smf9TMJKdGt z6J_(*)8Wk@71IUW6)YYAQ@Fb~vbZy~1zJ3{Bc??R`28$pqdomnSelPFwB+RJmuHRo zrLUlZaZW;u^nO$<7)PeH~adAh8u$EF9A!>h1%HMNkCT z;?*r9QPmHJ`}d9Ur)N;z6=iQ_l^lV(dqNlg~*9b1vtJD)}TO7Zgc@0^)97KaI1^^fxVtyhC~17^<7n}e za^sV<2pXM>@=t1%$ zgL0MRocs6Sk{EvvZkLFIb&sfau}8WX^Pj$!dc^5ySLF z$7Xjt*ykA23fOJy22b~NfS>2fmAcEAJchuJdNyiI_`sJZ@qebdeuDoUWCIqw0gwLq z;XEYzi<@ozB{D|g@4-4P3RP7HKF8g?(a2jZ^$D!1)9t+DRGXFI&D-HNr`RmZ_htUT z0#E^W_eSH?l+-q8G4p>hE#f#e+Nsk$NJsdpjXSSAPR$0>cwGm#2R{10yu5!=U6zuQ0ectwjT3;z-wuP%e%fm=KsFecn$jaSz|*7S9dz7Dgt z+M$aWUAAushT2`O)B$E~4_4MQd-DgXLk-~W-lz`Br>{qgtBP|Scr0QaTs$@42J?8;1pbF@9XKaeq&sY{d{W>&>`kE4m=-ZFlhnKmhvu z^=UrNp6II2Rs=&&4%5{`@%_d=-AH{}ET%Kxr>DuD zyH9QNquRqhEd?qX`t(Wa)5lpw(Wg%i3vb>rPst0a_$6Ar_NbAg?Ws@yj%m@$(XY^= ziKACiRl?W@*FxgmZj>y4)_q8mU*P3*9#s0n1$O3Woj|=nDA2K<&ao|bDhW^ ziOZiNuJb|HS^8C4UgTD}&?b-^C{YVWa9VNC0zD0ccn|elO^-pNrh*VVrvyVCx9bRT z{c&TRZ$^u&F5(P%Ec&c-TSBOH#2HuX+;-$P*>l(VwU(Ju?O~m#fQtIOq&|%*o_>T? z6m{NldwBD%(Ym~>Gv_5jc~Q=j?;1^+_L-Mb*^FD47u!)@)zNLwofq5DT(yUJdEcCu zj+B>&v*zXVG+kbboyZ>;oE)HC3P%SV(UN7%Q<{U6CNRYGf8P$sNJ8ZYi;rIV21rMC?v0b^{ z^fezH1M(BJo7eTt{v9ud*AU>$lr4+@ne^DHGG)MS{zsOT#Up>sN0$lu6z%d@hTlk@ z-HyJGk1JP#8E$Ww>9&O#Z&&!d1I)d;LJ{?bpTPRA1=WaWOK^8@SdD>cshzMIPo3gw zjE+0IH{dMg>{w4Vehn7dd9zo@FyF2;&{By1&YP8O%QEFGJk>;$CtPyyMV9!Wh zjT{DxhUxb+R3j~7S_F+;({I*DJN>>v#uBeaa(nt+-qJ4~w#?J-)5Z*?e@HdwoK}-H zH!>LNJVuwHr%oED6Ca_)4CSGxJ;EYn$Tgk#1_wgZbiy`6iB2cpyJcD@6#c}sVgvCw z1@;vD1h)Un>4a@&&rc`Xk@hyzi9t|}Ffi(-6WwUMIN=>HI*$o&-n&(qPGB{D1BSHI zi3;RX{L{wVmugjcrxPQb-+clRcz6CYDw{>grezTCSN`tr2Wm*h8&#k;_wVLI^% zSzH{`BGM%~onR%j(+OK8F5tk>y>E;Gr*=p8PCv-*2~>1G9p1dJxGvzoz~W5!6}Y=M zl5l)#4@&(XF)d=i(dh&StesBWD9y)11y3i`)MNa4GK~rUl+xpPD-yo1cretZu`d4R zU@-!o;qKn#bYeSMbk3A}EMol7HF7$^@oT3Ow(%!Aofu@)D77cmNE2^HyEKLxQC~sl zG{u`>(J-CpMK#hirbW=mHJxCMw9|>3WD4TdNN!IjZnpG`hb{ATVx2KV>7P-}IakwV z&B06Qx`uRB-0`$=I4a@&&rc`XVH)He6XvrMi=i3~(}~_RUi{3}C@9r66yE&RXMU#>aDyUk@x}}8OSP)J z(}~sKcO9^YyL*$heDM8S=GUtgsRMCjhP2Ady~_NFUX?v z#HPn0#vh$daQxcogl+tZPA9%IYLxmc)yVyAR`soYkAGxz~cBZiRIjYJbK! zo!EmGGgffUJr*HDuIYr#kbXL0o1sLf6TMbm{Vj@Kw$>Lk56`LTgl%TePbb<@57?ZY zNP}uLOegx&cyXAkQH&Se3Wqm;yH}Y`@OYs;J5kwZU#eB*olcAazYTr)CH3WT_FHt( zw|k*4d+Yl0bFgSQJF%B6&WLFd>EfMEU_WT56ShitrW4;715SMo-8t zEJnaH+})d;PV6U(&eN_Qix|I;>4a_kiB2cF7&S^AKs8dIHIf;HJA)3W_q6hJfV!AOy>0eRJ{lt38nuEJhyQ}vaIT`xq zFXMFLYqXfLB&J2kkZU?|0GAo2vlF%%N_09gwC3e^qUhJ2XioF+oSIJ9X7>Daq8;^s z&2-{-s7AwdVi1iN2e=x=2-F?!**bVonNDCe9)Mq~ole|FKG|RFP^-#2ok;rINSAM@ zFMnXaMPD8~7!37L@0}pOapbHA77f#hZ^`1TF)bopqSFahLOY$XRl+l!c)%EN>R@#5 zbX|5&B&rA8J8|e11*cBHUBRMZI`KTE{>PXWG2rNQf&I-TJ7wPz=6<4<%tvDc_kY8utZ zJxWI5-ibqR>T2X1STsy0hER>viD?lua!n^#BkkDN!T2p?m)|PA3kb#f*6|EkcHr=>!bm`m+ zRe7fq9l`H9U=ersCNFk;PkrgUQD5}s;iJ%(>b(;VUET$YhUvs%vN(a2@K{8;M5hzq z$%&PAI$^7XXFBnbG2ql;=-%nO*gcsjxOd`6b!8wz_r60w{|FWh(~04fdS__!Sj2#% z(+RQ&NzhIwZkHK~hYFrfsHsP9e>29PeuUEVEypj?bEJAO)Jwg0!im4`f5z#=4`i`* zOp6$QbUMNDYo`;o@h3W+Xb2JMn%(}ole|gStHmy$?|92havKd0&wJep8Lb+X|Qu$!Kbvvd-~7)BoyZ)UhVR* zWxm+a&zPa~AF1ZPW<6yUuL*{FhjbbG@PEeX#7}53V`fZ?kRjJ}LS{%mov_VNqSJ|b zZ{JG`uD4FUdlJ(%1@;um+yCvYn6{ZcKb>et>f1~wzK3cwOefN5yx7gvD8`H4aPP#A zrw9)8VI0n9+0axQM(Jlv_`W>bs?2@iLm*sIG14 zmmRAAGS}QMR3Up5lo&nV_QKG(L_hh2rzJy~96jZZ&+I2e0id(!kV^ph&LNO1R z({qx38$z+oWJiNE9Apq=-KTG zs-2pfmuy7!X|$Lzku&76m=)CrO{libP@<@=P~g}a6unr>#f9;hQ>eDh?0HnT!!%eu zk+2%7(SYhPG+unh)hGz?EL`(Hk=HM(?E{c@|D}DZXgpG&o3Sl%&30NTyuX>g?z+% z${}G_Fw|eYo{oAR!YbaM*NE!B(PGBvm=?XLCW|Ii+h!vKsZP>QwS6{&>NCsaBO2)p_$7 zS?~|_VDv!0o4;IQOcEy z{%}40PD7+ z@sMCfby9xgkZ_hNWDDylP<`^NU?{9!t9EMc;Q~ffpF@ioFUGX!6VC610I)tSGo9z@@ttv07 z2ZG;qz#8uEP2Bo6B0zn)nf(@hdHOQwOZ8gy_dJDu2Q2DQJtB!L_Ks=Mi)yk6K50>H ztAq#D`@lT|swYvRoKwm&QE;vL^pgsz(Y^1%JuRvqkb1^T6r);A6r%cjb9$0V%uR}z zPXa}X8FE1`+ zM0EkO_)JWTSyBBx1gk~0tr8woR{-}6sD70arCg~P2-m95boGns2Q3rDs8$n&V66t; z8q!mc#C%5)vn!-Wy;kj{X98G^fM>Y7H*o@d#06wg`D?;wghijIwv9hgR4;>w45*$$ z8NG=$lC1~Vs?Yr57uC(AVDTnjxsB?FEd8=W^*iR8D?}CYHtQ)+edd>7XpnlX+Nrq< zE;6F}LbRBnyi!_P^rHH(m>%m<O@1R?27*Pys=6>)d^)B@FREDyEvjvm@SyrtaL<71X_P4CO2uHfR{eKh z1=Z}Hc2(WNGEt0bHBl($9CLb#keDkKG5bP#)N9pFdX9rd1FDOX#VRo^dQr{sYgg5_ z@h6Jv;)RWiHyEx}|NV!8YK};|s%~kS(cDILD@(uZP<=J%X&4fUQH8w4 zdJ0tk{YNnLyn3zLsk!b&jHtdCEoLaMYnB$Xq8bKAJ*sUplqjkT&e@y?MbDQ%Z3`ZA z3e~omJ&$U8RF8maG@yDqjTg?DN-Bf}VyU;WDa_ zrL3nw^?zrBp&{zEYSi-xR`Jyr8&Q2ZTFg*hg)A+4QB4+2sJ6{eqNx6|>;o%M@tGgI z`zIcA3e~omJ&$U8RNn^GXh8KW8ZS0*eT(s82wbZ^ce{dWS&jNt^-QoH>c-H5_6#L;XN@meppQQgMUFP^=dQGGS&X&4f&rV5$QdQt;}mch_4^;)%4bK@^DqB@8cGrX@E zW{X}_|A6o}q1rY>iK6;}YMGy+=#_2^@5N(Ip}Gwkhb>;kokw*$(#hsp^#Z6y1FGlJ zc;Q@B6ywFP!r@4AT?N%xjX%Jz)t&%vOFqTV9`~hMRbEu@1HTP@c@6dD>)yUht_yvs zUaKa*kuEh$7*TyKS!^EDq8HVygcjAdN_bG+7~C_U`gKZ_a;0KeZ%EX51=Z}H7S*D7 z;wOqxttJY^Yz5vL(o>4WoTG?29@3*;t9H^e6D&rcgm8Cn64j;2VyT!Gy{P8+wWw|< z&Bq&N5=He!h{&+2o<|wImLrm_w<8?MQ%pfMN2Epdla>+XHmciO`o%+n8P!|OHCKiz zWESfwP@Sh(Ff?4fR_)YW;meGuE{hg3+Qqb(71b~}>Q8{%W++iq56{1G1B(9W(~n(^ z$DBg7ZD!A-T8uU}s4fN7Xh8LR8ZVr`J1EAB;oHNJe2x5~nx5l>>WDW2a$l-d<02U3a>T+bUaZHOoQEjV)2h{_>Jp-y2 zP@JC!Rc!^?EtBFEXzhF+!^(5wNikMR&J?gb;Cq3K2Vgx+H-MvXv z-#`|xjA_v)s%_&>6xGKeA_J-yQbw=lh(znXFfJU)e}!LEKP?4|m(kotbw^9Tct|j# z`ge29m8S}s%6bY^=f5HtdQrVr?bKXKNh7K&pv8>VF)eyg{i9gN=uvH(p+r%A;=M66 zVupilEk)B`rCZV1(AK=mRTFP!^-#CY-Im~fgM1#79ACyw2TLd>KmyqU-foT!RFAH>a}X}8|g9uEE-UK6Io1+Y0-;n zRzka~wpGG|>P6t50o98sQOcEy7f(Z?<|?RW_q40(&Qi{J13RNyO%#gxmN`8)lbEk4 zV$KbQ($#C#PI~?XixKb)clRbyeG6GE5!0d<)f~TeRc#x8qNpx;g%Q~GMd|{?rQ0m9jZ%%o`xZzB2~!CtfxTr1!aPv5$d&Sr{+3d zX+-s{Xfeb4GF!+FS-VDQ4}S8;K0M|Ws%74Ebb_YPG7os2&b}8~U;m_2mR_Utah)bdh?k z+Ud&(STvxzGFf!~1eoY_Y0)RDZI$q#dLOuFK=m7xDCJ7Uh?S72rG8P}%`#DpYBf=a z>VxL=R3S0PDd|}n42@K;RXgb^ca;&NhE) zmvKa*^+v+A>WgktP>m7&1WD7Py1QjYa~st?Ed8=W_5GlyVMwS(6*7kP6b*dQO~KG8 z^;$LQiB&x3Y9p#|LyH;Sm)Syg$f6h3GDCV)+h!gALu?cm4a$^PrIt_CGr$EQH*LeQ8>t51Kt|alR{#SRMN8w(xYChcGB}CSd4&YxVtyG zs;)^E3&ymV71anfEvjwfPZZU|AtD2+S5QVT;fQ4G!L{n5)%>Emw-hX1>*Y48`&jzL zLxTAP_!x7|-A)yf&U%UlE?O-ZdP%)j?bO_^YmBJA11)BFUuFy0A&WjyZJVJ)QGG+H zo&8btp@Yv{i^rTowQXk4qq-fY!D>}~1gg=1>bGdTaQ+It7%yIeYtQxYt0o5xhqs2HP(R!od zT6OU|6;yLX+EsNwDcJvSs3vNFZ}I%HL-hu8&DEv~8Nzys1}=VQFf>NJR_)Z>xl%?{ z--8x2yf3qb?2tt-s%3`st7_W}C5r0z);_lni{Y&UFRjC4PNCX1v*%IW4%1+T>WfPo zQN4=B3+JgCFN?by&wKl_ z#Ba}X8FPno!!>YP2S#(~>EIM6U%!+Dcp%&G)N_bG+9o#dZdNn0Vxl%C(u2q-V z<`>mrsb{Dd+xja9EzJL!pl#R&XH+})c*^}T3u<$p0P z`b4#D{E4Fa2t;H+^%}}(VU9?&-dMO+eQABas2(5%iy-apmVj4eX6+utfy$;OX~+iQEi){L{WYH)B~$f^nXgE=EdU_*i-Nm*hJ<^21>!_P3w1RkKfy! z)(#JWd}ry9<-^%#p*po?O%w@~2;`GLVVl|Ws22L#+*Vc}s?o5jew)UNd0gLOych@9 zsxKd^pcOnG#wtcBql^4~G!S6a?5qI|{QQd(0@;UZf^yTG4p^MaO)#NwQ zWfWL6pgNT-I`4V(SoETrmC&NvRtXQP=Ye|$RIjB(DOW1S!L{nkcPOZ4_q40(!BWq7 ziQ++8O%#gxhB-YANz8sqdUgauNHEg>`)y9Jq<%bBdWQ+ ztfy$;l8u9*3F@_Kr{ZJXKisBT9+V1w#sp&AXSUPt4F^8lMLLJi)x;l#~UxWFV(8@qWXF8 z+t8N}P+#`;_T`l?K^Ljls-3=E2Nn&eZcG-Pmq&?Cmll1Z+Exhy4;xiWXO%jA_v) zs%_&>6xH=1BEzbB17)-TM1jb?c2UxE2-2fo zt9H`!2w04OXSlmJxvFl77FQmNY0-;nj$gZ~wv9hgR2QmXMD-@hXkLy;wBE~bt@@g_ z3aU9G?W#Im3KnmcoZF}#Vd)nS31(DZ4SE`Ct`*f>C)QIm@HK6Np-JksYNzJDywQm2 zhtXn&_hq(_9kS>}^>Hyc>QQZ*p+r&L`0(%aTv(Z!AJKv#r%-L1+4HDwM?GMJ>eEn- z22{UCVVangLy; zUaKa*kuHzjWJL9&WYKxdRdl+v=tVUvp+&W=5*}2a0rw26>dllW^2n1X6{ zPmAhNmWg6itBFD}AGq0=p4KGhQ%ZV{1w*f>*Q%ZLyag5`;2G}jO``fSw7Bv}Op9Jr zbNpIV+s2r(u+fdcnEauXh>z@CDiz!vKYdGhRb^#5$GkmK(_;~0-^mT`iB z>wflI7Z3XnKkC^~KNOMu#4pqEgWUMvm4dHZThy{UKluaKI9L2_t0|F@2wldidkdfWnk5{LW^g?Vk=MyclU-ClNzRO zrP1iem=CNTZk^nt(O79dUf1bHqapI&=j3Qq#5GFb83Ekl`5S+Uf;zW- zx^Q6Z4FTGPUGWihz9DVI6R7hT=b>LQUX&dh486J^$BS}sle^$Z#*>&isD=h!ovGBR zzif3*bi62YXZ|ZOhF_n4a|<5-FUJe_9W}Oj!13bd>!Fg-8Q9{D8{(&;A8|Z@k=faJ z+^8tO!**x=a&x;1Fs{yhVkjN?Yd$&#Zax`910XPfN%?f6d2u_Ge1_)nP1-@Sw~YXqvqw9h)Uos&I% z1~~duk7=Lt*tYoMY~^>Pv|lYyDW?5I{eRB!zgkTDtpA*A-^iB!%N_k=*C+RD=~i!& zeg2w{@#^P2X}@ORwwV62{&SXPPyd&t{oCT`f2iYp@}Kj;$9Vqtb@Y#&U-th{L(yOS zH6P>If7S6nc7EB<(vx1#mj6Aa{mOyZ_0M^1`+N5C`@XbaGf*>Tez`tNXLJ0SEA3a; z)DPRw?)bAr+OH93{LHTX1&;r*_2D|nZv9V^_HWaS&ul-t^*PP4Un6FI*?xA%&vDXz zwK(;8XuTNUxL)}fufNtv`zf0G;r?p7X->BKtDCf6SyMkrzx+mgclt|y&EI$CHm>=D zI9DJh2%V*UZ}mjy53GN7^E+AEzfI$RqV}ga_G6F#oX70)Wuv1{?D<2Y7$#ux~`D;GLtIv*(efR7zTA%EHcE|r&(tdT# z{E+>eb8MEFpD6tmZ+z$??c-T9cLb~tj}LS1T$ru#VX(AcB@Q21f7XkS@%&%r=pTE0 zW;@x{f4-xC?D-*&57{06$4dLvG~;uk_D4DPW3OL0zooOe{(4s0ucF~E>!02E!yD3m z4UIlr|E0?ce(~3Qj8{L;Nc)vF{l)%gw|?eH`_%)n>y!QD^)-LZ$9Utawa@xww}0Ps@*8`8&hrQ@S z`_KKG-TCbVX}_B0{0aNd`Q@+q7_a_kIR3{T|C#UEou6!x_G@bV=lmYppFO^$N&8hb zv|lBM^1I3LUo(G}^EEy{!{ag^HBJ5S zIFsG+bGEc!T{Hh@|9O1lulX2ne48rm-=%qYu|1&;R*rKE|uh^|C&_tJ7$Ga{Xj?{;*Q|pAu*O#`VL$kB{;6nJ(?$ zrdhu*U$T3CvX``9Su;Om`>a2I&Bu8D50v(+XzX*HWVilbarE(KnAeY7Cv2a;=3~72 z*(mGBJ9|XE9WO|ACTuCO%x^0#A#a%nmH4NM5I%og+Yd*&Ff2iZXW`4rw zC*}1!u1h|~tIwyUeedi)TAzvLH$&P_(adkzes=jg$MN6WVXQyb3HL95&Bu89Pn7nn zX~s|XKfC7#7D@Xx;^>oI`wJcWvDZheLw3iX5z>BDjXvB**`5EdllD_`$o@Ny{n+Qn zxQ`CKI6GVCC%a1fl{NWg{j)p2eM#D{rkOuD{`2)0<@{>A@u8EWPjqa<(U1Ep(fqD; z?8lyeCaTY9N1xc^Cy&F~9iN9u`&BjT3$~x#^OOCg{VJOLvi*$H2ezgtK99n zuM+RhdlD^<=~&qG$i@d`aZ*f+aKGPKxQS2R@7EqJf=}8r~kEEMyz>dzJE+(Hedg3{AP4o?wXHr-**H2iLR@SlIgQJYa$D-45;<67?a;`nOls zDR+k>_ut^X9Y2HILyLXEqT!K^kI3Tmm=-Zn!##<@fVGcoOt4H;N%?bXqR`v2oeP^D zuxN|kt~|)zirYx$6Jw=?7J-sqO*9;u(8#msdvE#fWBpo-L}gDByo6z{FJ(VHeF zO7r#i$9=%!T(a90`FWbWBb{$)t_|Ps4;P0aO#y5V^8*%q(|UBe(**tv->P2?K7X)h zBYJCn{i7f69<;fBkJ&pP$aDJH&OPz>*=*(EhuB^*_`F_&ZcTOnF4lt{nBOaU6%GuA zOyKU`C>wo7w4;hu92{ht?k;-`Js|OM#?`;!xA4a2d9as)oz*G`pQ~!6xc)!>EWc`y7v{PLDd0yPyNP5K zb;68X3mGwV+^5uWe|Y<2>fUgq(NEBEXI&kK{m}s}4g-sCgLT~98{uUOgDd`yct zhR#rP9O&uJalt^ecV3p}>+i2-e59!|{v4L9+|-=$_njk#F{*drz%=*{?(U7k7(L=i z3}aP(4nqvCjeZJ-ris5apOz(zhtx2*RBgk!IMBp%?|9`(l?tJ!q&?-ZKLJ@IdSyFzepl z{CNNF_kBP9mZanTO8)RdZelR0pAmykQN>=(*^m{xDHwX~h=M`Rh8Bai*>Er@&$H<6 zYvW;**N15`+iQ>fa0)*?`p$r3cuW+7e1Du@4EoI~W3V7(#L#h{Q^)|I6kIDF9kc|C=8xzDfp^X)|P^5<}gvM`Wq?uGP< z87bJ2Dpq-YN8>Mpp&6M91vwj93fg8vrJ(NWiH?FZo?lQEvp(l!`{H;^l!AN}#xDi^ zW|b+p2r^>mxP8=dN4@Crk4dnGdn00KRB>#4iPHy;UjbXH3C}rb0x9jDAD<|G*K+j7A`%Cv+Lz1Qrbx{1z={E{bWQVwHD6G(8av%{r@4 zu#=d#=}(E;W<#Z*?imjq1#cO>_B%}ch9-x8!DFHnd}2oN|CVdPu2iaLSr{?6HoGMln%!HWAcvu)plujgC|HFkm^|2+!GomtA$C;g zJsaL<-fXxogB8G{fr5v~;_#Rjy%glowG@Q&-?YUWGns;F<}gt!z}pB|!QH)4qE?M~ zh7z@#y_Ja?4v7+fdS#KbXlHM=XGCqiRVnCaOu>lOnKSx5>Hi%^Br^){Gk++rE~DRq zMFRy7qs7d*F)ey2C^gcr1+i{$i&;^>~#*HN(blE5g;`UiO$ zRlsAS6yzuV{Zi0xR+)l@AtMF~9-)qNuBwQRn|on6(!8G1ahQ?L*uyozqJe@xkVWSO zpdO1}3X(;TR7=5GC^&3>DX8X5SaE&CFeXA61`2kkQgv<*5~bR_9+YaDLO~8gOF`Q( zvQV%pQE;X?gFlkqUvp1Mz0)9rujw-QF<3NE@F%i3IHpA}1vzvr1!qgq9ZIUQzZCSFRi@w`$cUlij#0-s=aWRo%_|v>w0u<8aTg9VQt&ugZ0qe|Y0)PI z=c3@S`K6$mGhxN`5r?9l5Qc$*y{J_G;xI(1wtN&yb&OvM+J=#Zg4KwEgTPTk27e*F z_pqZfgYdfamKnMXE(41O3Z5W~{bO46Qm_loj6hc{1z(q<+fq=?946|z;YJGfrbKkfJ0ge+Ip)}(9f8H5#0h288Z4S>Hh^sBr|$69BEZW$tXpH79RqO z1`7U$7BiLmo#qLPUJ6Q$^c2Kf196L&(VU~8_jy7c1NEPP>{pWt_5ww$U?!}h=Lct zXk^wY(p$L>yI>k*@FQ|`xN}C39n~^xfs`oT2*)coRcDlSAb1-AJGi?ydH(WQlJyg= z4k_zLAnO^w%(C@XWtN{203(_S5g7<`8Y9Y_$PvkUKNF5Tl1gJ*dsTluVHQfk;_07r zgz-L;ts_i_-miCQzqQUcGgcg^x_aRn_**G}o}*+$!JsD#nI*Fr~_ORu~4Aja9L$Nf*> zF;T+s`+NNo#&1@cFsmUW1|IxQ<5Mfni0F?+Rl<=+M^eYbWe9njA!ej22%zNwoYtYu zFAr3OrJ3jf3+pU|VccoSxBaA%w zgY@pfj!L~3g5C$o(I^ktQ7sP^ONHW%N6Z6NXOwjmcx&Lnb0q7B?5&jbU@){e4|xk( zDY9zUFt*;RJn+-67|}wA$iRa$7*Xapj!5XgI8Qjzx(!C;dMr)qujj!MOZ{_>2i_;- zbvzh--|2@QxwYQM>ED%^-|)$c1G&kAaU+d92vdC(;B1KcYTYInT0+mcx*kj8Y-m>; zw%JIO2W#HD`D#r34@tEV1qt(j- zg9l4d9@zZyKvh^+aec%#{{zA>@L&KHmh)JFD6Ge3Lt(9=Ffcw#9@vJFg$Ff=2bYa9 z^58GhTe(AJ$tuwMPjb`;58jXx+44Zu8D$*=-Wqr?kYwG;)gfj5GZ^ZhX& zPa871Pj2#H=u1W(45Io{9(sAaUoi9rJ^Sh6!82kus$U=2W<%wH?!6ki^})~8TO7v3 z?|d#yTu5|%!0+eq%LBhzWgff^88PtS9~z$?^!CRa@QmvdZ&Sxdd4L&t287VA50*Lo z;qRehRbgo+dcc9}D1>3)!C)$^UpNdga6R!h6xL=61OJEM0f(VoAJ~SGg$F6bgF>T? zJouON?#zyg@#u}s;YgbzU_T#13J?PpL}A`Fbrk_Wb7WZ^+g z;=w=QsNtITS<+j%cW>Ee;Yd5WCg*xF5|6N29%MLr+wnlv8D(uZ*2sgQB3B@8~yUY)?1Yae)<(78Uzs;cyJCQ%6yR{5hF&SH~M&ggZu3b z`u8_1>D+J0;JfZS{?6{#n!ix!bh+H*!DHi$JQ#-A$WR`HXg5C?T0xHkx_Hn{%trM* zu+0YZzqe^7XU8R-TBXx9g;P#)O)o-a}r7FJvzvCTI_7$`mN?u{;djv6tX z1}^9EO)+pi`2!Tz*A&KJhX)+SgSxjZ*oJ{T;9^0K#ABw1!B0I78YYq4?G?Gd4oBMG zL4HP;2kfU72dkwFwx^3!nNii||FF%Y!wR`uoFy{p)dv4;O zj03*Woa>9f<|Efv9+~Adc`RS|m09@dqni#?#bcs4;6G>U7YBZ`$~YJR88P4>4~l%NQVc>Q6D^5DU`)Q0|TI@Odz_ik=X2 z@u0hyjOuw{n+=r*y4SkvcrdbOg&mmqM&;h6W1>9ZKVRvW2Y$24Jm>`(G4LQijZgKx z{jmxjh3igz@@zKxnprCtUoA> zC=WOcEe~wN$if4$KKKG0HSnMS>HWB(_aC5lCvr5(19nuqK3MPQZFjmz)fr{2Hp$3? zmq^w%?5*HI$4Zasvln3msc70&$t;z#G{fZH_hKLM2D2Ned4&sOe4^}q?{f}Zq zE*{8;^y`BSmip%$5A0s?((+iouLrzZfBDE>A7A_G!<)mo$%A`eG4fzEW+OwnOT6RJ zU}z0JE2Z!NMjt&7Y_pLl5B@vbK8%Uq_WAYccubTB{O3aa^1yFanFk#qBL*H^K;u(g zZ-1m#=L5(vYjNIRv^=m4BMT423t2t|M-4nEM0zWad%T?tdee-^b@_lD)$-t7DUt2^K-C##y?L^c z2V+Urm0TTC)-;gyalbsU^)^u+G=zu@Jh%`e$_#Tvf(LIu9*%Sg_~pSSOZ{_>2X-$z znQ*qr2MvzgbKCHWjUKIeWBmtnlLr-EHS%B_W+OwnOT0@U7+OnD4Y_#GL(E3?Jh071 zqCCiZV*AaQ_z88#eTm0JdC*_}c^6ehiu$35OD3VOdvjz-r9?5LIpn;l2()(5K2C~J`^MjlKcSyym%2p)8O z6=dx~-bU94?5%cvVC!w7Jh&MmGVq`XMwHo)BN9A#r%O2U%;gx7YkeRi(ytF9mip%$ z5A0t1@&1%w?z?_kqupy3ztQ8Ct_8Q`CJ!!}YUII0%tnTCm-sW62Se-VsUd|2F#70u zV4Dq<2f9D=t~+1UYL>VXR_UGXJFox}<-v2=rNj84Rtzn!>>N#QK24 z(DJ}Gj4V75FX?z295wKu80oD%?y>%A(0ds<>VpUGJ9^vkK-C##O_^ro!6cIPO|A|p z>oSnFKY8ne2e#g-Jn+-67*R8b$iRb(F`~>q9FgF``u^ca_lg*iA0BMA)IaBVVD|!y z4=yVHzx9Rc>{~lw){xmLHJ9fm4~9=S^57NBMuu{ic=w9I&<1*H$i;)6Vm7Mhfo(Pt z<-y~vSD(YgFS}>&COjs}gK#!^;5VzxgV!M=1|Afr@#%JNe{6uqqk43sj*s#HGtv_T z(DGm#$^%=xiFIZCpw^!ZK(^*?d#ha^*m|2N4;Dj21|F2ah%$R}M1lt!UkFEf-mCCHMx91rYX zS8?IUR}a5fzJAMz`O{Ly1%57-n>;8p$H;@%FdG>^ayCSL^==&uy+=~Sv3QIH50}fmhA&jZ; zE!^E3O=MphF`Wi3&D;#4zpSw*oKjX2jX=VYrs(h53V4+mB&3c*9E;# zlcPR(uwCk4%L7$sl=YUmMjp%{S?6(eh<@#J8f2YC-bT+Cadl{UVC${Q13&$W5w(Db z4C{j{F`~>a9FeH^&9lOhzT%Ge_Rd0*N1zmS1mg1h%u@fFIrQg*s|4&`SFyIr;c2~} zx@Y353qMUcboajAxyggH*Nr@wiP^|dZWHg@I~a=4Q$sEu^cJ%t{rbQ*8;SCu(15>J zVB#l_`hgx)N|XnKvdII#S!Eu~f{Yk=a21VDmA(BDf#;*1U8(Q@GtwJ`(DHyTufPxZ zT_30lquQPg+x#SiVc@|m8n~4Aa6Y>-7~0ZA;Q@!C<$-M&S$H5`S5ab~kq1|k-pcbH zTbhI;{R$~OU`Ms$0ttqk^IL>9HY&2Qd2Rd0?B3M0wD5!`ZJe@gH{WPV0n3 zc`!JeJn)-U=E1Fy5d#mdq4BArw?E#8=cD?6OdTIxA8^NOdGNW@AO6+{s>0Gt^ne4` zD-ec(2XkrQQr^Sa|Knh2>thrK#wV^Ha2Q%1*oKjX2jX=V?}DR-^})5IxAMHl*2lt; z=Sq{K(e(j4s^!5Kj^1|HlU1Ej);bG~Jb0aCoypZ9c<@|lko6t%Ho89OBWDX*9@u)D zC=Z^5hzvX^g%M>w#SsY}Y<&mxpMw#(cz_Z0fwIxA4|ZGX?~e!eudDDreV~6`#f=O0 z?fUPf25E0zTYO8I%O?eMlLtc=8F?@dvyq|PCjQ)5C-Z`If(wRfP7uWd>Xj6aTsFY z3LgrFKIlwg40d?HVQ61hVH*bWfQtnk5|1BTz1WC@G98D*W zqAd`S0S9FEC~#NXR~s*z@^{zg zzTaKs$K1rhcT0>oScuukQ0@{R@OCit5j{2J!a-jNXDtqFv%xsv%LH6s{52mL2kPa6 zzfZij5);3*)Qn?zOmunhd^VQ{ezVFr$g|XlgX?H~D(~%&kKpmBfqyDEz>M?-0kq45 zeJBrXeoq&v3JWW)kJ#poAq>OvU=a;m%4;|W{t1QEkHWzC#PWc{&@K;b!%&w8RmJNn z`huf|t8hNk;vyq|PB|hl0VCWNi zYDnP$j6V9)MYh>cd2ndIzst#&%()q=J`nhOs2U?~k;%4;~EF9L-%+%FGo!^pw| z@w$o#IBMWQdD2^X+~bqsp!ZXLdGL*t$d(7H&M0e*Wkw#nL9)KW)ggHB{8J$7LBBk( z^;YG9pMJ%NnnOf}^+5%UD6=(3BzW-2LD2sPjL3DmND@xZgKsVM&p94=PZ%`;fB3JN zRfEqT?AZuTxCa7xYFygvnMSG0Cfu;I+OnAg4(8_iV9;_S58lLVWGHuuKmS88w4I(B za`E6 zeZXO8*9W#?WZ{80Uv$X|BM)vOy_Ls3wod@P2a==F^#MDoT_1cWC9>s#sx!(u3cNL} z50;ax6S+DB4~7f`Sx=C+(e(j)t6d-1dYdQ@7D7Y@9^8x(Wj@Ri2_9@e0s8-k5xICE zBhvHWpr!sf#{;|9Ra|l8x9_gREh7(BU^X(8yTph57Yyy7 zr-l?B!04mrfo(Pt<-s49o%jzEAMV-zT|6ergQ3~vf#0k$4}OD;7kP!n9D$)3KwYNWZ!Q)XcG^37>@<3)p zzdksE^1$Yo2dcutit8f|Tz^3rhV{WJ8n~4AaK6wC3Tr8a5#<4gpOk-|xI;*{aHiZxV(QWO#I1O)xvm8ln2AJ$pgPxWggtI*2sgZG(KJ7 z?T;_u@u+lhUrv+8D>YqURtY0}pP)h%%dSM1lvqON1jM?(xfm zqn7&T91rYXSJ7zmv~orNs$F#QozE8QHR|xH+~mQsbw(b%gW1SX?h+qyPcXEHo*HuT z;5kWWEe~w7q4J>gvy15QWUe

UePW*4r9j;>SHWwH_W5<-rTtNGxG=IxI?@Oae7A=L3v9$-eE0|B(x59szQ_yNB>P!&d%JsY<9t?P|ESVsew@*d8S zL!hv>Dm>sYv^=m4BMT42>na`wM-4ovL3%5Xd+gZ?dha7gqw529RLg_oQY2d*s5+yp z+rV4H`d~fD`XX0{;K9g!!O)kb$=m4qfW6h8FS7Mk<$<4m#fXkTLWs1$d)LT=cS+V^TpglcU-~T=+E>vp4{W_nlm}HIA_EWZz=$#%azvuu_f-r> zMtAqigWoLmubD%ytEg)Ex{B&E+g7MEtntqiuYa|1?JxIynwvbhe3Ov}n=l(0%5CDK zy9Y!2>Fk7y2VpTA)$_nM8;SCu`N{nYF!7_W`tx->Cdz~KZ1TWwR+$HNAtQ$MK`k1e zih28EKRh2bX1T%x%m|(_)2imj9*EafYy(FPJh+qeR-X6R|6MpTHa|HUT_3Qc+Vw%El*pC`s?I2D z=shD3Hj}JrTpfZ3WAg_?Ux`2V99J5scYyvc zDm;)8>DLFREcMSh9@xFEV!~f}mVPj%(FenN&6rW==@Qd&lLx&v8+j1HY-A|6iI06T z82XwX8&Y@xqmP~kw%JIO2UBmTR0J5M4M6`H3J)+MI3u9v!5^0T`{RNA z>ngl=o9bUzQRd{rKcBrf_0diDG=}VCY+VY{9lznb^v{4-TJ);EGdFQiZJQAXA7VB#l)Ju$O|J9|kN4pVw>9ttlLwEd@T~|6d9|Z(6@od;Fgx zv$;I*n^nd^Z^(#Yd2la{PX)aF@f|!K_3~-z_$UrABLg7-?egGn3=cNHI8YT9R$L#k z%{M?8Q{j8KyEl3H;3FEil-F>+d^#99D9*xQeByKwhoL=PWE+OMJg6pKSMeh_YT!YA z(p!1l<6!=9WKu(g2kfYp2meSNY ziSpp3Z1TWwR+$I+J~8s(ej1;Wy!~+)9*>$LZYYed4`fF4>w|MnfB55ps<1Q@J>bA~ zKZJp61Ki!4Tp#S9flGN0=akaH(2-IK4>%0%`oK1fEIbgetLOoa8hFr%^j04CI8qAq z?yvBG9o6!H|1gy8`asngWjz4i8hEgiWbMh-A$TyQKgcRxt`X${d#mMvt+$Et;C~R2 zfd?UsC^Lm45gVEXKf#0k$4@zw}^56mL54s%_dqnid5Ab-@v=kbjeDEOI=?{NA zP!&d%JsS>O?I8>U4?f2*Rx0n|oR$&{{dfz7fw776MLck6d0-nx79NP}2P45z0}mRb zqo#yLgfd^lZtlfC@6g-$V4rCok-bQ&a zSj^w_*AHyHO_T>0eP-lA6RP*yI3iK+KaLDXUMq?bxvn2zM1xH{$ZM&8&hfzRbrr+v z7vH{PVg0}7KQ{0EVfVhWBR6?)9I`PKbi&=e;WRF(&xqZajSS^3@z;t5LqE||L$37! zXG44az&0C+@}TX(ReLd#?xnA4iN{2FFeaNk@S9ak0Cs$l9Y!8BrT+NW+aEu{<5ANa zQ^!YnATy$0ALMiT!ygY+g;8bChG9GmVHkL@hXyX?J)F}U2SY#KPGLlOz+q^4U>imj z9*Eaf%mhabJa`ZtJ*7PE@$>DV_X2V>$^&*(%Y*!m-gZ1tbw*i}b{cu`CCS=_t3&W$ z`T~%3GI{Ie0gRq{9@u)DC=W_OM27W2GphG09FgF`&y&NE8P{V(et1y8QvaOef!*sW z)}1QbXzDk$8xOtwTzGNEy4!P;2gP<7d9W9=k)hlrKI8ge=qNokS5-r9AF&>^{(Y zBRT4W2NyVc+wnlv8D+ijb0ZJ-ldK)NIs^}9ZUk9hCvT%XcwWq=^*pfkHc=kj2oV{0 z(1PmyR*p#U;MnWo$gDdtA{P%ZBK$G!`JzIW`sW-E>|R%KRYvj`m;YIB$l9?#{rl&8 zTleH94=(<~$b+vi8yU)7;BUQPv{6jXd~y$z2D3c2_F2iA{?1Rh2n1@yK+A)oj^1`W zP<2LGuldr*gYQVzc3d5zU*{eNS;cB5$^-N^4YH=ao^0!_$^$?BiV@X@hzvYvP4!-Z zBNFxg>&9^8^)9Htiw80y{raGorT#g`gOotUK%YQ=*m2WcPfq{!pGJRwb>G+puMRIX zcI8{0a+3#@_ZoR{5VMh?+$R2dmtg2OdTPkU1I~taePEl7M0v0%sr7BB_N1vF9>!y$ zJeZJ89{9~F^Pm-E#K42cs6T%5_Q!AVeAGPgp6KZMfID9M{K3UefB55psxYeT*|5#0 zK^O)e9HN0sc@O8jrNPk2ZZynde1ZoYhIV~m8%7o$h}TuT2aXze@HjepN_pPnWVdi+ zKK;R1*XvE$Q7sROJ9^vkK-C##y^Jh@FlHk|xlMfj&|v5kJvQWr2e#Qrlm|DRyXavYor=BxUSB*W%7cm7s#oPy`07DQ+u^}&M@PJj60fvPa7?Ab7ksSt*N2S;e&Qr^S4AOeLo zK;gjt6CUx;|iUwLGx(Hc=kbhlmV3Xh-#4mLn28IJFn_ zpNbK=)(0{o{rccCOa1-v!2Wd=-n)zR>w}N_pZoav_4S&+@a6Xne|ogs)ZFAj)vt{_ z_z|;_q1-0EaB490J3Th!;sIwvyFReZ2J?WQf9Lflf6YhT>ndI-IXoFhryb?$;esq- z9&F6!>ni+a6^j)+z9nSDz=J2LKaP6)<9B#IYSDh`_$Uv!ys<1cfo!Ss!p1+SgUshJiew%8>4e+l$@>KMgo& zkA9v~9{2ctL^!heR`Sya4oW(5+u=Z!nQ-up5eGk$sto!(T^`tmp)L<@6R)dy z9~?FC;AzrZdEDd7E8)n}`s8So2k7Wf&_TOAxXRJnjt8pFDCU;%9mB0Jn7ju&bw|-~j!7rGN4COBIrQ3p`zv!tU7Y{fa z+U0?5HWKB*Gmlok5=W=)1Aj=xW1>8mluaJ^%_{TYA;^e<2c4)t4tx9KFL*raO*(;h zHp&C;cz4=DTI!#3Jg|FRMc@Da*X{QT_nldnXGH$84W1aC zn>?s^$jF1=FdG@lUE*(k8w~wJPYwCufo(Pt<-wPCeo2GVk*=9l@RLM&@Jcp$;5Vzx zgO-pH0}r}Ve;oAo$3O6R)bb#8ybm6fa{9v`4^)LoZubWqxMn~Y1|FQGflGN0=kg#F z7M%v5`M6jg43pDtEe~wN$if5hx{A%{k1tCG$vLzLNRl8bStTrCk%cCTC`l0zxu{?O926Ip90Ww7 z1VIrM71MQ$5qQR#`QDclvvKo4xOQ^UnW&>YU$H zcU7&D2N%iKc6@X&9xQ*^YI8HUzyltwbbg>4tydnj1VsuSJWu`?N#hd>oP7)X8#+dXb=1ivRzprPkQ+;1rl?sojvSZa2Zk_=*mdP1NJ`o3IwX)!As<~u-zkV2l&k%Y=wBh1C{cilH<1?4@95Q)+c{e z^58GBwG|&7j0Y);tv0tS2t44?N_n6gtydn51VsuSyiEQV;EEUzZddU6SC*p=)Z6*u z5L6_eA5_-#KjV0ycU;AXfyQaSEN!uJcJ6Fj``209Dw;ePc3R1UYnY8>VU_sGa+V!K zyM_cFU~Nd}2fEqt%7bD<#?`{^)bw~YAKtz4V0MH&FwH9G!6L|rf(Nfqef;3656Fhk zzp9rh52`rzVa5Z|VRYGbVdFXtG88XmPxwWvwpNb2LAJ*8(ZP7IYMo_gx}TyA z%@6*S2fERE<-t5qq~O62@;@(EL_7dBKL6_as3>fH@UJ|ms_B2m@j&mmic5ElE*e{) z$%Xm5w+?>lfjP^f$%8k4Q}W;@W+PcxCBC}8WyjL4p)ekdX5U8TJkZUCR~{6a@Cqa} zCT3@)H_PJPD-Y&G$OF@?;$X#!Uj-Ra@L(v_#{qYJ#KQKdHLp^|hvo;Ek(&t6h zocb{1f#@*0?7C3Kb&#Rp!7XZB!a1C4UWI{mf@GjR_PmJ8kj@WuWu)T)JFeocvq~Pk zN`AYydq9xj_qP;ihzC4S>HMI&tNf51q2Y-{T&G_hGJXrIsWoK?g(S~@y zqm|ANbffjkgU>*bf(JhGKQ~vzc#ye~&%d@EDhlI4P?3CoP(#!IjN^gcaTQk%-z;43 zdfTK4)zAK(|MT3ZqsfCs=af81!)zoc@ocd1wYHsQXQ5p~0uP}3$a$cf4X-@7e4zU- z>`oJI*QGy{;*|$;BjkZ;Ryhy8f{ZA5FpTPBAI}J@k1Vh~YTZ<-cmp2X>(qxC4@8Gu zEWlr|apnD8$%EU}xP)^!*G+|i6(AX?Pm>3_GScyY9am8o0#!UOdX4;cZ})&8!SB-) zr~waZI)3Z%K=c`HT>;U`c`!bPY;D3v2dme0r!6~cYl_x@2fERE<-q|^q~O8piEGt$qIW&!8d`9^9wtf5!1Z@3@M0?mX|mTBr5*@7{X+&I7B?*NG+%w*8^v!T3y= zjbve&`1)roI~(m93gf{T_H9(o1Kn(R<-wr7rC!CRbnh2QWAW~l2k%741JkT>9-M=W zD0ncO>SK?)KC;37s0~Z0;zK;ZjEn&Tr1OLOo%%52f#@*0?7FaV)jF@@!T4BeT*5h= z8a{T>h`_{~;uhIqgOmCg?yaQxQe zf#@^Zx)Y*R@E|kU+K`V9#)A!MmYw}^fd@QV>HI)9TCY5~0E!emNF@KWaz%^>*&p}$ zHx3tg5L6_eAJo$HKjV0ycU;Av2M*23GppI_6NcVD;(@(W{)i?I&RtOQAPZ(ASy(2% zakypYplw3}51{+Vd7zsO&VwzRFP1Ae^iU?gUV;D4@3Q@9pRakaGj^v99pi@K-762~ zMaTowtm0tBiZ2{c@?Zqj$4+;BJ z=h4PzrN$+k!}-M~%g)LE>Zbt@bY-OD0Xwc@ECj0H!ASDkz25_Z^!YaxA-@fHP{;9G zj|Za9XzLY-R>6a8Wb1=`bTA%lDgw6lHRXYBw44XLE=}qc6&1Uvpq^77W;_rb zMweX|mHB1WaTVipP~&=<%V3S`%Y&AkyBNtB?kaN_STWM$Ds*Ka5BOlgaM|nR<`Aa> z2cyYu_jV76(dXY>RlotaTRJ_c@7S$}1JP!5H3gzo;2q3=BnW8O9Bpfw9@H; zZnPW+yev)16%`!@MT+Uc7*rIv%@r{mvKfzl6-^u*xT3^CF3d) zTr`dWT8@JUo%%4tf#@*0?7C1!vp<#7gWS}(gkw0joU`macasd%#~v4GS*JDA3UKfCnn&!9$MUdOQ$)Mq7V{XcauTgKVwM zM+c*vZvX0G(O(=olg%k2U}5M@V>9*k`wsP8J*t$zidxl5Frmt zvx+`peH8sm$%6^hpZxCn$P3$}w#HJ$yLo_(RQmd$p;I4bJP;j5w_O*?=ngXQQ4#)x zU%|&kd8u&;$8c_qwd{QNkqiSK=*mdP19n`+7zk9sgNfv~d%Fh&34XH&@&-I;Lr zkSPxuYx}#BSexRETuRO>$@|B+0fV#EMR0r=~=LZWTVc7*53OwL4r1Jw^ z8R>Yyj;lz6KovZAll&I8dlYC0eh;KTLp>viEj^Bc0t-TB=7*bkDLd( z+3?DPCl1C=$L{p)5Zh&q`q=X#-ngVZ(3O#n2kf|tMi8ii2h+%J zVY^461n_&TDG!=Ee(Ui-^cihUfoK)ai;9q~)%fUOJotJn*vb~48Sp?iTCY4f2#ORu zcncK;E^|eU2ZfgU{5!Iv|6x3sz`p;;dC)@B|BT~--f|&RrjcVSCg!@d6Km8IjKq;+^_1K| z@+tK7fnV7t)_Xi~~8_B{d@tt>Cc2PE4>*sup3yv@O{6IGwUU{&yXp6(> z>Zo}M_`Je14;Dwr1JkT>9y|gWQSe|U^{3VD`X~z9qjvS6iVwX%;1w@@UewB|4>KN! z4x`Ji3mex0kb(YF4#NJo!S@Fxsc{MCaPI11*~R*hj1UhdvM(C)_sP04((!<;FZv1s zRq$XI`7LbsDAou3UPXb1o)=-D6G5qz2MLbfdOQ$)Mq3}wlvl-rQek0uX>#434E z8nclstP$(uA#8`0ndi?eX?#gyz-#S;gLHbQ85E9Hu@FsUgrnzMaTowtl|j6 zieC&FQSe|6X5?auyFQA;_NYCtP{oIMz$;$LgEmfmnDIb#7+rQ=G}M4AjS-7jYTV`GKyCbUa|kRg}%FTiEVV;zjU#7X@m-1KaUij|Za9 zXzL7!Rxv-glWZ-|M+f7`t9)Ht&XauRM4^LLQiAmGj^NWJJM(dDNdi=NV!3 zQ3|$4eLG3u0cK>`%aHOw zS4KJ>u;VHQL76a^Wb0jg zbg+8;_5|2^MBo9BRyse>jn*p<@@G@>U;!!$oaTyxO6vl&~BKiEFgQou( z#{<3NDiZ7y<+A+HyyT>oeWtE^`0e7+?aiSK*bvMt&*B=7*bkDLd( z+3?DPIk%cs!0xmyw$wLx_sWAM5%Rz^tDFb*AtMSNETsPQsk=Tb*dMk3JyRZZbn3&5 z2cpC1vg^XeH4S7a<_G1eaS7*e?tc#k7Q-6qWAg*vxTHMLm647I?6``J5U7F&?~>ob zeh+IB_S_wdd8Foy3u;&!Aqb>F+W&@ ziUKFOBE|#jjL-j_PvF61_WeiBgGV*}&p00F9ar)0^sP_UE0nNt&C6q^#-B-O5ltQp z&#B}=1!=SS;fJM75^b*M8Si_)So_f*GC!HA9Y~8z=L2$u;VJKL!b&CyhnZu`#s9c@%axH zpg==B;DJi#2ah>^>+wMJnMMahtC$~DB3n!H(ZP6dumITlCq)~2Uc{r7&JT2>6?tG% zuc&AzC{pm?eN+@U&J{5pl=&0 z#?2qwd%*q69ytG8GXh7W#R{?S$0|4He|vB-E43k@cr+6eDUA;o%0|z z*oqQ^_c2YU{Eh#dJnhv>c=yVKXCmZ*X;yKtVtv?<5d{yHP=8wLu8*>?KkEB^RPmwr z2fX5?&x;;+>cfl&qQmI2>p~eHfef@Bf5I<%pFClF6>3~@Tn1}g-|vHg^#REk?#vI~ zWM4Go$5rUcKpybHf)TOT2R}lb3LJbub_?4*%6{PU|4@nI4B-Idd=oxaii0N{yY+A& z+KjGt%%jA?J>+UJx2r!?vg~qfvtkGbJX$FZbfe`s;ALr2uBd1jC{o~HDJlva<%$>% z%Ef~Jw174Y2SG)09CX$6-wX%(uaoO)9#^q+PTc_=v$Z_>!G8~DZ#J#Z3(>^E$h=A% zRK;v03#-I`SZdkjY1dE~4tO@CuakAN!EwN+0epP%-}#;6K-`}E(ZL;Mu-dzANGXYT zuQ*s5DGm&?%5m^HWJH0352-)B@2-#Xus!O>(*h27#Y=I}&8ZJF9Ec91%dQK{yh%Rg z^q?9wF5wu?A5X);N+B7jk3BBpGNjW3T^Zu^pe{SEVkiWv;K4`ax3Jx#e2UM1h$ zfCt?jzx8+^`i!<_%CF=>b+WZEA03RchZ;K9eJ zC~$-;Vm!DzANaos6`Am$ho=7-#{<3ND(3(Cb))lHo8LKO+?D6Ho*UIQnmo9#fRYC_ zFdNCjD)B>`EV}~j8VcjV6!z^%{`x>S8(w*E_r;l|uscnAVDxUhd*#805%Rz^tDFbV zLPiukSVsM6k-I)B!1k!aX#x*0BU8WtDGz!&^yd7vvJ9S_)X6*nMI1rI(UzlH4{6*l|)M;@g>Lph4?QlL`fohw<3_!YK<~JU+}|zfJ?ZJzkA3t+*{QcCAB*borqhZlc~A?pku0nd z|LJ$ju0p$p!g#>5A$?w?n+>l#Xfm#18g{4WMtlZ?$U6@{j*thYS>-%f2N_ZDUHMINQy*qL5FJLBT^Ba4yNW4!P@5W;a1Q6OYA~=4lMK|S z$pc*(>3G17t9S$gRq!C0{1&!*R5=WOCsCjVJm~BAt;Yk=XSDSTh*t4BxenQyn~x60 zgJVgSeNP>V)_@1P(R$^MK(#HlIAPUz0i?ZrfEQn)8GI7FY71E@mTHSS9{*X3MThyN1GeFpYhUlg|%yv*DEo z<3=_cfZZwIdmFmr-Rt~dS%f?=%_`?XObI0qR#JbO?XHiius!N{Q>yq74=^LszyK)^ z`Z@Js#skq|blG)b<9Y;SDCP(CsBsDBa2{_81B<-|3Gsl-kj@WuWu)T)JFa3N1ghY{ zD)L*{?ostL_&rzP0S{C^~!_mph&@k)u<@2mn&jCsMgfy|D~kBgP;a=YeiEyz*dAjsx`m;Ef_5 ztj8|pl?R_h$OF@?avl^erR2dH>Q6J=^-&$RN1b@Wln4KD>cfl&qQfp0;4j#?o&gyO z9y~~mOE`z~#1k;Eu8<4^9_Y$Q#{+g;#Uuz+!GpErx3Jx#`W5hdg((jPIDYH#K=c`H zy#&!Jc<>O}nw5_Z#)A_pEW1WKiq?P!y3u;&LH^Q89;`z}fn8h?<3WvfKL1I!z_GV8 zk$j7N|B>_HIZgjFjtA}qr|qCr{^|Il_+{TcQM+yHvkMw$jbAwK-Nb0};1*03s z;TOL4%k=X2hcO$;!Yc8T_gVJ6v}-7g2bhhwR6NklhRB0OWj-<5e$b)DYeP}V@~kue zFFg1(LLQiA6%&9JU&d1MU_JGxx7_t{FKmxGHAvt=FeCE$!ShainDIb#IDFjDzfneS zkfGo~Luy>YIh>~kS$54#0uQ(h>HI)fMmip_^`;XbPz4V*kl(^~kD8gl@2>?O@Ia;W zgBKjX^>`rqjJ5_KS_Kapk*%?ObTA&A`WkHQF7SXyE1e(cMl15bq+U@`fjgBv*ocY( zJGdgogPPra{$E?7qOj*hK}B*N4Ak^L<9MKVTt%^$C-q;%n+>l#cro+Ui`bRAKQW~M-o4HbK8uhCrdj1Y zs8UABgDH6;k2*b$Dn9hQh*!MydC?%JKFoL^I*cy6E-dr@AVa}}Ce*lu zb2v|rv+Voxk_^>k9>h_--sYo&)$8eFU~7MhHZ(t&&c46JNO_WP1li;vBhH2u#w9_SrcF{H=tA$>13KbF{|;o%(f zw!}x12Sv&%dC-)`m#|FyOi#;xfOZXq@qlMT`aW4V8(w*E<&!PdaRfZQ=hv_C?v)42 zBjkZ;R&lUm#Xk%gQM^yyO#Nw+yFMO({ZYRyq>2ymAea&P{NQD$KFoL^I*cy6E|f79 zWGHyh3}vJU=WzbE(6VclA{ikba2Zk_=*mdP19n`+8VFRugDvE@u-~IrDe(I$1sdW3 z4^+y7R~*0fcp&J?s(Ykp6-BZp3-Dth?pb02ayg%@x zqChHF#CT9^h|hm^Fe)cfl&qQmI2>%zvh5@aZN5RWoagmXC0t+wnsl}UyH4|HXu z;{iLa;ztNn!Go>jx3J%%PGz6}_dFD6hzD=8@2B$p$wM8#^>`rqjJDRhTgii#RIk_h z=wLkfJrCGAilPni0Hb{yvL>A$=tk?62c1EYf(P4BQD8Gy#CT9=6!=en05psTK}GWU z!K<47oAE&ZxC-~vBKdI@$EW_~A3n83(;02@PTsjPp-(h!U90kNSfx+z;`9SG@Fjk4{W=<$8I7q-~ldrm6JzpMNoo0#y z-Do)ucv+g1D=KOTiWE5b8Wjb;;EEUy>P-Xx-$O+vICxFde={8DA6HRN^SFvW_w1#j3k-`HmBK_sWCh2zg+dRnCLEAtMSN?4tgZ=&p|kVSCiY8&vTj9t1NYe|?bX z)Q1@lM2FF3*M(*NEXYvspdHFc5su-!c*C+EYD+RgJm4~*V%SuK_+f7!NMB2V0j>v~C_i z_mn>_(v8+D5AL`}$%8$pD6obrVmx?g8Th{s6`AmWFQNQ59%md6^p2~jF=hDGy_Z{D zc(34;Q!Qd!&Wk1w&OkO4%ZobD_!3r$U)pEc57Vxpu=&Bi@<2BmUU^WY!dI2BJN5nU zRuQ~=JTT2F=RwY@N*?T`{`9)LJ|2ecQCA93#T)P-$>~pKJP;j5mt7Y&E*oSh zc+e4LqzLD5UMXPN4ZD#H10LwgNXG+qT*XTesDcOIlHbC1kA~gA?|u}h0S`twe(Ui- z^cij42hl2c(245x4?a2=53ckBTh~&wAs))a0)V_m>=w?{^WDlMgO; z##N=dk_VkpMv8C_=he!V-S}C72V919exNHO9S_)X6>T6;1rNR>zlH4{jh_X-X+vh% z@uoab>HJ`<t#1@!;wkVC%Mj-~n_`IS+KBf&NCxU-Jm4~< zJkXVqjtA_xifRz3f(M7lZ(+Mfvn25QQwlW110JZ92a_GY^>`rqjJD2%Xcau@PW5_{ zj}FFz8=r!$$0*v+^CBMYYvHT5vc=?bR&D7<>y-zqK#_t6hfz^r8CS%3(CnDcf3rF& z3VU7@R3u++`lhD;8OH;?<0=-cJ=>D_-RaWynE%rnh1GdnpMt&ZIBTK4~|fO8sx5z7O*|) z)^k+xq4@!?ceJ+bu8ed% zV8>P52Z1Vh@L%#<*zVC{D)_yX0yW^lRL5^U9*91pt#ct-1rMI2dOglZ2jju5tzau1 z4xJX_!EE+zT0TF}jn*p<)_@`f4}L;Lfe*PN#)B5W`}}`56L^4%pxEU+n5OA}#__lXvWjtGUL`9-1|pJeXEX$%Ch8eBH&f!N%9$%`CemJ*^Jo0ndhX zexRETuROTX`)_@ZaK3_!azfIK5Ctif|5R+9()U^93Go8PfTI zu8ed%VEYeB)mHN082K%1_h>mE{5~S^fCnm_A53@r*5iTbGuk=|qE+zVX{y(wd~~pS zO*;a%UZ-f?JiyYB&JT2>^~!@qph&@kpHWd@30D*x@7I0)+g(k0@V2J^8OH;?<0|S6 zopt)R>1}HycFA6%*7?qzqsfCYb(B2lP2)>gCVsoCWw)YTLnb`X&4yPVw4b)VIX0j- zSA0DU?_PPZE*Ec)*UUC{S0)gI~yRVZTSKkHPOt z6liFEzyp=?V5Z}@9uGvH(bmBbt%3)Asa}up(Lp?bNG&@d8$}!9!5sE&TFwLAXua}a zIw(@`-~=iPEar+B4-&HZQZumw_j@}71r@=Flg|%kY5JdWJkUF?;%v*SpI`ho?%;+2 zt)4r&t6WsKCl9Kp|&N(Rz(9HFHjZ2Ru+I z59T<2>+wMJ8Et*CzLE#eQoa7jM+f6U=A4$@rqDm|0P`cAALvHwl?ShbA_WhAMMZ&y zToL0zn?m6KcvKYj{(yI&df{(Gvcek?e$CbN-;4+P$5psz2lC@8;&&eIeBx+}O_O5o zedNtUi*iMCe$csrk_Y{1e7Tp2LnbWSrfoweJkZUC!-L;1xYwHof9Lz+`FhjXV7e27 z_k5Q+-@<=3s`OYnynE%rvk~&ZG^?BkLm(px9-OBB)W=;Pc3WR+mK{{_q4@#tPtx}X z?>O~g#skq|blG)b<5~|g(0cp{zk0b`N{2FEwi!iZe7l;C4%KFwe1D4+o;n=xXx^l{grH(Iy{s zyPCC(Ww*VHq76+C=CUu-avbPJ>);@Qaz#bGK#>9mzoDYQJg$i0pzU4Y|3Xw0h67YI zS2aDDuj#)T4)l+!sIPfkMf{O^=YB34pL_K6^Ck1PZ!$HSIB4*Y5(m%G_;RljhfG*@ zJK8lAh6A1r>GVK18x9U4+!V#aUurhCfFy*2U`FKAg9T1~nBhQl7+rQ~CucPT^L*zl(E}zn0!{OUq_?=G=Xzv-cqr_lK`nu5ep7_r;M~9{0-760^M#uxx zta2W7hKwk9@CWs$p6>eS@T@O2$5rZ220U2g)Q1@lM2FF3*M((12V^LCFo*`0`xs7; z00ZkN$v}PV^#N~OQXc5aNXG+qT*Z0_RKbJu4g>Jb008-OEP@<3Y|gmfevZw&b24z_)4n{6IHakq0LAii+xjA_WgFprXJ` zu88rVV*~JiH+7)i&OmwR-{uGJY5JdWJkUF?VpioZPvl=>FIqNc=G`3zEsW~&q8yEt zJa~!5mwS~sWWusL4W?{_c!1e>2XZ5wALwSoD-R~7?#Y7P>0+JU8}ROx2VX?U1JkT> z9@K!0D0mQ{{?yG~ADssKQgi2_{uJUtFeCE$!TU~qnDIb#7+rQbYog@AD`e{~J~|i=a`(3EN8>5l5D$2?()odIv|f2o4HPMOa0wL!rgKG%2am>s z|0hvV*z=;GBKhm&4>bMHI3DO7S5bOz_HU|owU;LjTRI@|o3yskoFC+fQ}SRijW72q zama*accxuKVb6-&q2Qs4I!DZ@C zkGt!mbCNGL&)rn<20U2m)Q1@lM2B50z+bR&4Fnkq9t@#@6h3y`luYupgC{P0)eCYVC#{j#VRC;XzfGAqXqC0lp! z(ZP6-XP9L_)`_Au;DK(mUU`tesgehOqN2c5u88sAu}aQx{RHhAGU0)4HoWp6=d)dZ z#qKnGeVsvg_sWCK5%Rz^tDFa~Lq-(ygX`3vI=buQiTS?N0v)L04S4XWQy*qL5FJLB zT^Ba4Js?BDgV$+bxzFJQ36|ZJ$~^3SGH+Z`9_Y$Q#{+g;#dQc&!Gjy*x3Jx#YeDe) zBY_9=**7BjpTqgg@mr4vqR(h+|9B-2hLf$Sd~`4#6!-{ieO}-JMhjy_{{BEWTCY5q z1d0?qxQU7a6SyMAgRal}QVUiQco0-1=fQGK|1*vUddF4t?f2uD9L-yv9#tt<>7N>W zbt#%W7|~M6gEwe=39G~lRD-X6r z$OF@?avm&&j3{_;i~3VLcYSn&?NNp34S!mQ2fX5?%S}Ib>cfl&qQfp0;4j#?E`baM z4-#o$xzFJQ36|ZRE#pLe?0qtqA?1OtjC4F;$5oVkM9G7{$!}r1NB1(|H~oFUu;Wd6 zpwjul3de6f9*91ptz#it#q**OWb0-=Iv5WMZ3bJ})2-0_fJZBxALvHwl?O{ek%9+l zs3@IW^kUU@Kh_V+JiQ~JDpvHuGX{1NiNG^?BkD z)P`q-)khE59#tffz5yEWAjPQ|&M(X$%({R0IWdR~Nq;zUErgO!fodOQ$)Mq5Wh zvN`cqHz-l{G#t z()x?d!=lN95v`Rx7>(IjAuJOw`j}-uxs|ff&sDZi4f6Fxy4mo`gR RYg~C_PDSM z?_TEzsS)zPG^;pRvEtu{jL3PA5KH~3mAgKkg#A&)W>Lk5c)%-OIzL$L)Q1@lM2FF3 z*M&09feZx?#!%yOpTh|fEc>bYB*V=EY_n1x=*mdP1GXP6UmGP4GLzrJevhZ>gWu;V zPy-&Uas1Zff#@^ZIs~Fs@L(+2x}J{?#)D$#!PXfRtpN{oqxH&znV?9)gDj{hFoG*$ zJa}q`FSR&50W;yjT222mjt6?jRUF+n``rFKO&gE+&ytptetvCNGmfef}u{r}D=w?IY!Bbbv_8;^+(PcfP(pJfXY~;7F-{a{PzSNTJ#dnAY80bRqK{`KJ@A$391JP%+bpS-G z;K2m4bqyaKj0YvNf~|`M9`I9 z4}yy1^MehV{+sbY|F{Y_4dlmFEH5}LA*NB|1EY(d+HmQ?xdWrggJJEIJeY{tSRpJE zFFD$>d(*a|u;)cQ8`Ad&y4i4e5ZwRnj4#dOD(c_->lSvWKXP5g{WhL?&_6;Rm}Zsp z;9bawf(JRMKQ(jLM{n34Rf_!qtkC>`SG;t7u+gaxGaiTzqsy)f%ls_JKosLo_!T^^ zViGm3V_XJnT&1>IcAt*axQ06uPcB1xT!pR-#O;{0YBk zoYYFlMgBX0V>sxu9Q=PLF@J1KT4iUP>_i+_hflnCDpSk^_$d4dzvvTROUO;1C@dHY zej)%S4ZcjWCzace2LazKd;x2gu=9{M1vC1{A$3NxKo}TVoinP)#=l9~J11oC9mw8a zl)X@7zf@kf{WyGRy2ye7#h6Cc2qIHt;STa_6^|^Kg})#RC)`=sj*TDvHdk3KQ^A3w1`cy)dC z4A1M;KUJSNeky)q%6out +# @TEST-EXEC: btest-diff weird.log +# @TEST-EXEC: btest-diff out + +@load base/protocols/smb + +redef SMB::max_pending_messages = 20; + +event smb2_discarded_messages_state(c: connection, request: string) &priority=10 + { + print "smb2_discarded_messages_state before", request, |c$smb_state$pending_cmds|; + } + +event smb2_discarded_messages_state(c: connection, request: string) &priority=-10 + { + print "smb2_discarded_messages_state after", request, |c$smb_state$pending_cmds|; + } From 042aa1383ba1681a38ac12516eb4a30cda7a1e7f Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Wed, 3 May 2023 10:58:37 +0200 Subject: [PATCH 10/35] NEWS: Add entry about SMB::max_pending_messages and state discarding --- NEWS | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/NEWS b/NEWS index 806a43eac4..aa4f4a14d2 100644 --- a/NEWS +++ b/NEWS @@ -306,6 +306,16 @@ Changed Functionality - Libpcap based packet source now avoids the 32bit wraparound of link and dropped packet counters as reported by users. +- When per-connection SMB parser state (read offsets, tree ids, ...) exceeds + ``SMB::max_pending_messages`` (default 1000), Zeek discards such per-connection + state and raises a new ``smb2_discarded_messages_state()`` event. This event is + used to reset script-layer SMB state. This change provides protection against + unbounded state growth due to partial or one-sided SMB connections. + + Setting ``SMB::max_pending_messages`` to 0 can be used to switch back to the + previous behavior of not discarding state. Setting ``SMB::enable_state_clear`` + to ``F`` skips the script-layer state clearing logic. + Removed Functionality --------------------- From 40a4da94b6cddad40408f0f19422f9c28a7326c0 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Wed, 3 May 2023 10:46:41 +0100 Subject: [PATCH 11/35] Update Mozilla CA and Google CT lists --- scripts/base/protocols/ssl/ct-list.zeek | 17 ++++------------- scripts/base/protocols/ssl/mozilla-ca-list.zeek | 16 ++++++++++------ .../policy/protocols/ssl/validate-sct.zeek | 1 + 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/scripts/base/protocols/ssl/ct-list.zeek b/scripts/base/protocols/ssl/ct-list.zeek index 2b38a9c99d..be2663b5f5 100644 --- a/scripts/base/protocols/ssl/ct-list.zeek +++ b/scripts/base/protocols/ssl/ct-list.zeek @@ -1,44 +1,35 @@ # # Do not edit this file. This file is automatically generated by gen-ct-list.pl -# File generated at Thu Oct 6 13:17:02 2022 +# File generated at Wed May 3 10:30:21 2023 # File generated from https://www.gstatic.com/ct/log_list/v3/log_list.json -# Source file generated at: 2022-10-05T12:55:24Z -# Source file version: 13.6 +# Source file generated at: 2023-05-02T12:55:51Z +# Source file version: 20.60 # @load base/protocols/ssl module SSL; redef ct_logs += { -["\x29\x79\xbe\xf0\x9e\x39\x39\x21\xf0\x56\x73\x9f\x63\xa5\x77\xe5\xbe\x57\x7d\x9c\x60\x0a\xf8\xf9\x4d\x5d\x26\x5c\x25\x5d\xc7\x84"] = CTInfo($description="Google 'Argon2022' log", $operator="Google", $url="https://ct.googleapis.com/logs/argon2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x78\x83\xdc\xe9\xf1\xa6\xb8\x18\x3a\x00\x99\x2f\xff\x3e\xcd\x15\xc9\x26\x1e\xf7\xff\x3a\xa9\xa3\x72\x16\x49\xeb\x09\xb6\xa8\xdd\xb4\xd2\x47\x91\x0e\x0d\xf9\xd9\xd5\xa9\x8b\xb0\x87\x9d\x25\x79\xd4\x1a\x50\x60\x08\xf5\x09\x06\x39\x26\xe4\x40\xc2\xba\xc3\xc2"), ["\xe8\x3e\xd0\xda\x3e\xf5\x06\x35\x32\xe7\x57\x28\xbc\x89\x6b\xc9\x03\xd3\xcb\xd1\x11\x6b\xec\xeb\x69\xe1\x77\x7d\x6d\x06\xbd\x6e"] = CTInfo($description="Google 'Argon2023' log", $operator="Google", $url="https://ct.googleapis.com/logs/argon2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd0\x90\x8f\x64\x52\x4e\x42\xac\x84\xb6\x2e\x4c\xf2\x3d\x77\x00\xb3\x77\x08\x05\x47\xaa\x45\x4c\xe3\x2c\x8e\x70\xa5\x82\xbb\x6c\xb2\x7b\x9c\x98\x7a\xa0\xe9\x11\x76\x28\x00\xb2\x20\xb4\xcd\xd3\x98\x7b\x4d\x96\x27\xe6\xb7\xee\x22\x6a\xd1\xb0\x2e\x91\x77\x78"), ["\xee\xcd\xd0\x64\xd5\xdb\x1a\xce\xc5\x5c\xb7\x9d\xb4\xcd\x13\xa2\x32\x87\x46\x7c\xbc\xec\xde\xc3\x51\x48\x59\x46\x71\x1f\xb5\x9b"] = CTInfo($description="Google 'Argon2024' log", $operator="Google", $url="https://ct.googleapis.com/logs/us1/argon2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x1d\xb9\x6c\xa9\xcb\x69\x94\xc5\x5c\xe6\xb6\xa6\x03\xbb\xd2\xb8\xdc\x54\x43\x17\x28\x99\x0c\x06\x01\x50\x1d\x9d\x64\xc0\x59\x46\x2b\xdc\xc8\x03\x1d\x05\xb4\x2d\xa8\x09\xf7\x99\x41\xed\x04\xfb\xe5\x57\xba\x26\x04\xf6\x11\x52\xce\x14\x65\x3b\x2f\x76\x2b\xc0"), -["\x46\xa5\x55\xeb\x75\xfa\x91\x20\x30\xb5\xa2\x89\x69\xf4\xf3\x7d\x11\x2c\x41\x74\xbe\xfd\x49\xb8\x85\xab\xf2\xfc\x70\xfe\x6d\x47"] = CTInfo($description="Google 'Xenon2022' log", $operator="Google", $url="https://ct.googleapis.com/logs/xenon2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf9\x64\xbd\x15\x2c\x40\x62\x50\x95\x13\x38\x3c\xc7\x21\xb0\x3a\xb9\x8f\xa2\x7a\x15\xd7\x89\xd6\x8e\x31\x13\x00\x87\x59\xbc\xbb\xee\x90\xfc\xc8\x58\x13\x0a\xbf\xab\x43\x36\x54\x23\xa4\x81\xcd\xad\x47\x14\xb7\x58\xa0\x44\xfa\x6a\xa0\xa0\xd7\xc3\x63\x1e\x2b"), ["\xad\xf7\xbe\xfa\x7c\xff\x10\xc8\x8b\x9d\x3d\x9c\x1e\x3e\x18\x6a\xb4\x67\x29\x5d\xcf\xb1\x0c\x24\xca\x85\x86\x34\xeb\xdc\x82\x8a"] = CTInfo($description="Google 'Xenon2023' log", $operator="Google", $url="https://ct.googleapis.com/logs/xenon2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x72\x16\x3e\x0b\xef\xef\xce\x3e\x60\xdd\x95\xcb\x63\x7a\xb9\xa9\x8d\x4a\x6f\x6c\xdc\x61\x80\xa6\x45\x5e\x2f\x83\xac\x94\xf3\x85\x88\xd0\xa5\x74\xd0\x7b\x8e\xff\xc5\xee\x42\xa2\xf0\x2d\x93\xe3\xc2\xd0\xb2\x99\xe2\xe1\x42\xe9\xd2\xc6\x00\x27\x69\x74\xae\xce"), ["\x76\xff\x88\x3f\x0a\xb6\xfb\x95\x51\xc2\x61\xcc\xf5\x87\xba\x34\xb4\xa4\xcd\xbb\x29\xdc\x68\x42\x0a\x9f\xe6\x67\x4c\x5a\x3a\x74"] = CTInfo($description="Google 'Xenon2024' log", $operator="Google", $url="https://ct.googleapis.com/logs/eu1/xenon2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xb9\x60\xe0\x34\x1e\x35\xe4\x65\x00\x93\x4f\x90\x09\xbd\x5a\xec\x44\xdd\x8c\x0f\xce\xed\x11\x3e\x2a\x59\x46\x9a\x31\xb6\xc7\x99\xf7\xdc\xef\x3d\xcd\x8f\x86\xc2\x35\xa5\x3e\xdc\x29\xba\xbb\xf2\x54\xe2\xa8\x0c\x83\x08\x51\x06\xde\x21\x6d\x36\x50\x8e\x38\x4d"), ["\x29\x3c\x51\x96\x54\xc8\x39\x65\xba\xaa\x50\xfc\x58\x07\xd4\xb7\x6f\xbf\x58\x7a\x29\x72\xdc\xa4\xc3\x0c\xf4\xe5\x45\x47\xf4\x78"] = CTInfo($description="Google 'Icarus' log", $operator="Google", $url="https://ct.googleapis.com/icarus/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x4e\xd2\xbc\xbf\xb3\x08\x0a\xf7\xb9\xea\xa4\xc7\x1c\x38\x61\x04\xeb\x95\xe0\x89\x54\x68\x44\xb1\x66\xbc\x82\x7e\x4f\x50\x6c\x6f\x5c\xa3\xf0\xaa\x3e\xf4\xec\x80\xf0\xdb\x0a\x9a\x7a\xa0\x5b\x72\x00\x7c\x25\x0e\x19\xef\xaf\xb2\x62\x8d\x74\x43\xf4\x26\xf6\x14"), ["\xa4\xb9\x09\x90\xb4\x18\x58\x14\x87\xbb\x13\xa2\xcc\x67\x70\x0a\x3c\x35\x98\x04\xf9\x1b\xdf\xb8\xe3\x77\xcd\x0e\xc8\x0d\xdc\x10"] = CTInfo($description="Google 'Pilot' log", $operator="Google", $url="https://ct.googleapis.com/pilot/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7d\xa8\x4b\x12\x29\x80\xa3\x3d\xad\xd3\x5a\x77\xb8\xcc\xe2\x88\xb3\xa5\xfd\xf1\xd3\x0c\xcd\x18\x0c\xe8\x41\x46\xe8\x81\x01\x1b\x15\xe1\x4b\xf1\x1b\x62\xdd\x36\x0a\x08\x18\xba\xed\x0b\x35\x84\xd0\x9e\x40\x3c\x2d\x9e\x9b\x82\x65\xbd\x1f\x04\x10\x41\x4c\xa0"), ["\xee\x4b\xbd\xb7\x75\xce\x60\xba\xe1\x42\x69\x1f\xab\xe1\x9e\x66\xa3\x0f\x7e\x5f\xb0\x72\xd8\x83\x00\xc4\x7b\x89\x7a\xa8\xfd\xcb"] = CTInfo($description="Google 'Rocketeer' log", $operator="Google", $url="https://ct.googleapis.com/rocketeer/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x20\x5b\x18\xc8\x3c\xc1\x8b\xb3\x31\x08\x00\xbf\xa0\x90\x57\x2b\xb7\x47\x8c\x6f\xb5\x68\xb0\x8e\x90\x78\xe9\xa0\x73\xea\x4f\x28\x21\x2e\x9c\xc0\xf4\x16\x1b\xaa\xf9\xd5\xd7\xa9\x80\xc3\x4e\x2f\x52\x3c\x98\x01\x25\x46\x24\x25\x28\x23\x77\x2d\x05\xc2\x40\x7a"), ["\xbb\xd9\xdf\xbc\x1f\x8a\x71\xb5\x93\x94\x23\x97\xaa\x92\x7b\x47\x38\x57\x95\x0a\xab\x52\xe8\x1a\x90\x96\x64\x36\x8e\x1e\xd1\x85"] = CTInfo($description="Google 'Skydiver' log", $operator="Google", $url="https://ct.googleapis.com/skydiver/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x12\x6c\x86\x0e\xf6\x17\xb1\x12\x6c\x37\x25\xd2\xad\x87\x3d\x0e\x31\xec\x21\xad\xb1\xcd\xbe\x14\x47\xb6\x71\x56\x85\x7a\x9a\xb7\x3d\x89\x90\x7b\xc6\x32\x3a\xf8\xda\xce\x8b\x01\xfe\x3f\xfc\x71\x91\x19\x8e\x14\x6e\x89\x7a\x5d\xb4\xab\x7e\xe1\x4e\x1e\x7c\xac"), -["\x41\xc8\xca\xb1\xdf\x22\x46\x4a\x10\xc6\xa1\x3a\x09\x42\x87\x5e\x4e\x31\x8b\x1b\x03\xeb\xeb\x4b\xc7\x68\xf0\x90\x62\x96\x06\xf6"] = CTInfo($description="Cloudflare 'Nimbus2022' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x48\xb2\x47\x4e\x50\x32\x72\x62\x4a\x0d\x0c\x48\xbf\xad\x29\x64\x6f\x20\xdf\x79\x52\x63\x16\x29\x0a\x2e\x60\xb5\xe2\x3a\x1c\xb7\xaf\x59\xb1\x55\x09\xdb\x59\xc7\xe9\xbd\x6f\xed\x0b\xaf\x05\x96\x97\xff\x3b\x9a\x43\x4d\xeb\x11\x34\x33\x8a\xe7\xac\x83\xc0\xff"), ["\x7a\x32\x8c\x54\xd8\xb7\x2d\xb6\x20\xea\x38\xe0\x52\x1e\xe9\x84\x16\x70\x32\x13\x85\x4d\x3b\xd2\x2b\xc1\x3a\x57\xa3\x52\xeb\x52"] = CTInfo($description="Cloudflare 'Nimbus2023' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x8b\xff\x2d\x92\x18\xcb\x46\x9d\x12\x5e\xb9\x59\x75\x3c\xcd\x91\x37\x7a\x1e\xa9\x9c\x99\x78\x83\x27\x3d\xdf\x01\xd5\x8b\x80\xe8\x63\x9a\xfe\x26\xa2\x1b\xd1\x87\x05\xee\x97\xd6\xe0\x5b\x43\x83\x81\x1c\x02\xf5\x41\x80\x80\x7f\xef\xa4\x61\xcf\xbc\x84\xb5\xa8"), ["\xda\xb6\xbf\x6b\x3f\xb5\xb6\x22\x9f\x9b\xc2\xbb\x5c\x6b\xe8\x70\x91\x71\x6c\xbb\x51\x84\x85\x34\xbd\xa4\x3d\x30\x48\xd7\xfb\xab"] = CTInfo($description="Cloudflare 'Nimbus2024' Log", $operator="Cloudflare", $url="https://ct.cloudflare.com/logs/nimbus2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x77\xb1\x9b\x7b\x8f\xe6\x8b\x35\xfe\x3a\x92\x29\x2d\xac\x8a\x8d\x51\x8a\x25\xfc\x93\xb6\xd7\xa0\x8b\x29\x37\x71\x1d\x33\xca\xcc\x33\xea\x28\xb9\x1f\xe2\xac\xc3\xa9\x5d\xdd\x97\xbe\xf6\x9e\x94\x25\xdd\x36\x81\xd1\xeb\x5d\x29\xc3\x2b\x44\xf1\x5b\xca\x15\x48"), -["\x56\x14\x06\x9a\x2f\xd7\xc2\xec\xd3\xf5\xe1\xbd\x44\xb2\x3e\xc7\x46\x76\xb9\xbc\x99\x11\x5c\xc0\xef\x94\x98\x55\xd6\x89\xd0\xdd"] = CTInfo($description="DigiCert Log Server", $operator="DigiCert", $url="https://ct1.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x02\x46\xc5\xbe\x1b\xbb\x82\x40\x16\xe8\xc1\xd2\xac\x19\x69\x13\x59\xf8\xf8\x70\x85\x46\x40\xb9\x38\xb0\x23\x82\xa8\x64\x4c\x7f\xbf\xbb\x34\x9f\x4a\x5f\x28\x8a\xcf\x19\xc4\x00\xf6\x36\x06\x93\x65\xed\x4c\xf5\xa9\x21\x62\x5a\xd8\x91\xeb\x38\x24\x40\xac\xe8"), -["\x87\x75\xbf\xe7\x59\x7c\xf8\x8c\x43\x99\x5f\xbd\xf3\x6e\xff\x56\x8d\x47\x56\x36\xff\x4a\xb5\x60\xc1\xb4\xea\xff\x5e\xa0\x83\x0f"] = CTInfo($description="DigiCert Log Server 2", $operator="DigiCert", $url="https://ct2.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xcc\x5d\x39\x2f\x66\xb8\x4c\x7f\xc1\x2e\x03\xa1\x34\xa3\xe8\x8a\x86\x02\xae\x4a\x11\xc6\xf7\x26\x6a\x37\x9b\xf0\x38\xf8\x5d\x09\x8d\x63\xe8\x31\x6b\x86\x66\xcf\x79\xb3\x25\x3c\x1e\xdf\x78\xb4\xa8\xc5\x69\xfa\xb7\xf0\x82\x79\x62\x43\xf6\xcc\xfe\x81\x66\x84"), -["\x22\x45\x45\x07\x59\x55\x24\x56\x96\x3f\xa1\x2f\xf1\xf7\x6d\x86\xe0\x23\x26\x63\xad\xc0\x4b\x7f\x5d\xc6\x83\x5c\x6e\xe2\x0f\x02"] = CTInfo($description="DigiCert Yeti2022 Log", $operator="DigiCert", $url="https://yeti2022.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x9f\xf8\xd8\x1d\xde\xfb\x5b\x51\xb5\xfb\x5d\xf5\xb5\xde\x66\x11\xb0\x9d\x5f\xfd\x6f\xfc\xa8\x98\x5b\x98\x4f\x2d\xc3\x91\x3a\xfb\xfe\xc4\x0f\x0d\xc3\x60\x43\x8c\x1e\xf2\xf9\x11\xb2\xba\xd0\xf6\xbc\xa5\xd2\xb6\x9f\xf9\x5c\x87\xa2\x7d\xfc\xd4\x7d\xd6\x13\x26"), ["\x35\xcf\x19\x1b\xbf\xb1\x6c\x57\xbf\x0f\xad\x4c\x6d\x42\xcb\xbb\xb6\x27\x20\x26\x51\xea\x3f\xe1\x2a\xef\xa8\x03\xc3\x3b\xd6\x4c"] = CTInfo($description="DigiCert Yeti2023 Log", $operator="DigiCert", $url="https://yeti2023.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7d\x0d\x03\xb1\xd5\x98\x8a\xdc\xf0\x15\x3b\xc6\xdc\x5e\x0d\x6e\x3f\x0d\xbf\x95\xc8\x55\x8c\xd0\xa6\x4c\x96\xb1\x4e\x27\xb9\x26\x25\x99\xcc\x2b\x02\x9e\xa6\xd3\xdd\x9f\xb1\xd5\xc4\xc3\xac\x35\x04\x07\x87\x97\x36\xaa\xad\x28\x0d\x7f\x2b\xd9\x68\x9f\x72\xd1"), ["\x48\xb0\xe3\x6b\xda\xa6\x47\x34\x0f\xe5\x6a\x02\xfa\x9d\x30\xeb\x1c\x52\x01\xcb\x56\xdd\x2c\x81\xd9\xbb\xbf\xab\x39\xd8\x84\x73"] = CTInfo($description="DigiCert Yeti2024 Log", $operator="DigiCert", $url="https://yeti2024.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x57\xb8\xc1\x6f\x30\xa4\x7f\x2e\xe4\xf0\xd0\xd9\x60\x62\x13\x95\xe3\x7a\xe3\x4e\x53\xc3\xb3\xb8\x73\x85\xc1\x18\x0d\x23\x0e\x58\x84\xd2\x78\xef\x9b\xb3\x1e\x2c\x1a\xde\xc1\x8f\x81\x1b\x19\x44\x58\xb7\x00\x77\x60\x20\x1a\x72\xd8\x82\xde\xae\x9e\xb1\xc6\x4b"), ["\x7d\x59\x1e\x12\xe1\x78\x2a\x7b\x1c\x61\x67\x7c\x5e\xfd\xf8\xd0\x87\x5c\x14\xa0\x4e\x95\x9e\xb9\x03\x2f\xd9\x0e\x8c\x2e\x79\xb8"] = CTInfo($description="DigiCert Yeti2025 Log", $operator="DigiCert", $url="https://yeti2025.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xdf\x95\x00\x5e\x10\xc1\x01\xf7\x37\xe3\x10\x74\xd1\xff\xb2\xca\x90\xed\x32\x99\x5f\x0c\x39\xfe\xa1\xd1\x13\x11\xac\xd1\xb3\x73\x93\x20\xc2\x13\x3c\x4c\xb5\x7a\x52\x86\x86\x3d\xe3\x95\x24\x7c\xd8\x91\x98\x48\x3b\xf0\xf0\xdf\x21\xf1\xb0\x81\x5a\x59\x25\x43"), -["\x51\xa3\xb0\xf5\xfd\x01\x79\x9c\x56\x6d\xb8\x37\x78\x8f\x0c\xa4\x7a\xcc\x1b\x27\xcb\xf7\x9e\x88\x42\x9a\x0d\xfe\xd4\x8b\x05\xe5"] = CTInfo($description="DigiCert Nessie2022 Log", $operator="DigiCert", $url="https://nessie2022.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x27\x24\xdd\x68\x03\x28\xcb\xfe\x63\xbe\x0e\x11\x47\x4d\x7d\x17\x68\xa1\x11\x5d\x4c\x71\xc9\x41\x28\xc7\xb6\xa2\x4b\x97\xec\xc0\xaf\xfc\x2f\x3b\xbf\xe9\xf1\xb1\xfc\xf5\x01\xff\xa9\xfb\x49\x40\x0c\x63\x24\x98\xd7\x79\x2e\xa6\x55\xab\x16\xc6\xbe\x51\xd8\x71"), ["\xb3\x73\x77\x07\xe1\x84\x50\xf8\x63\x86\xd6\x05\xa9\xdc\x11\x09\x4a\x79\x2d\xb1\x67\x0c\x0b\x87\xdc\xf0\x03\x0e\x79\x36\xa5\x9a"] = CTInfo($description="DigiCert Nessie2023 Log", $operator="DigiCert", $url="https://nessie2023.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x11\x7b\xbc\x89\x0c\x12\x09\x14\x9f\xd8\x26\xc8\x4c\x6a\x54\xa4\x1b\x45\x56\xdf\x3e\x23\x42\x14\xd1\xdd\x42\xdf\xa2\xdf\x7b\x5f\x9f\x6f\x07\x5a\x23\x46\x79\x16\x4b\x5f\x33\x67\xc1\xa0\x8d\x5b\x5c\x17\x75\xf2\x4d\xa0\x80\xa1\x98\x1a\x07\x59\x06\x02\xca\x4e"), ["\x73\xd9\x9e\x89\x1b\x4c\x96\x78\xa0\x20\x7d\x47\x9d\xe6\xb2\xc6\x1c\xd0\x51\x5e\x71\x19\x2a\x8c\x6b\x80\x10\x7a\xc1\x77\x72\xb5"] = CTInfo($description="DigiCert Nessie2024 Log", $operator="DigiCert", $url="https://nessie2024.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x2d\xfc\xa2\x7b\x36\xbf\x56\x91\xe9\xfe\x3f\xe8\x3d\xfc\xc3\xa7\xe0\x61\x52\xea\x2c\xe9\x05\xa3\x9f\x27\x17\x81\x05\x70\x6b\x81\x61\x44\x8a\xf8\x3b\x10\x80\x42\xed\x03\x2f\x00\x50\x21\xfc\x41\x54\x84\xa3\x54\xd5\x2e\xb2\x7a\x16\x4b\x2a\x1f\x2b\x66\x04\x2b"), ["\xe6\xd2\x31\x63\x40\x77\x8c\xc1\x10\x41\x06\xd7\x71\xb9\xce\xc1\xd2\x40\xf6\x96\x84\x86\xfb\xba\x87\x32\x1d\xfd\x1e\x37\x8e\x50"] = CTInfo($description="DigiCert Nessie2025 Log", $operator="DigiCert", $url="https://nessie2025.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf2\xf0\xf0\xa7\x8b\x81\x2e\x09\x39\x3b\x9f\x42\xda\x38\x44\x5f\xb4\xcc\xed\x36\xbb\xd8\x43\x7f\x16\x49\x57\x87\x04\x7f\xa5\x01\x34\xf7\xe8\x68\x3f\xb7\x78\x1f\x60\x66\x2d\x67\x9a\x75\x80\xb7\x53\xa7\x85\xd5\xbc\xab\x47\x06\x55\xdb\xb5\xdf\x88\xa1\x6f\x38"), -["\x05\x9c\x01\xd3\x20\xe0\x07\x84\x13\x95\x80\x49\x8d\x11\x7c\x90\x32\x66\xaf\xaf\x72\x50\xb5\xaf\x3b\x46\xa4\x3e\x11\x84\x0d\x4a"] = CTInfo($description="DigiCert Yeti2022-2 Log", $operator="DigiCert", $url="https://yeti2022-2.ct.digicert.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x1d\x69\x5e\x3f\x0a\xf2\x71\x77\xcd\x9d\x5d\xc3\x34\x49\x00\xee\x60\x77\xe1\x72\x76\x74\xa8\x7c\x5c\x7d\x09\xf2\x32\x1d\x05\x7e\x2e\xfe\x5b\x31\xd5\x3a\xfd\x73\x34\x6e\x49\x14\x4e\x50\x58\x96\x5a\xc4\xc7\xf4\xbe\x05\x64\xa4\xf7\xd7\xe5\xb1\x6d\x33\x0c\xc3"), ["\x55\x81\xd4\xc2\x16\x90\x36\x01\x4a\xea\x0b\x9b\x57\x3c\x53\xf0\xc0\xe4\x38\x78\x70\x25\x08\x17\x2f\xa3\xaa\x1d\x07\x13\xd3\x0c"] = CTInfo($description="Sectigo 'Sabre' CT log", $operator="Sectigo", $url="https://sabre.ct.comodo.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xf2\x6f\xd2\x89\x0f\x3f\xc5\xf8\x87\x1e\xab\x65\xb3\xd9\xbb\x17\x23\x8c\x06\x0e\x09\x55\x96\x3d\x0a\x08\xa2\xc5\x71\xb3\xd1\xa9\x2f\x28\x3e\x83\x10\xbf\x12\xd0\x44\x66\x15\xef\x54\xe1\x98\x80\xd0\xce\x24\x6d\x3e\x67\x9a\xe9\x37\x23\xce\x52\x93\x86\xda\x80"), ["\x6f\x53\x76\xac\x31\xf0\x31\x19\xd8\x99\x00\xa4\x51\x15\xff\x77\x15\x1c\x11\xd9\x02\xc1\x00\x29\x06\x8d\xb2\x08\x9a\x37\xd9\x13"] = CTInfo($description="Sectigo 'Mammoth' CT log", $operator="Sectigo", $url="https://mammoth.ct.comodo.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xef\xe4\x7d\x74\x2e\x15\x15\xb6\xe9\xbb\x23\x8b\xfb\x2c\xb5\xe1\xc7\x80\x98\x47\xfb\x40\x69\x68\xfc\x49\xad\x61\x4e\x83\x47\x3c\x1a\xb7\x8d\xdf\xff\x7b\x30\xb4\xba\xff\x2f\xcb\xa0\x14\xe3\xad\xd5\x85\x3f\x44\x59\x8c\x8c\x60\x8b\xd7\xb8\xb1\xbf\xae\x8c\x67"), -["\xdf\xa5\x5e\xab\x68\x82\x4f\x1f\x6c\xad\xee\xb8\x5f\x4e\x3e\x5a\xea\xcd\xa2\x12\xa4\x6a\x5e\x8e\x3b\x12\xc0\x20\x44\x5c\x2a\x73"] = CTInfo($description="Let's Encrypt 'Oak2022' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x86\x3c\xb1\x0d\x52\x23\x5a\xde\x6e\xf6\xc0\x7f\xa3\x64\xbc\xad\xc1\x89\xda\x97\x59\x4c\x60\x3c\xf8\x8a\x57\x84\x8f\xed\xbc\xa0\x63\x12\x51\x84\xe6\xbd\xdd\x7b\x8c\x80\x7d\xe3\x8f\x86\xa4\xea\xa9\xcf\xa8\xee\xf3\xe0\x5e\x70\xe0\xbb\xf6\xbd\xfc\x1f\x91\x2e"), ["\xb7\x3e\xfb\x24\xdf\x9c\x4d\xba\x75\xf2\x39\xc5\xba\x58\xf4\x6c\x5d\xfc\x42\xcf\x7a\x9f\x35\xc4\x9e\x1d\x09\x81\x25\xed\xb4\x99"] = CTInfo($description="Let's Encrypt 'Oak2023' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xb3\x3d\x0e\x78\xbe\xe3\xad\x5c\x44\x5c\x9b\xbe\xa3\x84\x16\x41\x82\xca\xca\x89\x17\x1e\x23\xce\x38\xa5\x54\x2f\x7f\xd3\x34\x51\x6a\xb9\x5c\xc3\x49\xea\xfb\x91\x9d\xe0\x8a\x3c\x73\x06\x9f\x7c\x65\x38\x11\x80\xc4\x9a\x5a\x00\xa6\x67\xc3\x83\xef\x89\x85\x51"), ["\x3b\x53\x77\x75\x3e\x2d\xb9\x80\x4e\x8b\x30\x5b\x06\xfe\x40\x3b\x67\xd8\x4f\xc3\xf4\xc7\xbd\x00\x0d\x2d\x72\x6f\xe1\xfa\xd4\x17"] = CTInfo($description="Let's Encrypt 'Oak2024H1' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2024h1/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x56\x43\xd7\x7e\x7b\xd4\x72\xb7\xba\xa9\x51\xbd\x36\x93\xb7\xe9\xb5\x92\x0f\xea\x5e\xb7\x45\xa3\x92\xfd\xc9\xa5\x3c\x80\xac\x1a\x20\xef\x25\x2f\xb8\xe1\x20\xf7\xa8\x3a\x2e\x07\x8d\xe6\xeb\xa4\xe2\x7d\x24\x63\x9f\x46\xbf\x94\x73\x52\x8d\x96\xae\xa9\x26\xfd"), ["\x3f\x17\x4b\x4f\xd7\x22\x47\x58\x94\x1d\x65\x1c\x84\xbe\x0d\x12\xed\x90\x37\x7f\x1f\x85\x6a\xeb\xc1\xbf\x28\x85\xec\xf8\x64\x6e"] = CTInfo($description="Let's Encrypt 'Oak2024H2' log", $operator="Let's Encrypt", $url="https://oak.ct.letsencrypt.org/2024h2/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd7\x73\xd6\x53\x47\xe9\xf3\xc9\xd5\x7c\x16\xc2\xd6\x8f\x70\x65\xfa\xf2\x51\x36\xa9\x13\x80\x2f\xed\xf9\x94\xd3\x5a\x8b\xe8\x4f\x33\xcf\xc3\xd3\x89\xd4\x5f\x5a\x66\x89\xba\x20\x1f\x71\xcb\xca\xbb\x9f\x9f\xf3\x5c\x2d\x1e\xa3\x81\x59\xaf\x92\xb3\x6d\x30\x68"), -["\xc3\x65\xf9\xb3\x65\x4f\x32\x83\xc7\x9d\xa9\x8e\x93\xd7\x41\x8f\x5b\xab\x7b\xe3\x25\x2c\x98\xe1\xd2\xf0\x4b\xb9\xeb\x42\x7d\x23"] = CTInfo($description="Trust Asia Log2022", $operator="TrustAsia", $url="https://ct.trustasia.com/log2022/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xbb\x52\xf2\x16\xcf\x92\x0b\xce\x79\xe6\x54\x6d\xc2\x37\x53\xa4\xf5\xf9\x3a\xa9\xb3\x05\xec\x1d\xbd\x16\xec\x30\xac\x2e\xf8\x79\x62\x35\x15\x8e\x1a\xd8\x16\x2e\xe4\x48\x6b\xf6\xc6\x13\xf1\x96\x2e\x5c\x10\xfe\x19\x1e\xa8\x18\xb8\x0f\x2d\xc3\xa4\x86\x51\x97"), ["\xe8\x7e\xa7\x66\x0b\xc2\x6c\xf6\x00\x2e\xf5\x72\x5d\x3f\xe0\xe3\x31\xb9\x39\x3b\xb9\x2f\xbf\x58\xeb\x3b\x90\x49\xda\xf5\x43\x5a"] = CTInfo($description="Trust Asia Log2023", $operator="TrustAsia", $url="https://ct.trustasia.com/log2023/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa4\x11\x52\xdb\x17\x41\x4e\x90\xd4\x56\x51\x12\x30\x52\xf8\x9b\x03\xcf\x4c\x9f\xf8\x2e\x38\xb5\xf1\x5a\xba\xfa\x38\xb9\xd2\x8f\x1a\x81\xda\x95\xcc\x33\xec\x21\x28\x66\xc6\x56\x3e\x60\x36\x21\x20\xd9\xd4\xac\x5d\xfa\x5c\x19\xa1\x05\x7d\xfe\x20\x23\xfc\xf5"), +["\x87\x4f\xb5\x0d\xc0\x29\xd9\x93\x1d\xe5\x73\xe9\xf2\x89\x9e\x8e\x45\x33\xb3\x92\xd3\x8b\x0a\x46\x25\x74\xbf\x0f\xee\xb2\xfc\x1e"] = CTInfo($description="Trust Asia Log2024-2", $operator="TrustAsia", $url="https://ct2024.trustasia.com/log2024/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa7\x64\xe2\x79\x81\x3f\x61\xd7\xec\xc6\xf8\x65\x28\x1d\xa0\xb4\x66\x33\xc3\x25\xd5\x0a\x95\x78\x9c\x8f\xfe\xa4\x2a\xd8\x8f\x7e\x72\xe0\xfe\xa8\x7f\xf8\xb1\x2d\x85\xc0\x8e\x12\x74\x0d\x2f\x8c\xab\xd7\x7f\x7a\x1e\xd9\x84\x33\x39\xe8\xfd\x89\x5f\x96\x48\x08"), }; diff --git a/scripts/base/protocols/ssl/mozilla-ca-list.zeek b/scripts/base/protocols/ssl/mozilla-ca-list.zeek index 160ae25452..3321bd6e80 100644 --- a/scripts/base/protocols/ssl/mozilla-ca-list.zeek +++ b/scripts/base/protocols/ssl/mozilla-ca-list.zeek @@ -1,6 +1,6 @@ # Don't edit! This file is automatically generated. -# Generated at: 2022-04-28 12:57:26 +0100 -# Generated from: NSS 3.78 +# Generated at: 2023-05-03 10:29:01 +0100 +# Generated from: NSS 3.89 # # The original source file comes with this licensing statement: # @@ -30,7 +30,6 @@ redef root_certs += { ["CN=SecureTrust CA,O=SecureTrust Corporation,C=US"] = "\x30\x82\x03\xB8\x30\x82\x02\xA0\xA0\x03\x02\x01\x02\x02\x10\x0C\xF0\x8E\x5C\x08\x16\xA5\xAD\x42\x7F\xF0\xEB\x27\x18\x59\xD0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x17\x30\x15\x06\x03\x55\x04\x03\x13\x0E\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x36\x31\x31\x30\x37\x31\x39\x33\x31\x31\x38\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x39\x34\x30\x35\x35\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x17\x30\x15\x06\x03\x55\x04\x03\x13\x0E\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xAB\xA4\x81\xE5\x95\xCD\xF5\xF6\x14\x8E\xC2\x4F\xCA\xD4\xE2\x78\x95\x58\x9C\x41\xE1\x0D\x99\x40\x24\x17\x39\x91\x33\x66\xE9\xBE\xE1\x83\xAF\x62\x5C\x89\xD1\xFC\x24\x5B\x61\xB3\xE0\x11\x11\x41\x1C\x1D\x6E\xF0\xB8\xBB\xF8\xDE\xA7\x81\xBA\xA6\x48\xC6\x9F\x1D\xBD\xBE\x8E\xA9\x41\x3E\xB8\x94\xED\x29\x1A\xD4\x8E\xD2\x03\x1D\x03\xEF\x6D\x0D\x67\x1C\x57\xD7\x06\xAD\xCA\xC8\xF5\xFE\x0E\xAF\x66\x25\x48\x04\x96\x0B\x5D\xA3\xBA\x16\xC3\x08\x4F\xD1\x46\xF8\x14\x5C\xF2\xC8\x5E\x01\x99\x6D\xFD\x88\xCC\x86\xA8\xC1\x6F\x31\x42\x6C\x52\x3E\x68\xCB\xF3\x19\x34\xDF\xBB\x87\x18\x56\x80\x26\xC4\xD0\xDC\xC0\x6F\xDF\xDE\xA0\xC2\x91\x16\xA0\x64\x11\x4B\x44\xBC\x1E\xF6\xE7\xFA\x63\xDE\x66\xAC\x76\xA4\x71\xA3\xEC\x36\x94\x68\x7A\x77\xA4\xB1\xE7\x0E\x2F\x81\x7A\xE2\xB5\x72\x86\xEF\xA2\x6B\x8B\xF0\x0F\xDB\xD3\x59\x3F\xBA\x72\xBC\x44\x24\x9C\xE3\x73\xB3\xF7\xAF\x57\x2F\x42\x26\x9D\xA9\x74\xBA\x00\x52\xF2\x4B\xCD\x53\x7C\x47\x0B\x36\x85\x0E\x66\xA9\x08\x97\x16\x34\x57\xC1\x66\xF7\x80\xE3\xED\x70\x54\xC7\x93\xE0\x2E\x28\x15\x59\x87\xBA\xBB\x02\x03\x01\x00\x01\xA3\x81\x9D\x30\x81\x9A\x30\x13\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x04\x06\x1E\x04\x00\x43\x00\x41\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x42\x32\xB6\x16\xFA\x04\xFD\xFE\x5D\x4B\x7A\xC3\xFD\xF7\x4C\x40\x1D\x5A\x43\xAF\x30\x34\x06\x03\x55\x1D\x1F\x04\x2D\x30\x2B\x30\x29\xA0\x27\xA0\x25\x86\x23\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x65\x63\x75\x72\x65\x74\x72\x75\x73\x74\x2E\x63\x6F\x6D\x2F\x53\x54\x43\x41\x2E\x63\x72\x6C\x30\x10\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x15\x01\x04\x03\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x30\xED\x4F\x4A\xE1\x58\x3A\x52\x72\x5B\xB5\xA6\xA3\x65\x18\xA6\xBB\x51\x3B\x77\xE9\x9D\xEA\xD3\x9F\x5C\xE0\x45\x65\x7B\x0D\xCA\x5B\xE2\x70\x50\xB2\x94\x05\x14\xAE\x49\xC7\x8D\x41\x07\x12\x73\x94\x7E\x0C\x23\x21\xFD\xBC\x10\x7F\x60\x10\x5A\x72\xF5\x98\x0E\xAC\xEC\xB9\x7F\xDD\x7A\x6F\x5D\xD3\x1C\xF4\xFF\x88\x05\x69\x42\xA9\x05\x71\xC8\xB7\xAC\x26\xE8\x2E\xB4\x8C\x6A\xFF\x71\xDC\xB8\xB1\xDF\x99\xBC\x7C\x21\x54\x2B\xE4\x58\xA2\xBB\x57\x29\xAE\x9E\xA9\xA3\x19\x26\x0F\x99\x2E\x08\xB0\xEF\xFD\x69\xCF\x99\x1A\x09\x8D\xE3\xA7\x9F\x2B\xC9\x36\x34\x7B\x24\xB3\x78\x4C\x95\x17\xA4\x06\x26\x1E\xB6\x64\x52\x36\x5F\x60\x67\xD9\x9C\xC5\x05\x74\x0B\xE7\x67\x23\xD2\x08\xFC\x88\xE9\xAE\x8B\x7F\xE1\x30\xF4\x37\x7E\xFD\xC6\x32\xDA\x2D\x9E\x44\x30\x30\x6C\xEE\x07\xDE\xD2\x34\xFC\xD2\xFF\x40\xF6\x4B\xF4\x66\x46\x06\x54\xA6\xF2\x32\x0A\x63\x26\x30\x6B\x9B\xD1\xDC\x8B\x47\xBA\xE1\xB9\xD5\x62\xD0\xA2\xA0\xF4\x67\x05\x78\x29\x63\x1A\x6F\x04\xD6\xF8\xC6\x4C\xA3\x9A\xB1\x37\xB4\x8D\xE5\x28\x4B\x1D\x9E\x2C\xC2\xB8\x68\xBC\xED\x02\xEE\x31", ["CN=Secure Global CA,O=SecureTrust Corporation,C=US"] = "\x30\x82\x03\xBC\x30\x82\x02\xA4\xA0\x03\x02\x01\x02\x02\x10\x07\x56\x22\xA4\xE8\xD4\x8A\x89\x4D\xF4\x13\xC8\xF0\xF8\xEA\xA5\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x19\x30\x17\x06\x03\x55\x04\x03\x13\x10\x53\x65\x63\x75\x72\x65\x20\x47\x6C\x6F\x62\x61\x6C\x20\x43\x41\x30\x1E\x17\x0D\x30\x36\x31\x31\x30\x37\x31\x39\x34\x32\x32\x38\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x39\x35\x32\x30\x36\x5A\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x20\x30\x1E\x06\x03\x55\x04\x0A\x13\x17\x53\x65\x63\x75\x72\x65\x54\x72\x75\x73\x74\x20\x43\x6F\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x31\x19\x30\x17\x06\x03\x55\x04\x03\x13\x10\x53\x65\x63\x75\x72\x65\x20\x47\x6C\x6F\x62\x61\x6C\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xAF\x35\x2E\xD8\xAC\x6C\x55\x69\x06\x71\xE5\x13\x68\x24\xB3\x4F\xD8\xCC\x21\x47\xF8\xF1\x60\x38\x89\x89\x03\xE9\xBD\xEA\x5E\x46\x53\x09\xDC\x5C\xF5\x5A\xE8\xF7\x45\x2A\x02\xEB\x31\x61\xD7\x29\x33\x4C\xCE\xC7\x7C\x0A\x37\x7E\x0F\xBA\x32\x98\xE1\x1D\x97\xAF\x8F\xC7\xDC\xC9\x38\x96\xF3\xDB\x1A\xFC\x51\xED\x68\xC6\xD0\x6E\xA4\x7C\x24\xD1\xAE\x42\xC8\x96\x50\x63\x2E\xE0\xFE\x75\xFE\x98\xA7\x5F\x49\x2E\x95\xE3\x39\x33\x64\x8E\x1E\xA4\x5F\x90\xD2\x67\x3C\xB2\xD9\xFE\x41\xB9\x55\xA7\x09\x8E\x72\x05\x1E\x8B\xDD\x44\x85\x82\x42\xD0\x49\xC0\x1D\x60\xF0\xD1\x17\x2C\x95\xEB\xF6\xA5\xC1\x92\xA3\xC5\xC2\xA7\x08\x60\x0D\x60\x04\x10\x96\x79\x9E\x16\x34\xE6\xA9\xB6\xFA\x25\x45\x39\xC8\x1E\x65\xF9\x93\xF5\xAA\xF1\x52\xDC\x99\x98\x3D\xA5\x86\x1A\x0C\x35\x33\xFA\x4B\xA5\x04\x06\x15\x1C\x31\x80\xEF\xAA\x18\x6B\xC2\x7B\xD7\xDA\xCE\xF9\x33\x20\xD5\xF5\xBD\x6A\x33\x2D\x81\x04\xFB\xB0\x5C\xD4\x9C\xA3\xE2\x5C\x1D\xE3\xA9\x42\x75\x5E\x7B\xD4\x77\xEF\x39\x54\xBA\xC9\x0A\x18\x1B\x12\x99\x49\x2F\x88\x4B\xFD\x50\x62\xD1\x73\xE7\x8F\x7A\x43\x02\x03\x01\x00\x01\xA3\x81\x9D\x30\x81\x9A\x30\x13\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x04\x06\x1E\x04\x00\x43\x00\x41\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xAF\x44\x04\xC2\x41\x7E\x48\x83\xDB\x4E\x39\x02\xEC\xEC\x84\x7A\xE6\xCE\xC9\xA4\x30\x34\x06\x03\x55\x1D\x1F\x04\x2D\x30\x2B\x30\x29\xA0\x27\xA0\x25\x86\x23\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x65\x63\x75\x72\x65\x74\x72\x75\x73\x74\x2E\x63\x6F\x6D\x2F\x53\x47\x43\x41\x2E\x63\x72\x6C\x30\x10\x06\x09\x2B\x06\x01\x04\x01\x82\x37\x15\x01\x04\x03\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x63\x1A\x08\x40\x7D\xA4\x5E\x53\x0D\x77\xD8\x7A\xAE\x1F\x0D\x0B\x51\x16\x03\xEF\x18\x7C\xC8\xE3\xAF\x6A\x58\x93\x14\x60\x91\xB2\x84\xDC\x88\x4E\xBE\x39\x8A\x3A\xF3\xE6\x82\x89\x5D\x01\x37\xB3\xAB\x24\xA4\x15\x0E\x92\x35\x5A\x4A\x44\x5E\x4E\x57\xFA\x75\xCE\x1F\x48\xCE\x66\xF4\x3C\x40\x26\x92\x98\x6C\x1B\xEE\x24\x46\x0C\x17\xB3\x52\xA5\xDB\xA5\x91\x91\xCF\x37\xD3\x6F\xE7\x27\x08\x3A\x4E\x19\x1F\x3A\xA7\x58\x5C\x17\xCF\x79\x3F\x8B\xE4\xA7\xD3\x26\x23\x9D\x26\x0F\x58\x69\xFC\x47\x7E\xB2\xD0\x8D\x8B\x93\xBF\x29\x4F\x43\x69\x74\x76\x67\x4B\xCF\x07\x8C\xE6\x02\xF7\xB5\xE1\xB4\x43\xB5\x4B\x2D\x14\x9F\xF9\xDC\x26\x0D\xBF\xA6\x47\x74\x06\xD8\x88\xD1\x3A\x29\x30\x84\xCE\xD2\x39\x80\x62\x1B\xA8\xC7\x57\x49\xBC\x6A\x55\x51\x67\x15\x4A\xBE\x35\x07\xE4\xD5\x75\x98\x37\x79\x30\x14\xDB\x29\x9D\x6C\xC5\x69\xCC\x47\x55\xA2\x30\xF7\xCC\x5C\x7F\xC2\xC3\x98\x1C\x6B\x4E\x16\x80\xEB\x7A\x78\x65\x45\xA2\x00\x1A\xAF\x0C\x0D\x55\x64\x34\x48\xB8\x92\xB9\xF1\xB4\x50\x29\xF2\x4F\x23\x1F\xDA\x6C\xAC\x1F\x44\xE1\xDD\x23\x78\x51\x5B\xC7\x16", ["CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "\x30\x82\x04\x1D\x30\x82\x03\x05\xA0\x03\x02\x01\x02\x02\x10\x4E\x81\x2D\x8A\x82\x65\xE0\x0B\x02\xEE\x3E\x35\x02\x46\xE5\x3D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\x81\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x36\x31\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x81\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xD0\x40\x8B\x8B\x72\xE3\x91\x1B\xF7\x51\xC1\x1B\x54\x04\x98\xD3\xA9\xBF\xC1\xE6\x8A\x5D\x3B\x87\xFB\xBB\x88\xCE\x0D\xE3\x2F\x3F\x06\x96\xF0\xA2\x29\x50\x99\xAE\xDB\x3B\xA1\x57\xB0\x74\x51\x71\xCD\xED\x42\x91\x4D\x41\xFE\xA9\xC8\xD8\x6A\x86\x77\x44\xBB\x59\x66\x97\x50\x5E\xB4\xD4\x2C\x70\x44\xCF\xDA\x37\x95\x42\x69\x3C\x30\xC4\x71\xB3\x52\xF0\x21\x4D\xA1\xD8\xBA\x39\x7C\x1C\x9E\xA3\x24\x9D\xF2\x83\x16\x98\xAA\x16\x7C\x43\x9B\x15\x5B\xB7\xAE\x34\x91\xFE\xD4\x62\x26\x18\x46\x9A\x3F\xEB\xC1\xF9\xF1\x90\x57\xEB\xAC\x7A\x0D\x8B\xDB\x72\x30\x6A\x66\xD5\xE0\x46\xA3\x70\xDC\x68\xD9\xFF\x04\x48\x89\x77\xDE\xB5\xE9\xFB\x67\x6D\x41\xE9\xBC\x39\xBD\x32\xD9\x62\x02\xF1\xB1\xA8\x3D\x6E\x37\x9C\xE2\x2F\xE2\xD3\xA2\x26\x8B\xC6\xB8\x55\x43\x88\xE1\x23\x3E\xA5\xD2\x24\x39\x6A\x47\xAB\x00\xD4\xA1\xB3\xA9\x25\xFE\x0D\x3F\xA7\x1D\xBA\xD3\x51\xC1\x0B\xA4\xDA\xAC\x38\xEF\x55\x50\x24\x05\x65\x46\x93\x34\x4F\x2D\x8D\xAD\xC6\xD4\x21\x19\xD2\x8E\xCA\x05\x61\x71\x07\x73\x47\xE5\x8A\x19\x12\xBD\x04\x4D\xCE\x4E\x9C\xA5\x48\xAC\xBB\x26\xF7\x02\x03\x01\x00\x01\xA3\x81\x8E\x30\x81\x8B\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x0B\x58\xE5\x8B\xC6\x4C\x15\x37\xA4\x40\xA9\x30\xA9\x21\xBE\x47\x36\x5A\x56\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x49\x06\x03\x55\x1D\x1F\x04\x42\x30\x40\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x63\x6F\x6D\x6F\x64\x6F\x63\x61\x2E\x63\x6F\x6D\x2F\x43\x4F\x4D\x4F\x44\x4F\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x3E\x98\x9E\x9B\xF6\x1B\xE9\xD7\x39\xB7\x78\xAE\x1D\x72\x18\x49\xD3\x87\xE4\x43\x82\xEB\x3F\xC9\xAA\xF5\xA8\xB5\xEF\x55\x7C\x21\x52\x65\xF9\xD5\x0D\xE1\x6C\xF4\x3E\x8C\x93\x73\x91\x2E\x02\xC4\x4E\x07\x71\x6F\xC0\x8F\x38\x61\x08\xA8\x1E\x81\x0A\xC0\x2F\x20\x2F\x41\x8B\x91\xDC\x48\x45\xBC\xF1\xC6\xDE\xBA\x76\x6B\x33\xC8\x00\x2D\x31\x46\x4C\xED\xE7\x9D\xCF\x88\x94\xFF\x33\xC0\x56\xE8\x24\x86\x26\xB8\xD8\x38\x38\xDF\x2A\x6B\xDD\x12\xCC\xC7\x3F\x47\x17\x4C\xA2\xC2\x06\x96\x09\xD6\xDB\xFE\x3F\x3C\x46\x41\xDF\x58\xE2\x56\x0F\x3C\x3B\xC1\x1C\x93\x35\xD9\x38\x52\xAC\xEE\xC8\xEC\x2E\x30\x4E\x94\x35\xB4\x24\x1F\x4B\x78\x69\xDA\xF2\x02\x38\xCC\x95\x52\x93\xF0\x70\x25\x59\x9C\x20\x67\xC4\xEE\xF9\x8B\x57\x61\xF4\x92\x76\x7D\x3F\x84\x8D\x55\xB7\xE8\xE5\xAC\xD5\xF1\xF5\x19\x56\xA6\x5A\xFB\x90\x1C\xAF\x93\xEB\xE5\x1C\xD4\x67\x97\x5D\x04\x0E\xBE\x0B\x83\xA6\x17\x83\xB9\x30\x12\xA0\xC5\x33\x15\x05\xB9\x0D\xFB\xC7\x05\x76\xE3\xD8\x4A\x8D\xFC\x34\x17\xA3\xC6\x21\x28\xBE\x30\x45\x31\x1E\xC7\x78\xBE\x58\x61\x38\xAC\x3B\xE2\x01\x65", - ["CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US"] = "\x30\x82\x03\xE6\x30\x82\x02\xCE\xA0\x03\x02\x01\x02\x02\x10\x57\xCB\x33\x6F\xC2\x5C\x16\xE6\x47\x16\x17\xE3\x90\x31\x68\xE0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x62\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x21\x30\x1F\x06\x03\x55\x04\x0A\x13\x18\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x4C\x2E\x4C\x2E\x43\x2E\x31\x30\x30\x2E\x06\x03\x55\x04\x03\x13\x27\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x36\x31\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x32\x33\x35\x39\x35\x39\x5A\x30\x62\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x21\x30\x1F\x06\x03\x55\x04\x0A\x13\x18\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x4C\x2E\x4C\x2E\x43\x2E\x31\x30\x30\x2E\x06\x03\x55\x04\x03\x13\x27\x4E\x65\x74\x77\x6F\x72\x6B\x20\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xE4\xBC\x7E\x92\x30\x6D\xC6\xD8\x8E\x2B\x0B\xBC\x46\xCE\xE0\x27\x96\xDE\xDE\xF9\xFA\x12\xD3\x3C\x33\x73\xB3\x04\x2F\xBC\x71\x8C\xE5\x9F\xB6\x22\x60\x3E\x5F\x5D\xCE\x09\xFF\x82\x0C\x1B\x9A\x51\x50\x1A\x26\x89\xDD\xD5\x61\x5D\x19\xDC\x12\x0F\x2D\x0A\xA2\x43\x5D\x17\xD0\x34\x92\x20\xEA\x73\xCF\x38\x2C\x06\x26\x09\x7A\x72\xF7\xFA\x50\x32\xF8\xC2\x93\xD3\x69\xA2\x23\xCE\x41\xB1\xCC\xE4\xD5\x1F\x36\xD1\x8A\x3A\xF8\x8C\x63\xE2\x14\x59\x69\xED\x0D\xD3\x7F\x6B\xE8\xB8\x03\xE5\x4F\x6A\xE5\x98\x63\x69\x48\x05\xBE\x2E\xFF\x33\xB6\xE9\x97\x59\x69\xF8\x67\x19\xAE\x93\x61\x96\x44\x15\xD3\x72\xB0\x3F\xBC\x6A\x7D\xEC\x48\x7F\x8D\xC3\xAB\xAA\x71\x2B\x53\x69\x41\x53\x34\xB5\xB0\xB9\xC5\x06\x0A\xC4\xB0\x45\xF5\x41\x5D\x6E\x89\x45\x7B\x3D\x3B\x26\x8C\x74\xC2\xE5\xD2\xD1\x7D\xB2\x11\xD4\xFB\x58\x32\x22\x9A\x80\xC9\xDC\xFD\x0C\xE9\x7F\x5E\x03\x97\xCE\x3B\x00\x14\x87\x27\x70\x38\xA9\x8E\x6E\xB3\x27\x76\x98\x51\xE0\x05\xE3\x21\xAB\x1A\xD5\x85\x22\x3C\x29\xB5\x9A\x16\xC5\x80\xA8\xF4\xBB\x6B\x30\x8F\x2F\x46\x02\xA2\xB1\x0C\x22\xE0\xD3\x02\x03\x01\x00\x01\xA3\x81\x97\x30\x81\x94\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x21\x30\xC9\xFB\x00\xD7\x4E\x98\xDA\x87\xAA\x2A\xD0\xA7\x2E\xB1\x40\x31\xA7\x4C\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x52\x06\x03\x55\x1D\x1F\x04\x4B\x30\x49\x30\x47\xA0\x45\xA0\x43\x86\x41\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x6E\x65\x74\x73\x6F\x6C\x73\x73\x6C\x2E\x63\x6F\x6D\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x53\x6F\x6C\x75\x74\x69\x6F\x6E\x73\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xBB\xAE\x4B\xE7\xB7\x57\xEB\x7F\xAA\x2D\xB7\x73\x47\x85\x6A\xC1\xE4\xA5\x1D\xE4\xE7\x3C\xE9\xF4\x59\x65\x77\xB5\x7A\x5B\x5A\x8D\x25\x36\xE0\x7A\x97\x2E\x38\xC0\x57\x60\x83\x98\x06\x83\x9F\xB9\x76\x7A\x6E\x50\xE0\xBA\x88\x2C\xFC\x45\xCC\x18\xB0\x99\x95\x51\x0E\xEC\x1D\xB8\x88\xFF\x87\x50\x1C\x82\xC2\xE3\xE0\x32\x80\xBF\xA0\x0B\x47\xC8\xC3\x31\xEF\x99\x67\x32\x80\x4F\x17\x21\x79\x0C\x69\x5C\xDE\x5E\x34\xAE\x02\xB5\x26\xEA\x50\xDF\x7F\x18\x65\x2C\xC9\xF2\x63\xE1\xA9\x07\xFE\x7C\x71\x1F\x6B\x33\x24\x6A\x1E\x05\xF7\x05\x68\xC0\x6A\x12\xCB\x2E\x5E\x61\xCB\xAE\x28\xD3\x7E\xC2\xB4\x66\x91\x26\x5F\x3C\x2E\x24\x5F\xCB\x58\x0F\xEB\x28\xEC\xAF\x11\x96\xF3\xDC\x7B\x6F\xC0\xA7\x88\xF2\x53\x77\xB3\x60\x5E\xAE\xAE\x28\xDA\x35\x2C\x6F\x34\x45\xD3\x26\xE1\xDE\xEC\x5B\x4F\x27\x6B\x16\x7C\xBD\x44\x04\x18\x82\xB3\x89\x79\x17\x10\x71\x3D\x7A\xA2\x16\x4E\xF5\x01\xCD\xA4\x6C\x65\x68\xA1\x49\x76\x5C\x43\xC9\xD8\xBC\x36\x67\x6C\xA5\x94\xB5\xD4\xCC\xB9\xBD\x6A\x35\x56\x21\xDE\xD8\xC3\xEB\xFB\xCB\xA4\x60\x4C\xB0\x55\xA0\xA0\x7B\x57\xB2", ["CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "\x30\x82\x02\x89\x30\x82\x02\x0F\xA0\x03\x02\x01\x02\x02\x10\x1F\x47\xAF\xAA\x62\x00\x70\x50\x54\x4C\x01\x9E\x9B\x63\x99\x2A\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x85\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x43\x4F\x4D\x4F\x44\x4F\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x38\x30\x33\x30\x36\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x85\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x42\x31\x1B\x30\x19\x06\x03\x55\x04\x08\x13\x12\x47\x72\x65\x61\x74\x65\x72\x20\x4D\x61\x6E\x63\x68\x65\x73\x74\x65\x72\x31\x10\x30\x0E\x06\x03\x55\x04\x07\x13\x07\x53\x61\x6C\x66\x6F\x72\x64\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x13\x11\x43\x4F\x4D\x4F\x44\x4F\x20\x43\x41\x20\x4C\x69\x6D\x69\x74\x65\x64\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x43\x4F\x4D\x4F\x44\x4F\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x03\x47\x7B\x2F\x75\xC9\x82\x15\x85\xFB\x75\xE4\x91\x16\xD4\xAB\x62\x99\xF5\x3E\x52\x0B\x06\xCE\x41\x00\x7F\x97\xE1\x0A\x24\x3C\x1D\x01\x04\xEE\x3D\xD2\x8D\x09\x97\x0C\xE0\x75\xE4\xFA\xFB\x77\x8A\x2A\xF5\x03\x60\x4B\x36\x8B\x16\x23\x16\xAD\x09\x71\xF4\x4A\xF4\x28\x50\xB4\xFE\x88\x1C\x6E\x3F\x6C\x2F\x2F\x09\x59\x5B\xA5\x5B\x0B\x33\x99\xE2\xC3\x3D\x89\xF9\x6A\x2C\xEF\xB2\xD3\x06\xE9\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x75\x71\xA7\x19\x48\x19\xBC\x9D\x9D\xEA\x41\x47\xDF\x94\xC4\x48\x77\x99\xD3\x79\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xEF\x03\x5B\x7A\xAC\xB7\x78\x0A\x72\xB7\x88\xDF\xFF\xB5\x46\x14\x09\x0A\xFA\xA0\xE6\x7D\x08\xC6\x1A\x87\xBD\x18\xA8\x73\xBD\x26\xCA\x60\x0C\x9D\xCE\x99\x9F\xCF\x5C\x0F\x30\xE1\xBE\x14\x31\xEA\x02\x30\x14\xF4\x93\x3C\x49\xA7\x33\x7A\x90\x46\x47\xB3\x63\x7D\x13\x9B\x4E\xB7\x6F\x18\x37\x80\x53\xFE\xDD\x20\xE0\x35\x9A\x36\xD1\xC7\x01\xB9\xE6\xDC\xDD\xF3\xFF\x1D\x2C\x3A\x16\x57\xD9\x92\x39\xD6", ["CN=Certigna,O=Dhimyotis,C=FR"] = "\x30\x82\x03\xA8\x30\x82\x02\x90\xA0\x03\x02\x01\x02\x02\x09\x00\xFE\xDC\xE3\x01\x0F\xC9\x48\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x30\x1E\x17\x0D\x30\x37\x30\x36\x32\x39\x31\x35\x31\x33\x30\x35\x5A\x17\x0D\x32\x37\x30\x36\x32\x39\x31\x35\x31\x33\x30\x35\x5A\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xC8\x68\xF1\xC9\xD6\xD6\xB3\x34\x75\x26\x82\x1E\xEC\xB4\xBE\xEA\x5C\xE1\x26\xED\x11\x47\x61\xE1\xA2\x7C\x16\x78\x40\x21\xE4\x60\x9E\x5A\xC8\x63\xE1\xC4\xB1\x96\x92\xFF\x18\x6D\x69\x23\xE1\x2B\x62\xF7\xDD\xE2\x36\x2F\x91\x07\xB9\x48\xCF\x0E\xEC\x79\xB6\x2C\xE7\x34\x4B\x70\x08\x25\xA3\x3C\x87\x1B\x19\xF2\x81\x07\x0F\x38\x90\x19\xD3\x11\xFE\x86\xB4\xF2\xD1\x5E\x1E\x1E\x96\xCD\x80\x6C\xCE\x3B\x31\x93\xB6\xF2\xA0\xD0\xA9\x95\x12\x7D\xA5\x9A\xCC\x6B\xC8\x84\x56\x8A\x33\xA9\xE7\x22\x15\x53\x16\xF0\xCC\x17\xEC\x57\x5F\xE9\xA2\x0A\x98\x09\xDE\xE3\x5F\x9C\x6F\xDC\x48\xE3\x85\x0B\x15\x5A\xA6\xBA\x9F\xAC\x48\xE3\x09\xB2\xF7\xF4\x32\xDE\x5E\x34\xBE\x1C\x78\x5D\x42\x5B\xCE\x0E\x22\x8F\x4D\x90\xD7\x7D\x32\x18\xB3\x0B\x2C\x6A\xBF\x8E\x3F\x14\x11\x89\x20\x0E\x77\x14\xB5\x3D\x94\x08\x87\xF7\x25\x1E\xD5\xB2\x60\x00\xEC\x6F\x2A\x28\x25\x6E\x2A\x3E\x18\x63\x17\x25\x3F\x3E\x44\x20\x16\xF6\x26\xC8\x25\xAE\x05\x4A\xB4\xE7\x63\x2C\xF3\x8C\x16\x53\x7E\x5C\xFB\x11\x1A\x08\xC1\x46\x62\x9F\x22\xB8\xF1\xC2\x8D\x69\xDC\xFA\x3A\x58\x06\xDF\x02\x03\x01\x00\x01\xA3\x81\xBC\x30\x81\xB9\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x1A\xED\xFE\x41\x39\x90\xB4\x24\x59\xBE\x01\xF2\x52\xD5\x45\xF6\x5A\x39\xDC\x11\x30\x64\x06\x03\x55\x1D\x23\x04\x5D\x30\x5B\x80\x14\x1A\xED\xFE\x41\x39\x90\xB4\x24\x59\xBE\x01\xF2\x52\xD5\x45\xF6\x5A\x39\xDC\x11\xA1\x38\xA4\x36\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x52\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x44\x68\x69\x6D\x79\x6F\x74\x69\x73\x31\x11\x30\x0F\x06\x03\x55\x04\x03\x0C\x08\x43\x65\x72\x74\x69\x67\x6E\x61\x82\x09\x00\xFE\xDC\xE3\x01\x0F\xC9\x48\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x11\x06\x09\x60\x86\x48\x01\x86\xF8\x42\x01\x01\x04\x04\x03\x02\x00\x07\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x85\x03\x1E\x92\x71\xF6\x42\xAF\xE1\xA3\x61\x9E\xEB\xF3\xC0\x0F\xF2\xA5\xD4\xDA\x95\xE6\xD6\xBE\x68\x36\x3D\x7E\x6E\x1F\x4C\x8A\xEF\xD1\x0F\x21\x6D\x5E\xA5\x52\x63\xCE\x12\xF8\xEF\x2A\xDA\x6F\xEB\x37\xFE\x13\x02\xC7\xCB\x3B\x3E\x22\x6B\xDA\x61\x2E\x7F\xD4\x72\x3D\xDD\x30\xE1\x1E\x4C\x40\x19\x8C\x0F\xD7\x9C\xD1\x83\x30\x7B\x98\x59\xDC\x7D\xC6\xB9\x0C\x29\x4C\xA1\x33\xA2\xEB\x67\x3A\x65\x84\xD3\x96\xE2\xED\x76\x45\x70\x8F\xB5\x2B\xDE\xF9\x23\xD6\x49\x6E\x3C\x14\xB5\xC6\x9F\x35\x1E\x50\xD0\xC1\x8F\x6A\x70\x44\x02\x62\xCB\xAE\x1D\x68\x41\xA7\xAA\x57\xE8\x53\xAA\x07\xD2\x06\xF6\xD5\x14\x06\x0B\x91\x03\x75\x2C\x6C\x72\xB5\x61\x95\x9A\x0D\x8B\xB9\x0D\xE7\xF5\xDF\x54\xCD\xDE\xE6\xD8\xD6\x09\x08\x97\x63\xE5\xC1\x2E\xB0\xB7\x44\x26\xC0\x26\xC0\xAF\x55\x30\x9E\x3B\xD5\x36\x2A\x19\x04\xF4\x5C\x1E\xFF\xCF\x2C\xB7\xFF\xD0\xFD\x87\x40\x11\xD5\x11\x23\xBB\x48\xC0\x21\xA9\xA4\x28\x2D\xFD\x15\xF8\xB0\x4E\x2B\xF4\x30\x5B\x21\xFC\x11\x91\x34\xBE\x41\xEF\x7B\x9D\x97\x75\xFF\x97\x95\xC0\x96\x58\x2F\xEA\xBB\x46\xD7\xBB\xE4\xD9\x2E", ["OU=ePKI Root Certification Authority,O=Chunghwa Telecom Co.\, Ltd.,C=TW"] = "\x30\x82\x05\xB0\x30\x82\x03\x98\xA0\x03\x02\x01\x02\x02\x10\x15\xC8\xBD\x65\x47\x5C\xAF\xB8\x97\x00\x5E\xE4\x06\xD2\xBC\x9D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x5E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x43\x68\x75\x6E\x67\x68\x77\x61\x20\x54\x65\x6C\x65\x63\x6F\x6D\x20\x43\x6F\x2E\x2C\x20\x4C\x74\x64\x2E\x31\x2A\x30\x28\x06\x03\x55\x04\x0B\x0C\x21\x65\x50\x4B\x49\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x34\x31\x32\x32\x30\x30\x32\x33\x31\x32\x37\x5A\x17\x0D\x33\x34\x31\x32\x32\x30\x30\x32\x33\x31\x32\x37\x5A\x30\x5E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x43\x68\x75\x6E\x67\x68\x77\x61\x20\x54\x65\x6C\x65\x63\x6F\x6D\x20\x43\x6F\x2E\x2C\x20\x4C\x74\x64\x2E\x31\x2A\x30\x28\x06\x03\x55\x04\x0B\x0C\x21\x65\x50\x4B\x49\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE1\x25\x0F\xEE\x8D\xDB\x88\x33\x75\x67\xCD\xAD\x1F\x7D\x3A\x4E\x6D\x9D\xD3\x2F\x14\xF3\x63\x74\xCB\x01\x21\x6A\x37\xEA\x84\x50\x07\x4B\x26\x5B\x09\x43\x6C\x21\x9E\x6A\xC8\xD5\x03\xF5\x60\x69\x8F\xCC\xF0\x22\xE4\x1F\xE7\xF7\x6A\x22\x31\xB7\x2C\x15\xF2\xE0\xFE\x00\x6A\x43\xFF\x87\x65\xC6\xB5\x1A\xC1\xA7\x4C\x6D\x22\x70\x21\x8A\x31\xF2\x97\x74\x89\x09\x12\x26\x1C\x9E\xCA\xD9\x12\xA2\x95\x3C\xDA\xE9\x67\xBF\x08\xA0\x64\xE3\xD6\x42\xB7\x45\xEF\x97\xF4\xF6\xF5\xD7\xB5\x4A\x15\x02\x58\x7D\x98\x58\x4B\x60\xBC\xCD\xD7\x0D\x9A\x13\x33\x53\xD1\x61\xF9\x7A\xD5\xD7\x78\xB3\x9A\x33\xF7\x00\x86\xCE\x1D\x4D\x94\x38\xAF\xA8\xEC\x78\x51\x70\x8A\x5C\x10\x83\x51\x21\xF7\x11\x3D\x34\x86\x5E\xE5\x48\xCD\x97\x81\x82\x35\x4C\x19\xEC\x65\xF6\x6B\xC5\x05\xA1\xEE\x47\x13\xD6\xB3\x21\x27\x94\x10\x0A\xD9\x24\x3B\xBA\xBE\x44\x13\x46\x30\x3F\x97\x3C\xD8\xD7\xD7\x6A\xEE\x3B\x38\xE3\x2B\xD4\x97\x0E\xB9\x1B\xE7\x07\x49\x7F\x37\x2A\xF9\x77\x78\xCF\x54\xED\x5B\x46\x9D\xA3\x80\x0E\x91\x43\xC1\xD6\x5B\x5F\x14\xBA\x9F\xA6\x8D\x24\x47\x40\x59\xBF\x72\x38\xB2\x36\x6C\x37\xFF\x99\xD1\x5D\x0E\x59\x0A\xAB\x69\xF7\xC0\xB2\x04\x45\x7A\x54\x00\xAE\xBE\x53\xF6\xB5\xE7\xE1\xF8\x3C\xA3\x31\xD2\xA9\xFE\x21\x52\x64\xC5\xA6\x67\xF0\x75\x07\x06\x94\x14\x81\x55\xC6\x27\xE4\x01\x8F\x17\xC1\x6A\x71\xD7\xBE\x4B\xFB\x94\x58\x7D\x7E\x11\x33\xB1\x42\xF7\x62\x6C\x18\xD6\xCF\x09\x68\x3E\x7F\x6C\xF6\x1E\x8F\x62\xAD\xA5\x63\xDB\x09\xA7\x1F\x22\x42\x41\x1E\x6F\x99\x8A\x3E\xD7\xF9\x3F\x40\x7A\x79\xB0\xA5\x01\x92\xD2\x9D\x3D\x08\x15\xA5\x10\x01\x2D\xB3\x32\x76\xA8\x95\x0D\xB3\x7A\x9A\xFB\x07\x10\x78\x11\x6F\xE1\x8F\xC7\xBA\x0F\x25\x1A\x74\x2A\xE5\x1C\x98\x41\x99\xDF\x21\x87\xE8\x95\x06\x6A\x0A\xB3\x6A\x47\x76\x65\xF6\x3A\xCF\x8F\x62\x17\x19\x7B\x0A\x28\xCD\x1A\xD2\x83\x1E\x21\xC7\x2C\xBF\xBE\xFF\x61\x68\xB7\x67\x1B\xBB\x78\x4D\x8D\xCE\x67\xE5\xE4\xC1\x8E\xB7\x23\x66\xE2\x9D\x90\x75\x34\x98\xA9\x36\x2B\x8A\x9A\x94\xB9\x9D\xEC\xCC\x8A\xB1\xF8\x25\x89\x5C\x5A\xB6\x2F\x8C\x1F\x6D\x79\x24\xA7\x52\x68\xC3\x84\x35\xE2\x66\x8D\x63\x0E\x25\x4D\xD5\x19\xB2\xE6\x79\x37\xA7\x22\x9D\x54\x31\x02\x03\x01\x00\x01\xA3\x6A\x30\x68\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x1E\x0C\xF7\xB6\x67\xF2\xE1\x92\x26\x09\x45\xC0\x55\x39\x2E\x77\x3F\x42\x4A\xA2\x30\x0C\x06\x03\x55\x1D\x13\x04\x05\x30\x03\x01\x01\xFF\x30\x39\x06\x04\x67\x2A\x07\x00\x04\x31\x30\x2F\x30\x2D\x02\x01\x00\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x30\x07\x06\x05\x67\x2A\x03\x00\x00\x04\x14\x45\xB0\xC2\xC7\x0A\x56\x7C\xEE\x5B\x78\x0C\x95\xF9\x18\x53\xC1\xA6\x1C\xD8\x10\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x09\xB3\x83\x53\x59\x01\x3E\x95\x49\xB9\xF1\x81\xBA\xF9\x76\x20\x23\xB5\x27\x60\x74\xD4\x6A\x99\x34\x5E\x6C\x00\x53\xD9\x9F\xF2\xA6\xB1\x24\x07\x44\x6A\x2A\xC6\xA5\x8E\x78\x12\xE8\x47\xD9\x58\x1B\x13\x2A\x5E\x79\x9B\x9F\x0A\x2A\x67\xA6\x25\x3F\x06\x69\x56\x73\xC3\x8A\x66\x48\xFB\x29\x81\x57\x74\x06\xCA\x9C\xEA\x28\xE8\x38\x67\x26\x2B\xF1\xD5\xB5\x3F\x65\x93\xF8\x36\x5D\x8E\x8D\x8D\x40\x20\x87\x19\xEA\xEF\x27\xC0\x3D\xB4\x39\x0F\x25\x7B\x68\x50\x74\x55\x9C\x0C\x59\x7D\x5A\x3D\x41\x94\x25\x52\x08\xE0\x47\x2C\x15\x31\x19\xD5\xBF\x07\x55\xC6\xBB\x12\xB5\x97\xF4\x5F\x83\x85\xBA\x71\xC1\xD9\x6C\x81\x11\x76\x0A\x0A\xB0\xBF\x82\x97\xF7\xEA\x3D\xFA\xFA\xEC\x2D\xA9\x28\x94\x3B\x56\xDD\xD2\x51\x2E\xAE\xC0\xBD\x08\x15\x8C\x77\x52\x34\x96\xD6\x9B\xAC\xD3\x1D\x8E\x61\x0F\x35\x7B\x9B\xAE\x39\x69\x0B\x62\x60\x40\x20\x36\x8F\xAF\xFB\x36\xEE\x2D\x08\x4A\x1D\xB8\xBF\x9B\x5C\xF8\xEA\xA5\x1B\xA0\x73\xA6\xD8\xF8\x6E\xE0\x33\x04\x5F\x68\xAA\x27\x87\xED\xD9\xC1\x90\x9C\xED\xBD\xE3\x6A\x35\xAF\x63\xDF\xAB\x18\xD9\xBA\xE6\xE9\x4A\xEA\x50\x8A\x0F\x61\x93\x1E\xE2\x2D\x19\xE2\x30\x94\x35\x92\x5D\x0E\xB6\x07\xAF\x19\x80\x8F\x47\x90\x51\x4B\x2E\x4D\xDD\x85\xE2\xD2\x0A\x52\x0A\x17\x9A\xFC\x1A\xB0\x50\x02\xE5\x01\xA3\x63\x37\x21\x4C\x44\xC4\x9B\x51\x99\x11\x0E\x73\x9C\x06\x8F\x54\x2E\xA7\x28\x5E\x44\x39\x87\x56\x2D\x37\xBD\x85\x44\x94\xE1\x0C\x4B\x2C\x9C\xC3\x92\x85\x34\x61\xCB\x0F\xB8\x9B\x4A\x43\x52\xFE\x34\x3A\x7D\xB8\xE9\x29\xDC\x76\xA9\xC8\x30\xF8\x14\x71\x80\xC6\x1E\x36\x48\x74\x22\x41\x5C\x87\x82\xE8\x18\x71\x8B\x41\x89\x44\xE7\x7E\x58\x5B\xA8\xB8\x8D\x13\xE9\xA7\x6C\xC3\x47\xED\xB3\x1A\x9D\x62\xAE\x8D\x82\xEA\x94\x9E\xDD\x59\x10\xC3\xAD\xDD\xE2\x4D\xE3\x31\xD5\xC7\xEC\xE8\xF2\xB0\xFE\x92\x1E\x16\x0A\x1A\xFC\xD9\xF3\xF8\x27\xB6\xC9\xBE\x1D\xB4\x6C\x64\x90\x7F\xF4\xE4\xC4\x5B\xD7\x37\xAE\x42\x0E\xDD\xA4\x1A\x6F\x7C\x88\x54\xC5\x16\x6E\xE1\x7A\x68\x2E\xF8\x3A\xBF\x0D\xA4\x3C\x89\x3B\x78\xA7\x4E\x63\x83\x04\x21\x08\x67\x8D\xF2\x82\x49\xD0\x5B\xFD\xB1\xCD\x0F\x83\x84\xD4\x3E\x20\x85\xF7\x4A\x3D\x2B\x9C\xFD\x2A\x0A\x09\x4D\xEA\x81\xF8\x11\x9C", @@ -52,8 +51,6 @@ redef root_certs += { ["CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL"] = "\x30\x82\x03\xBB\x30\x82\x02\xA3\xA0\x03\x02\x01\x02\x02\x03\x04\x44\xC0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x7E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x50\x4C\x31\x22\x30\x20\x06\x03\x55\x04\x0A\x13\x19\x55\x6E\x69\x7A\x65\x74\x6F\x20\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x69\x65\x73\x20\x53\x2E\x41\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x43\x65\x72\x74\x75\x6D\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x43\x65\x72\x74\x75\x6D\x20\x54\x72\x75\x73\x74\x65\x64\x20\x4E\x65\x74\x77\x6F\x72\x6B\x20\x43\x41\x30\x1E\x17\x0D\x30\x38\x31\x30\x32\x32\x31\x32\x30\x37\x33\x37\x5A\x17\x0D\x32\x39\x31\x32\x33\x31\x31\x32\x30\x37\x33\x37\x5A\x30\x7E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x50\x4C\x31\x22\x30\x20\x06\x03\x55\x04\x0A\x13\x19\x55\x6E\x69\x7A\x65\x74\x6F\x20\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x69\x65\x73\x20\x53\x2E\x41\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x43\x65\x72\x74\x75\x6D\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x43\x65\x72\x74\x75\x6D\x20\x54\x72\x75\x73\x74\x65\x64\x20\x4E\x65\x74\x77\x6F\x72\x6B\x20\x43\x41\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xE3\xFB\x7D\xA3\x72\xBA\xC2\xF0\xC9\x14\x87\xF5\x6B\x01\x4E\xE1\x6E\x40\x07\xBA\x6D\x27\x5D\x7F\xF7\x5B\x2D\xB3\x5A\xC7\x51\x5F\xAB\xA4\x32\xA6\x61\x87\xB6\x6E\x0F\x86\xD2\x30\x02\x97\xF8\xD7\x69\x57\xA1\x18\x39\x5D\x6A\x64\x79\xC6\x01\x59\xAC\x3C\x31\x4A\x38\x7C\xD2\x04\xD2\x4B\x28\xE8\x20\x5F\x3B\x07\xA2\xCC\x4D\x73\xDB\xF3\xAE\x4F\xC7\x56\xD5\x5A\xA7\x96\x89\xFA\xF3\xAB\x68\xD4\x23\x86\x59\x27\xCF\x09\x27\xBC\xAC\x6E\x72\x83\x1C\x30\x72\xDF\xE0\xA2\xE9\xD2\xE1\x74\x75\x19\xBD\x2A\x9E\x7B\x15\x54\x04\x1B\xD7\x43\x39\xAD\x55\x28\xC5\xE2\x1A\xBB\xF4\xC0\xE4\xAE\x38\x49\x33\xCC\x76\x85\x9F\x39\x45\xD2\xA4\x9E\xF2\x12\x8C\x51\xF8\x7C\xE4\x2D\x7F\xF5\xAC\x5F\xEB\x16\x9F\xB1\x2D\xD1\xBA\xCC\x91\x42\x77\x4C\x25\xC9\x90\x38\x6F\xDB\xF0\xCC\xFB\x8E\x1E\x97\x59\x3E\xD5\x60\x4E\xE6\x05\x28\xED\x49\x79\x13\x4B\xBA\x48\xDB\x2F\xF9\x72\xD3\x39\xCA\xFE\x1F\xD8\x34\x72\xF5\xB4\x40\xCF\x31\x01\xC3\xEC\xDE\x11\x2D\x17\x5D\x1F\xB8\x50\xD1\x5E\x19\xA7\x69\xDE\x07\x33\x28\xCA\x50\x95\xF9\xA7\x54\xCB\x54\x86\x50\x45\xA9\xF9\x49\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x08\x76\xCD\xCB\x07\xFF\x24\xF6\xC5\xCD\xED\xBB\x90\xBC\xE2\x84\x37\x46\x75\xF7\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xA6\xA8\xAD\x22\xCE\x01\x3D\xA6\xA3\xFF\x62\xD0\x48\x9D\x8B\x5E\x72\xB0\x78\x44\xE3\xDC\x1C\xAF\x09\xFD\x23\x48\xFA\xBD\x2A\xC4\xB9\x55\x04\xB5\x10\xA3\x8D\x27\xDE\x0B\x82\x63\xD0\xEE\xDE\x0C\x37\x79\x41\x5B\x22\xB2\xB0\x9A\x41\x5C\xA6\x70\xE0\xD4\xD0\x77\xCB\x23\xD3\x00\xE0\x6C\x56\x2F\xE1\x69\x0D\x0D\xD9\xAA\xBF\x21\x81\x50\xD9\x06\xA5\xA8\xFF\x95\x37\xD0\xAA\xFE\xE2\xB3\xF5\x99\x2D\x45\x84\x8A\xE5\x42\x09\xD7\x74\x02\x2F\xF7\x89\xD8\x99\xE9\xBC\x27\xD4\x47\x8D\xBA\x0D\x46\x1C\x77\xCF\x14\xA4\x1C\xB9\xA4\x31\xC4\x9C\x28\x74\x03\x34\xFF\x33\x19\x26\xA5\xE9\x0D\x74\xB7\x3E\x97\xC6\x76\xE8\x27\x96\xA3\x66\xDD\xE1\xAE\xF2\x41\x5B\xCA\x98\x56\x83\x73\x70\xE4\x86\x1A\xD2\x31\x41\xBA\x2F\xBE\x2D\x13\x5A\x76\x6F\x4E\xE8\x4E\x81\x0E\x3F\x5B\x03\x22\xA0\x12\xBE\x66\x58\x11\x4A\xCB\x03\xC4\xB4\x2A\x2A\x2D\x96\x17\xE0\x39\x54\xBC\x48\xD3\x76\x27\x9D\x9A\x2D\x06\xA6\xC9\xEC\x39\xD2\xAB\xDB\x9F\x9A\x0B\x27\x02\x35\x29\xB1\x40\x95\xE7\xF9\xE8\x9C\x55\x88\x19\x46\xD6\xB7\x34\xF5\x7E\xCE\x39\x9A\xD9\x38\xF1\x51\xF7\x4F\x2C", ["CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW"] = "\x30\x82\x03\x7B\x30\x82\x02\x63\xA0\x03\x02\x01\x02\x02\x01\x01\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x5F\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x54\x41\x49\x57\x41\x4E\x2D\x43\x41\x31\x10\x30\x0E\x06\x03\x55\x04\x0B\x0C\x07\x52\x6F\x6F\x74\x20\x43\x41\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x0C\x21\x54\x57\x43\x41\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x30\x38\x30\x38\x32\x38\x30\x37\x32\x34\x33\x33\x5A\x17\x0D\x33\x30\x31\x32\x33\x31\x31\x35\x35\x39\x35\x39\x5A\x30\x5F\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x57\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x0C\x09\x54\x41\x49\x57\x41\x4E\x2D\x43\x41\x31\x10\x30\x0E\x06\x03\x55\x04\x0B\x0C\x07\x52\x6F\x6F\x74\x20\x43\x41\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x0C\x21\x54\x57\x43\x41\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xB0\x7E\x72\xB8\xA4\x03\x94\xE6\xA7\xDE\x09\x38\x91\x4A\x11\x40\x87\xA7\x7C\x59\x64\x14\x7B\xB5\x11\x10\xDD\xFE\xBF\xD5\xC0\xBB\x56\xE2\x85\x25\xF4\x35\x72\x0F\xF8\x53\xD0\x41\xE1\x44\x01\xC2\xB4\x1C\xC3\x31\x42\x16\x47\x85\x33\x22\x76\xB2\x0A\x6F\x0F\xE5\x25\x50\x4F\x85\x86\xBE\xBF\x98\x2E\x10\x67\x1E\xBE\x11\x05\x86\x05\x90\xC4\x59\xD0\x7C\x78\x10\xB0\x80\x5C\xB7\xE1\xC7\x2B\x75\xCB\x7C\x9F\xAE\xB5\xD1\x9D\x23\x37\x63\xA7\xDC\x42\xA2\x2D\x92\x04\x1B\x50\xC1\x7B\xB8\x3E\x1B\xC9\x56\x04\x8B\x2F\x52\x9B\xAD\xA9\x56\xE9\xC1\xFF\xAD\xA9\x58\x87\x30\xB6\x81\xF7\x97\x45\xFC\x19\x57\x3B\x2B\x6F\xE4\x47\xF4\x99\x45\xFE\x1D\xF1\xF8\x97\xA3\x88\x1D\x37\x1C\x5C\x8F\xE0\x76\x25\x9A\x50\xF8\xA0\x54\xFF\x44\x90\x76\x23\xD2\x32\xC6\xC3\xAB\x06\xBF\xFC\xFB\xBF\xF3\xAD\x7D\x92\x62\x02\x5B\x29\xD3\x35\xA3\x93\x9A\x43\x64\x60\x5D\xB2\xFA\x32\xFF\x3B\x04\xAF\x4D\x40\x6A\xF9\xC7\xE3\xEF\x23\xFD\x6B\xCB\xE5\x0F\x8B\x38\x0D\xEE\x0A\xFC\xFE\x0F\x98\x9F\x30\x31\xDD\x6C\x52\x65\xF9\x8B\x81\xBE\x22\xE1\x1C\x58\x03\xBA\x91\x1B\x89\x07\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x6A\x38\x5B\x26\x8D\xDE\x8B\x5A\xF2\x4F\x7A\x54\x83\x19\x18\xE3\x08\x35\xA6\xBA\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x3C\xD5\x77\x3D\xDA\xDF\x89\xBA\x87\x0C\x08\x54\x6A\x20\x50\x92\xBE\xB0\x41\x3D\xB9\x26\x64\x83\x0A\x2F\xE8\x40\xC0\x97\x28\x27\x82\x30\x4A\xC9\x93\xFF\x6A\xE7\xA6\x00\x7F\x89\x42\x9A\xD6\x11\xE5\x53\xCE\x2F\xCC\xF2\xDA\x05\xC4\xFE\xE2\x50\xC4\x3A\x86\x7D\xCC\xDA\x7E\x10\x09\x3B\x92\x35\x2A\x53\xB2\xFE\xEB\x2B\x05\xD9\x6C\x5D\xE6\xD0\xEF\xD3\x6A\x66\x9E\x15\x28\x85\x7A\xE8\x82\x00\xAC\x1E\xA7\x09\x69\x56\x42\xD3\x68\x51\x18\xBE\x54\x9A\xBF\x44\x41\xBA\x49\xBE\x20\xBA\x69\x5C\xEE\xB8\x77\xCD\xCE\x6C\x1F\xAD\x83\x96\x18\x7D\x0E\xB5\x14\x39\x84\xF1\x28\xE9\x2D\xA3\x9E\x7B\x1E\x7A\x72\x5A\x83\xB3\x79\x6F\xEF\xB4\xFC\xD0\x0A\xA5\x58\x4F\x46\xDF\xFB\x6D\x79\x59\xF2\x84\x22\x52\xAE\x0F\xCC\xFB\x7C\x3B\xE7\x6A\xCA\x47\x61\xC3\x7A\xF8\xD3\x92\x04\x1F\xB8\x20\x84\xE1\x36\x54\x16\xC7\x40\xDE\x3B\x8A\x73\xDC\xDF\xC6\x09\x4C\xDF\xEC\xDA\xFF\xD4\x53\x42\xA1\xC9\xF2\x62\x1D\x22\x83\x3C\x97\xC5\xF9\x19\x62\x27\xAC\x65\x22\xD7\xD3\x3C\xC6\xE5\x8E\xB2\x53\xCC\x49\xCE\xBC\x30\xFE\x7B\x0E\x33\x90\xFB\xED\xD2\x14\x91\x1F\x07\xAF", ["OU=Security Communication RootCA2,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x03\x77\x30\x82\x02\x5F\xA0\x03\x02\x01\x02\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x32\x30\x1E\x17\x0D\x30\x39\x30\x35\x32\x39\x30\x35\x30\x30\x33\x39\x5A\x17\x0D\x32\x39\x30\x35\x32\x39\x30\x35\x30\x30\x33\x39\x5A\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x0B\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x32\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xD0\x15\x39\x52\xB1\x52\xB3\xBA\xC5\x59\x82\xC4\x5D\x52\xAE\x3A\x43\x65\x80\x4B\xC7\xF2\x96\xBC\xDB\x36\x97\xD6\xA6\x64\x8C\xA8\x5E\xF0\xE3\x0A\x1C\xF7\xDF\x97\x3D\x4B\xAE\xF6\x5D\xEC\x21\xB5\x41\xAB\xCD\xB9\x7E\x76\x9F\xBE\xF9\x3E\x36\x34\xA0\x3B\xC1\xF6\x31\x11\x45\x74\x93\x3D\x57\x80\xC5\xF9\x89\x99\xCA\xE5\xAB\x6A\xD4\xB5\xDA\x41\x90\x10\xC1\xD6\xD6\x42\x89\xC2\xBF\xF4\x38\x12\x95\x4C\x54\x05\xF7\x36\xE4\x45\x83\x7B\x14\x65\xD6\xDC\x0C\x4D\xD1\xDE\x7E\x0C\xAB\x3B\xC4\x15\xBE\x3A\x56\xA6\x5A\x6F\x76\x69\x52\xA9\x7A\xB9\xC8\xEB\x6A\x9A\x5D\x52\xD0\x2D\x0A\x6B\x35\x16\x09\x10\x84\xD0\x6A\xCA\x3A\x06\x00\x37\x47\xE4\x7E\x57\x4F\x3F\x8B\xEB\x67\xB8\x88\xAA\xC5\xBE\x53\x55\xB2\x91\xC4\x7D\xB9\xB0\x85\x19\x06\x78\x2E\xDB\x61\x1A\xFA\x85\xF5\x4A\x91\xA1\xE7\x16\xD5\x8E\xA2\x39\xDF\x94\xB8\x70\x1F\x28\x3F\x8B\xFC\x40\x5E\x63\x83\x3C\x83\x2A\x1A\x99\x6B\xCF\xDE\x59\x6A\x3B\xFC\x6F\x16\xD7\x1F\xFD\x4A\x10\xEB\x4E\x82\x16\x3A\xAC\x27\x0C\x53\xF1\xAD\xD5\x24\xB0\x6B\x03\x50\xC1\x2D\x3C\x16\xDD\x44\x34\x27\x1A\x75\xFB\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x0A\x85\xA9\x77\x65\x05\x98\x7C\x40\x81\xF8\x0F\x97\x2C\x38\xF1\x0A\xEC\x3C\xCF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x4C\x3A\xA3\x44\xAC\xB9\x45\xB1\xC7\x93\x7E\xC8\x0B\x0A\x42\xDF\x64\xEA\x1C\xEE\x59\x6C\x08\xBA\x89\x5F\x6A\xCA\x4A\x95\x9E\x7A\x8F\x07\xC5\xDA\x45\x72\x82\x71\x0E\x3A\xD2\xCC\x6F\xA7\xB4\xA1\x23\xBB\xF6\x24\x9F\xCB\x17\xFE\x8C\xA6\xCE\xC2\xD2\xDB\xCC\x8D\xFC\x71\xFC\x03\x29\xC1\x6C\x5D\x33\x5F\x64\xB6\x65\x3B\x89\x6F\x18\x76\x78\xF5\xDC\xA2\x48\x1F\x19\x3F\x8E\x93\xEB\xF1\xFA\x17\xEE\xCD\x4E\xE3\x04\x12\x55\xD6\xE5\xE4\xDD\xFB\x3E\x05\x7C\xE2\x1D\x5E\xC6\xA7\xBC\x97\x4F\x68\x3A\xF5\xE9\x2E\x0A\x43\xB6\xAF\x57\x5C\x62\x68\x7C\xB7\xFD\xA3\x8A\x84\xA0\xAC\x62\xBE\x2B\x09\x87\x34\xF0\x6A\x01\xBB\x9B\x29\x56\x3C\xFE\x00\x37\xCF\x23\x6C\xF1\x4E\xAA\xB6\x74\x46\x12\x6C\x91\xEE\x34\xD5\xEC\x9A\x91\xE7\x44\xBE\x90\x31\x72\xD5\x49\x02\xF6\x02\xE5\xF4\x1F\xEB\x7C\xD9\x96\x55\xA9\xFF\xEC\x8A\xF9\x99\x47\xFF\x35\x5A\x02\xAA\x04\xCB\x8A\x5B\x87\x71\x29\x91\xBD\xA4\xB4\x7A\x0D\xBD\x9A\xF5\x57\x23\x00\x07\x21\x17\x3F\x4A\x39\xD1\x05\x49\x0B\xA7\xB6\x37\x81\xA5\x5D\x8C\xAA\x33\x5E\x81\x28\x7C\xA7\x7D\x27\xEB\x00\xAE\x8D\x37", - ["CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES"] = "\x30\x82\x05\x56\x30\x82\x04\x3E\xA0\x03\x02\x01\x02\x02\x10\xEE\x2B\x3D\xEB\xD4\x21\xDE\x14\xA8\x62\xAC\x04\xF3\xDD\xC4\x01\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\xF3\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x45\x53\x31\x3B\x30\x39\x06\x03\x55\x04\x0A\x13\x32\x41\x67\x65\x6E\x63\x69\x61\x20\x43\x61\x74\x61\x6C\x61\x6E\x61\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x28\x4E\x49\x46\x20\x51\x2D\x30\x38\x30\x31\x31\x37\x36\x2D\x49\x29\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x72\x76\x65\x69\x73\x20\x50\x75\x62\x6C\x69\x63\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x28\x63\x29\x30\x33\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x4A\x65\x72\x61\x72\x71\x75\x69\x61\x20\x45\x6E\x74\x69\x74\x61\x74\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x43\x61\x74\x61\x6C\x61\x6E\x65\x73\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x45\x43\x2D\x41\x43\x43\x30\x1E\x17\x0D\x30\x33\x30\x31\x30\x37\x32\x33\x30\x30\x30\x30\x5A\x17\x0D\x33\x31\x30\x31\x30\x37\x32\x32\x35\x39\x35\x39\x5A\x30\x81\xF3\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x45\x53\x31\x3B\x30\x39\x06\x03\x55\x04\x0A\x13\x32\x41\x67\x65\x6E\x63\x69\x61\x20\x43\x61\x74\x61\x6C\x61\x6E\x61\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x28\x4E\x49\x46\x20\x51\x2D\x30\x38\x30\x31\x31\x37\x36\x2D\x49\x29\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x72\x76\x65\x69\x73\x20\x50\x75\x62\x6C\x69\x63\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x28\x63\x29\x30\x33\x31\x35\x30\x33\x06\x03\x55\x04\x0B\x13\x2C\x4A\x65\x72\x61\x72\x71\x75\x69\x61\x20\x45\x6E\x74\x69\x74\x61\x74\x73\x20\x64\x65\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x63\x69\x6F\x20\x43\x61\x74\x61\x6C\x61\x6E\x65\x73\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x45\x43\x2D\x41\x43\x43\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xB3\x22\xC7\x4F\xE2\x97\x42\x95\x88\x47\x83\x40\xF6\x1D\x17\xF3\x83\x73\x24\x1E\x51\xF3\x98\x8A\xC3\x92\xB8\xFF\x40\x90\x05\x70\x87\x60\xC9\x00\xA9\xB5\x94\x65\x19\x22\x15\x17\xC2\x43\x6C\x66\x44\x9A\x0D\x04\x3E\x39\x6F\xA5\x4B\x7A\xAA\x63\xB7\x8A\x44\x9D\xD9\x63\x91\x84\x66\xE0\x28\x0F\xBA\x42\xE3\x6E\x8E\xF7\x14\x27\x93\x69\xEE\x91\x0E\xA3\x5F\x0E\xB1\xEB\x66\xA2\x72\x4F\x12\x13\x86\x65\x7A\x3E\xDB\x4F\x07\xF4\xA7\x09\x60\xDA\x3A\x42\x99\xC7\xB2\x7F\xB3\x16\x95\x1C\xC7\xF9\x34\xB5\x94\x85\xD5\x99\x5E\xA0\x48\xA0\x7E\xE7\x17\x65\xB8\xA2\x75\xB8\x1E\xF3\xE5\x42\x7D\xAF\xED\xF3\x8A\x48\x64\x5D\x82\x14\x93\xD8\xC0\xE4\xFF\xB3\x50\x72\xF2\x76\xF6\xB3\x5D\x42\x50\x79\xD0\x94\x3E\x6B\x0C\x00\xBE\xD8\x6B\x0E\x4E\x2A\xEC\x3E\xD2\xCC\x82\xA2\x18\x65\x33\x13\x77\x9E\x9A\x5D\x1A\x13\xD8\xC3\xDB\x3D\xC8\x97\x7A\xEE\x70\xED\xA7\xE6\x7C\xDB\x71\xCF\x2D\x94\x62\xDF\x6D\xD6\xF5\x38\xBE\x3F\xA5\x85\x0A\x19\xB8\xA8\xD8\x09\x75\x42\x70\xC4\xEA\xEF\xCB\x0E\xC8\x34\xA8\x12\x22\x98\x0C\xB8\x13\x94\xB6\x4B\xEC\xF0\xD0\x90\xE7\x27\x02\x03\x01\x00\x01\xA3\x81\xE3\x30\x81\xE0\x30\x1D\x06\x03\x55\x1D\x11\x04\x16\x30\x14\x81\x12\x65\x63\x5F\x61\x63\x63\x40\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xA0\xC3\x8B\x44\xAA\x37\xA5\x45\xBF\x97\x80\x5A\xD1\xF1\x78\xA2\x9B\xE9\x5D\x8D\x30\x7F\x06\x03\x55\x1D\x20\x04\x78\x30\x76\x30\x74\x06\x0B\x2B\x06\x01\x04\x01\xF5\x78\x01\x03\x01\x0A\x30\x65\x30\x2C\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x01\x16\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x30\x35\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x02\x30\x29\x1A\x27\x56\x65\x67\x65\x75\x20\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x74\x63\x65\x72\x74\x2E\x6E\x65\x74\x2F\x76\x65\x72\x61\x72\x72\x65\x6C\x20\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xA0\x48\x5B\x82\x01\xF6\x4D\x48\xB8\x39\x55\x35\x9C\x80\x7A\x53\x99\xD5\x5A\xFF\xB1\x71\x3B\xCC\x39\x09\x94\x5E\xD6\xDA\xEF\xBE\x01\x5B\x5D\xD3\x1E\xD8\xFD\x7D\x4F\xCD\xA0\x41\xE0\x34\x93\xBF\xCB\xE2\x86\x9C\x37\x92\x90\x56\x1C\xDC\xEB\x29\x05\xE5\xC4\x9E\xC7\x35\xDF\x8A\x0C\xCD\xC5\x21\x43\xE9\xAA\x88\xE5\x35\xC0\x19\x42\x63\x5A\x02\x5E\xA4\x48\x18\x3A\x85\x6F\xDC\x9D\xBC\x3F\x9D\x9C\xC1\x87\xB8\x7A\x61\x08\xE9\x77\x0B\x7F\x70\xAB\x7A\xDD\xD9\x97\x2C\x64\x1E\x85\xBF\xBC\x74\x96\xA1\xC3\x7A\x12\xEC\x0C\x1A\x6E\x83\x0C\x3C\xE8\x72\x46\x9F\xFB\x48\xD5\x5E\x97\xE6\xB1\xA1\xF8\xE4\xEF\x46\x25\x94\x9C\x89\xDB\x69\x38\xBE\xEC\x5C\x0E\x56\xC7\x65\x51\xE5\x50\x88\x88\xBF\x42\xD5\x2B\x3D\xE5\xF9\xBA\x9E\x2E\xB3\xCA\xF4\x73\x92\x02\x0B\xBE\x4C\x66\xEB\x20\xFE\xB9\xCB\xB5\x99\x7F\xE6\xB6\x13\xFA\xCA\x4B\x4D\xD9\xEE\x53\x46\x06\x3B\xC6\x4E\xAD\x93\x5A\x81\x7E\x6C\x2A\x4B\x6A\x05\x45\x8C\xF2\x21\xA4\x31\x90\x87\x6C\x65\x9C\x9D\xA5\x60\x95\x3A\x52\x7F\xF5\xD1\xAB\x08\x6E\xF3\xEE\x5B\xF9\x88\x3D\x7E\xB8\x6F\x6E\x03\xE4\x42", - ["CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR"] = "\x30\x82\x04\x31\x30\x82\x03\x19\xA0\x03\x02\x01\x02\x02\x01\x00\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x81\x95\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52\x31\x44\x30\x42\x06\x03\x55\x04\x0A\x13\x3B\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x2E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x40\x30\x3E\x06\x03\x55\x04\x03\x13\x37\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x52\x6F\x6F\x74\x43\x41\x20\x32\x30\x31\x31\x30\x1E\x17\x0D\x31\x31\x31\x32\x30\x36\x31\x33\x34\x39\x35\x32\x5A\x17\x0D\x33\x31\x31\x32\x30\x31\x31\x33\x34\x39\x35\x32\x5A\x30\x81\x95\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x47\x52\x31\x44\x30\x42\x06\x03\x55\x04\x0A\x13\x3B\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x43\x65\x72\x74\x2E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x40\x30\x3E\x06\x03\x55\x04\x03\x13\x37\x48\x65\x6C\x6C\x65\x6E\x69\x63\x20\x41\x63\x61\x64\x65\x6D\x69\x63\x20\x61\x6E\x64\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x69\x6F\x6E\x73\x20\x52\x6F\x6F\x74\x43\x41\x20\x32\x30\x31\x31\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xA9\x53\x00\xE3\x2E\xA6\xF6\x8E\xFA\x60\xD8\x2D\x95\x3E\xF8\x2C\x2A\x54\x4E\xCD\xB9\x84\x61\x94\x58\x4F\x8F\x3D\x8B\xE4\x43\xF3\x75\x89\x8D\x51\xE4\xC3\x37\xD2\x8A\x88\x4D\x79\x1E\xB7\x12\xDD\x43\x78\x4A\x8A\x92\xE6\xD7\x48\xD5\x0F\xA4\x3A\x29\x44\x35\xB8\x07\xF6\x68\x1D\x55\xCD\x38\x51\xF0\x8C\x24\x31\x85\xAF\x83\xC9\x7D\xE9\x77\xAF\xED\x1A\x7B\x9D\x17\xF9\xB3\x9D\x38\x50\x0F\xA6\x5A\x79\x91\x80\xAF\x37\xAE\xA6\xD3\x31\xFB\xB5\x26\x09\x9D\x3C\x5A\xEF\x51\xC5\x2B\xDF\x96\x5D\xEB\x32\x1E\x02\xDA\x70\x49\xEC\x6E\x0C\xC8\x9A\x37\x8D\xF7\xF1\x36\x60\x4B\x26\x2C\x82\x9E\xD0\x78\xF3\x0D\x0F\x63\xA4\x51\x30\xE1\xF9\x2B\x27\x12\x07\xD8\xEA\xBD\x18\x62\x98\xB0\x59\x37\x7D\xBE\xEE\xF3\x20\x51\x42\x5A\x83\xEF\x93\xBA\x69\x15\xF1\x62\x9D\x9F\x99\x39\x82\xA1\xB7\x74\x2E\x8B\xD4\xC5\x0B\x7B\x2F\xF0\xC8\x0A\xDA\x3D\x79\x0A\x9A\x93\x1C\xA5\x28\x72\x73\x91\x43\x9A\xA7\xD1\x4D\x85\x84\xB9\xA9\x74\x8F\x14\x40\xC7\xDC\xDE\xAC\x41\x64\x6C\xB4\x19\x9B\x02\x63\x6D\x24\x64\x8F\x44\xB2\x25\xEA\xCE\x5D\x74\x0C\x63\x32\x5C\x8D\x87\xE5\x02\x03\x01\x00\x01\xA3\x81\x89\x30\x81\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xA6\x91\x42\xFD\x13\x61\x4A\x23\x9E\x08\xA4\x29\xE5\xD8\x13\x04\x23\xEE\x41\x25\x30\x47\x06\x03\x55\x1D\x1E\x04\x40\x30\x3E\xA0\x3C\x30\x05\x82\x03\x2E\x67\x72\x30\x05\x82\x03\x2E\x65\x75\x30\x06\x82\x04\x2E\x65\x64\x75\x30\x06\x82\x04\x2E\x6F\x72\x67\x30\x05\x81\x03\x2E\x67\x72\x30\x05\x81\x03\x2E\x65\x75\x30\x06\x81\x04\x2E\x65\x64\x75\x30\x06\x81\x04\x2E\x6F\x72\x67\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x1F\xEF\x79\x41\xE1\x7B\x6E\x3F\xB2\x8C\x86\x37\x42\x4A\x4E\x1C\x37\x1E\x8D\x66\xBA\x24\x81\xC9\x4F\x12\x0F\x21\xC0\x03\x97\x86\x25\x6D\x5D\xD3\x22\x29\xA8\x6C\xA2\x0D\xA9\xEB\x3D\x06\x5B\x99\x3A\xC7\xCC\xC3\x9A\x34\x7F\xAB\x0E\xC8\x4E\x1C\xE1\xFA\xE4\xDC\xCD\x0D\xBE\xBF\x24\xFE\x6C\xE7\x6B\xC2\x0D\xC8\x06\x9E\x4E\x8D\x61\x28\xA6\x6A\xFD\xE5\xF6\x62\xEA\x18\x3C\x4E\xA0\x53\x9D\xB2\x3A\x9C\xEB\xA5\x9C\x91\x16\xB6\x4D\x82\xE0\x0C\x05\x48\xA9\x6C\xF5\xCC\xF8\xCB\x9D\x49\xB4\xF0\x02\xA5\xFD\x70\x03\xED\x8A\x21\xA5\xAE\x13\x86\x49\xC3\x33\x73\xBE\x87\x3B\x74\x8B\x17\x45\x26\x4C\x16\x91\x83\xFE\x67\x7D\xCD\x4D\x63\x67\xFA\xF3\x03\x12\x96\x78\x06\x8D\xB1\x67\xED\x8E\x3F\xBE\x9F\x4F\x02\xF5\xB3\x09\x2F\xF3\x4C\x87\xDF\x2A\xCB\x95\x7C\x01\xCC\xAC\x36\x7A\xBF\xA2\x73\x7A\xF7\x8F\xC1\xB5\x9A\xA1\x14\xB2\x8F\x33\x9F\x0D\xEF\x22\xDC\x66\x7B\x84\xBD\x45\x17\x06\x3D\x3C\xCA\xB9\x77\x34\x8F\xCA\xEA\xCF\x3F\x31\x3E\xE3\x88\xE3\x80\x49\x25\xC8\x97\xB5\x9D\x9A\x99\x4D\xB0\x3C\xF8\x4A\x00\x9B\x64\xDD\x9F\x39\x4B\xD1\x27\xD7\xB8", ["CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT"] = "\x30\x82\x05\xBB\x30\x82\x03\xA3\xA0\x03\x02\x01\x02\x02\x08\x57\x0A\x11\x97\x42\xC4\xE3\xCC\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x6B\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x49\x54\x31\x0E\x30\x0C\x06\x03\x55\x04\x07\x0C\x05\x4D\x69\x6C\x61\x6E\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x41\x63\x74\x61\x6C\x69\x73\x20\x53\x2E\x70\x2E\x41\x2E\x2F\x30\x33\x33\x35\x38\x35\x32\x30\x39\x36\x37\x31\x27\x30\x25\x06\x03\x55\x04\x03\x0C\x1E\x41\x63\x74\x61\x6C\x69\x73\x20\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x31\x30\x39\x32\x32\x31\x31\x32\x32\x30\x32\x5A\x17\x0D\x33\x30\x30\x39\x32\x32\x31\x31\x32\x32\x30\x32\x5A\x30\x6B\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x49\x54\x31\x0E\x30\x0C\x06\x03\x55\x04\x07\x0C\x05\x4D\x69\x6C\x61\x6E\x31\x23\x30\x21\x06\x03\x55\x04\x0A\x0C\x1A\x41\x63\x74\x61\x6C\x69\x73\x20\x53\x2E\x70\x2E\x41\x2E\x2F\x30\x33\x33\x35\x38\x35\x32\x30\x39\x36\x37\x31\x27\x30\x25\x06\x03\x55\x04\x03\x0C\x1E\x41\x63\x74\x61\x6C\x69\x73\x20\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA7\xC6\xC4\xA5\x29\xA4\x2C\xEF\xE5\x18\xC5\xB0\x50\xA3\x6F\x51\x3B\x9F\x0A\x5A\xC9\xC2\x48\x38\x0A\xC2\x1C\xA0\x18\x7F\x91\xB5\x87\xB9\x40\x3F\xDD\x1D\x68\x1F\x08\x83\xD5\x2D\x1E\x88\xA0\xF8\x8F\x56\x8F\x6D\x99\x02\x92\x90\x16\xD5\x5F\x08\x6C\x89\xD7\xE1\xAC\xBC\x20\xC2\xB1\xE0\x83\x51\x8A\x69\x4D\x00\x96\x5A\x6F\x2F\xC0\x44\x7E\xA3\x0E\xE4\x91\xCD\x58\xEE\xDC\xFB\xC7\x1E\x45\x47\xDD\x27\xB9\x08\x01\x9F\xA6\x21\x1D\xF5\x41\x2D\x2F\x4C\xFD\x28\xAD\xE0\x8A\xAD\x22\xB4\x56\x65\x8E\x86\x54\x8F\x93\x43\x29\xDE\x39\x46\x78\xA3\x30\x23\xBA\xCD\xF0\x7D\x13\x57\xC0\x5D\xD2\x83\x6B\x48\x4C\xC4\xAB\x9F\x80\x5A\x5B\x3A\xBD\xC9\xA7\x22\x3F\x80\x27\x33\x5B\x0E\xB7\x8A\x0C\x5D\x07\x37\x08\xCB\x6C\xD2\x7A\x47\x22\x44\x35\xC5\xCC\xCC\x2E\x8E\xDD\x2A\xED\xB7\x7D\x66\x0D\x5F\x61\x51\x22\x55\x1B\xE3\x46\xE3\xE3\x3D\xD0\x35\x62\x9A\xDB\xAF\x14\xC8\x5B\xA1\xCC\x89\x1B\xE1\x30\x26\xFC\xA0\x9B\x1F\x81\xA7\x47\x1F\x04\xEB\xA3\x39\x92\x06\x9F\x99\xD3\xBF\xD3\xEA\x4F\x50\x9C\x19\xFE\x96\x87\x1E\x3C\x65\xF6\xA3\x18\x24\x83\x86\x10\xE7\x54\x3E\xA8\x3A\x76\x24\x4F\x81\x21\xC5\xE3\x0F\x02\xF8\x93\x94\x47\x20\xBB\xFE\xD4\x0E\xD3\x68\xB9\xDD\xC4\x7A\x84\x82\xE3\x53\x54\x79\xDD\xDB\x9C\xD2\xF2\x07\x9B\x2E\xB6\xBC\x3E\xED\x85\x6D\xEF\x25\x11\xF2\x97\x1A\x42\x61\xF7\x4A\x97\xE8\x8B\xB1\x10\x07\xFA\x65\x81\xB2\xA2\x39\xCF\xF7\x3C\xFF\x18\xFB\xC6\xF1\x5A\x8B\x59\xE2\x02\xAC\x7B\x92\xD0\x4E\x14\x4F\x59\x45\xF6\x0C\x5E\x28\x5F\xB0\xE8\x3F\x45\xCF\xCF\xAF\x9B\x6F\xFB\x84\xD3\x77\x5A\x95\x6F\xAC\x94\x84\x9E\xEE\xBC\xC0\x4A\x8F\x4A\x93\xF8\x44\x21\xE2\x31\x45\x61\x50\x4E\x10\xD8\xE3\x35\x7C\x4C\x19\xB4\xDE\x05\xBF\xA3\x06\x9F\xC8\xB5\xCD\xE4\x1F\xD7\x17\x06\x0D\x7A\x95\x74\x55\x0D\x68\x1A\xFC\x10\x1B\x62\x64\x9D\x6D\xE0\x95\xA0\xC3\x94\x07\x57\x0D\x14\xE6\xBD\x05\xFB\xB8\x9F\xE6\xDF\x8B\xE2\xC6\xE7\x7E\x96\xF6\x53\xC5\x80\x34\x50\x28\x58\xF0\x12\x50\x71\x17\x30\xBA\xE6\x78\x63\xBC\xF4\xB2\xAD\x9B\x2B\xB2\xFE\xE1\x39\x8C\x5E\xBA\x0B\x20\x94\xDE\x7B\x83\xB8\xFF\xE3\x56\x8D\xB7\x11\xE9\x3B\x8C\xF2\xB1\xC1\x5D\x9D\xA4\x0B\x4C\x2B\xD9\xB2\x18\xF5\xB5\x9F\x4B\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x52\xD8\x88\x3A\xC8\x9F\x78\x66\xED\x89\xF3\x7B\x38\x70\x94\xC9\x02\x02\x36\xD0\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x52\xD8\x88\x3A\xC8\x9F\x78\x66\xED\x89\xF3\x7B\x38\x70\x94\xC9\x02\x02\x36\xD0\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x0B\x7B\x72\x87\xC0\x60\xA6\x49\x4C\x88\x58\xE6\x1D\x88\xF7\x14\x64\x48\xA6\xD8\x58\x0A\x0E\x4F\x13\x35\xDF\x35\x1D\xD4\xED\x06\x31\xC8\x81\x3E\x6A\xD5\xDD\x3B\x1A\x32\xEE\x90\x3D\x11\xD2\x2E\xF4\x8E\xC3\x63\x2E\x23\x66\xB0\x67\xBE\x6F\xB6\xC0\x13\x39\x60\xAA\xA2\x34\x25\x93\x75\x52\xDE\xA7\x9D\xAD\x0E\x87\x89\x52\x71\x6A\x16\x3C\x19\x1D\x83\xF8\x9A\x29\x65\xBE\xF4\x3F\x9A\xD9\xF0\xF3\x5A\x87\x21\x71\x80\x4D\xCB\xE0\x38\x9B\x3F\xBB\xFA\xE0\x30\x4D\xCF\x86\xD3\x65\x10\x19\x18\xD1\x97\x02\xB1\x2B\x72\x42\x68\xAC\xA0\xBD\x4E\x5A\xDA\x18\xBF\x6B\x98\x81\xD0\xFD\x9A\xBE\x5E\x15\x48\xCD\x11\x15\xB9\xC0\x29\x5C\xB4\xE8\x88\xF7\x3E\x36\xAE\xB7\x62\xFD\x1E\x62\xDE\x70\x78\x10\x1C\x48\x5B\xDA\xBC\xA4\x38\xBA\x67\xED\x55\x3E\x5E\x57\xDF\xD4\x03\x40\x4C\x81\xA4\xD2\x4F\x63\xA7\x09\x42\x09\x14\xFC\x00\xA9\xC2\x80\x73\x4F\x2E\xC0\x40\xD9\x11\x7B\x48\xEA\x7A\x02\xC0\xD3\xEB\x28\x01\x26\x58\x74\xC1\xC0\x73\x22\x6D\x93\x95\xFD\x39\x7D\xBB\x2A\xE3\xF6\x82\xE3\x2C\x97\x5F\x4E\x1F\x91\x94\xFA\xFE\x2C\xA3\xD8\x76\x1A\xB8\x4D\xB2\x38\x4F\x9B\xFA\x1D\x48\x60\x79\x26\xE2\xF3\xFD\xA9\xD0\x9A\xE8\x70\x8F\x49\x7A\xD6\xE5\xBD\x0A\x0E\xDB\x2D\xF3\x8D\xBF\xEB\xE3\xA4\x7D\xCB\xC7\x95\x71\xE8\xDA\xA3\x7C\xC5\xC2\xF8\x74\x92\x04\x1B\x86\xAC\xA4\x22\x53\x40\xB6\xAC\xFE\x4C\x76\xCF\xFB\x94\x32\xC0\x35\x9F\x76\x3F\x6E\xE5\x90\x6E\xA0\xA6\x26\xA2\xB8\x2C\xBE\xD1\x2B\x85\xFD\xA7\x68\xC8\xBA\x01\x2B\xB1\x6C\x74\x1D\xB8\x73\x95\xE7\xEE\xB7\xC7\x25\xF0\x00\x4C\x00\xB2\x7E\xB6\x0B\x8B\x1C\xF3\xC0\x50\x9E\x25\xB9\xE0\x08\xDE\x36\x66\xFF\x37\xA5\xD1\xBB\x54\x64\x2C\xC9\x27\xB5\x4B\x92\x7E\x65\xFF\xD3\x2D\xE1\xB9\x4E\xBC\x7F\xA4\x41\x21\x90\x41\x77\xA6\x39\x1F\xEA\x9E\xE3\x9F\xD0\x66\x6F\x05\xEC\xAA\x76\x7E\xBF\x6B\x16\xA0\xEB\xB5\xC7\xFC\x92\x54\x2F\x2B\x11\x27\x25\x37\x78\x4C\x51\x6A\xB0\xF3\xCC\x58\x5D\x14\xF1\x6A\x48\x15\xFF\xC2\x07\xB6\xB1\x8D\x0F\x8E\x5C\x50\x46\xB3\x3D\xBF\x01\x98\x4F\xB2\x59\x54\x47\x3E\x34\x7B\x78\x6D\x56\x93\x2E\x73\xEA\x66\x28\x78\xCD\x1D\x14\xBF\xA0\x8F\x2F\x2E\xB8\x2E\x8E\xF2\x14\x8A\xCC\xE9\xB5\x7C\xFB\x6C\x9D\x0C\xA5\xE1\x96", ["CN=Buypass Class 2 Root CA,O=Buypass AS-983163327,C=NO"] = "\x30\x82\x05\x59\x30\x82\x03\x41\xA0\x03\x02\x01\x02\x02\x01\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x32\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x30\x32\x36\x30\x38\x33\x38\x30\x33\x5A\x17\x0D\x34\x30\x31\x30\x32\x36\x30\x38\x33\x38\x30\x33\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x32\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xD7\xC7\x5E\xF7\xC1\x07\xD4\x77\xFB\x43\x21\xF4\xF4\xF5\x69\xE4\xEE\x32\x01\xDB\xA3\x86\x1F\xE4\x59\x0D\xBA\xE7\x75\x83\x52\xEB\xEA\x1C\x61\x15\x48\xBB\x1D\x07\xCA\x8C\xAE\xB0\xDC\x96\x9D\xEA\xC3\x60\x92\x86\x82\x28\x73\x9C\x56\x06\xFF\x4B\x64\xF0\x0C\x2A\x37\x49\xB5\xE5\xCF\x0C\x7C\xEE\xF1\x4A\xBB\x73\x30\x65\xF3\xD5\x2F\x83\xB6\x7E\xE3\xE7\xF5\x9E\xAB\x60\xF9\xD3\xF1\x9D\x92\x74\x8A\xE4\x1C\x96\xAC\x5B\x80\xE9\xB5\xF4\x31\x87\xA3\x51\xFC\xC7\x7E\xA1\x6F\x8E\x53\x77\xD4\x97\xC1\x55\x33\x92\x3E\x18\x2F\x75\xD4\xAD\x86\x49\xCB\x95\xAF\x54\x06\x6C\xD8\x06\x13\x8D\x5B\xFF\xE1\x26\x19\x59\xC0\x24\xBA\x81\x71\x79\x90\x44\x50\x68\x24\x94\x5F\xB8\xB3\x11\xF1\x29\x41\x61\xA3\x41\xCB\x23\x36\xD5\xC1\xF1\x32\x50\x10\x4E\x7F\xF4\x86\x93\xEC\x84\xD3\x8E\xBC\x4B\xBF\x5C\x01\x4E\x07\x3D\xDC\x14\x8A\x94\x0A\xA4\xEA\x73\xFB\x0B\x51\xE8\x13\x07\x18\xFA\x0E\xF1\x2B\xD1\x54\x15\x7D\x3C\xE1\xF7\xB4\x19\x42\x67\x62\x5E\x77\xE0\xA2\x55\xEC\xB6\xD9\x69\x17\xD5\x3A\xAF\x44\xED\x4A\xC5\x9E\xE4\x7A\x27\x7C\xE5\x75\xD7\xAA\xCB\x25\xE7\xDF\x6B\x0A\xDB\x0F\x4D\x93\x4E\xA8\xA0\xCD\x7B\x2E\xF2\x59\x01\x6A\xB7\x0D\xB8\x07\x81\x7E\x8B\x38\x1B\x38\xE6\x0A\x57\x99\x3D\xEE\x21\xE8\xA3\xF5\x0C\x16\xDD\x8B\xEC\x34\x8E\x9C\x2A\x1C\x00\x15\x17\x8D\x68\x83\xD2\x70\x9F\x18\x08\xCD\x11\x68\xD5\xC9\x6B\x52\xCD\xC4\x46\x8F\xDC\xB5\xF3\xD8\x57\x73\x1E\xE9\x94\x39\x04\xBF\xD3\xDE\x38\xDE\xB4\x53\xEC\x69\x1C\xA2\x7E\xC4\x8F\xE4\x1B\x70\xAD\xF2\xA2\xF9\xFB\xF7\x16\x64\x66\x69\x9F\x49\x51\xA2\xE2\x15\x18\x67\x06\x4A\x7F\xD5\x6C\xB5\x4D\xB3\x33\xE0\x61\xEB\x5D\xBE\xE9\x98\x0F\x32\xD7\x1D\x4B\x3C\x2E\x5A\x01\x52\x91\x09\xF2\xDF\xEA\x8D\xD8\x06\x40\x63\xAA\x11\xE4\xFE\xC3\x37\x9E\x14\x52\x3F\xF4\xE2\xCC\xF2\x61\x93\xD1\xFD\x67\x6B\xD7\x52\xAE\xBF\x68\xAB\x40\x43\xA0\x57\x35\x53\x78\xF0\x53\xF8\x61\x42\x07\x64\xC6\xD7\x6F\x9B\x4C\x38\x0D\x63\xAC\x62\xAF\x36\x8B\xA2\x73\x0A\x0D\xF5\x21\xBD\x74\xAA\x4D\xEA\x72\x03\x49\xDB\xC7\x5F\x1D\x62\x63\xC7\xFD\xDD\x91\xEC\x33\xEE\xF5\x6D\xB4\x6E\x30\x68\xDE\xC8\xD6\x26\xB0\x75\x5E\x7B\xB4\x07\x20\x98\xA1\x76\x32\xB8\x4D\x6C\x4F\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xC9\x80\x77\xE0\x62\x92\x82\xF5\x46\x9C\xF3\xBA\xF7\x4C\xC3\xDE\xB8\xA3\xAD\x39\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x53\x5F\x21\xF5\xBA\xB0\x3A\x52\x39\x2C\x92\xB0\x6C\x00\xC9\xEF\xCE\x20\xEF\x06\xF2\x96\x9E\xE9\xA4\x74\x7F\x7A\x16\xFC\xB7\xF5\xB6\xFB\x15\x1B\x3F\xAB\xA6\xC0\x72\x5D\x10\xB1\x71\xEE\xBC\x4F\xE3\xAD\xAC\x03\x6D\x2E\x71\x2E\xAF\xC4\xE3\xAD\xA3\xBD\x0C\x11\xA7\xB4\xFF\x4A\xB2\x7B\x10\x10\x1F\xA7\x57\x41\xB2\xC0\xAE\xF4\x2C\x59\xD6\x47\x10\x88\xF3\x21\x51\x29\x30\xCA\x60\x86\xAF\x46\xAB\x1D\xED\x3A\x5B\xB0\x94\xDE\x44\xE3\x41\x08\xA2\xC1\xEC\x1D\xD6\xFD\x4F\xB6\xD6\x47\xD0\x14\x0B\xCA\xE6\xCA\xB5\x7B\x77\x7E\x41\x1F\x5E\x83\xC7\xB6\x8C\x39\x96\xB0\x3F\x96\x81\x41\x6F\x60\x90\xE2\xE8\xF9\xFB\x22\x71\xD9\x7D\xB3\x3D\x46\xBF\xB4\x84\xAF\x90\x1C\x0F\x8F\x12\x6A\xAF\xEF\xEE\x1E\x7A\xAE\x02\x4A\x8A\x17\x2B\x76\xFE\xAC\x54\x89\x24\x2C\x4F\x3F\xB6\xB2\xA7\x4E\x8C\xA8\x91\x97\xFB\x29\xC6\x7B\x5C\x2D\xB9\xCB\x66\xB6\xB7\xA8\x5B\x12\x51\x85\xB5\x09\x7E\x62\x78\x70\xFE\xA9\x6A\x60\xB6\x1D\x0E\x79\x0C\xFD\xCA\xEA\x24\x80\x72\xC3\x97\x3F\xF2\x77\xAB\x43\x22\x0A\xC7\xEB\xB6\x0C\x84\x82\x2C\x80\x6B\x41\x8A\x08\xC0\xEB\xA5\x6B\xDF\x99\x12\xCB\x8A\xD5\x5E\x80\x0C\x91\xE0\x26\x08\x36\x48\xC5\xFA\x38\x11\x35\xFF\x25\x83\x2D\xF2\x7A\xBF\xDA\xFD\x8E\xFE\xA5\xCB\x45\x2C\x1F\xC4\x88\x53\xAE\x77\x0E\xD9\x9A\x76\xC5\x8E\x2C\x1D\xA3\xBA\xD5\xEC\x32\xAE\xC0\xAA\xAC\xF7\xD1\x7A\x4D\xEB\xD4\x07\xE2\x48\xF7\x22\x8E\xB0\xA4\x9F\x6A\xCE\x8E\xB2\xB2\x60\xF4\xA3\x22\xD0\x23\xEB\x94\x5A\x7A\x69\xDD\x0F\xBF\x40\x57\xAC\x6B\x59\x50\xD9\xA3\x99\xE1\x6E\xFE\x8D\x01\x79\x27\x23\x15\xDE\x92\x9D\x7B\x09\x4D\x5A\xE7\x4B\x48\x30\x5A\x18\xE6\x0A\x6D\xE6\x8F\xE0\xD2\xBB\xE6\xDF\x7C\x6E\x21\x82\xC1\x68\x39\x4D\xB4\x98\x58\x66\x62\xCC\x4A\x90\x5E\xC3\xFA\x27\x04\xB1\x79\x15\x74\x99\xCC\xBE\xAD\x20\xDE\x26\x60\x1C\xEB\x56\x51\xA6\xA3\xEA\xE4\xA3\x3F\xA7\xFF\x61\xDC\xF1\x5A\x4D\x6C\x32\x23\x43\xEE\xAC\xA8\xEE\xEE\x4A\x12\x09\x3C\x5D\x71\xC2\xBE\x79\xFA\xC2\x87\x68\x1D\x0B\xFD\x5C\x69\xCC\x06\xD0\x9A\x7D\x54\x99\x2A\xC9\x39\x1A\x19\xAF\x4B\x2A\x43\xF3\x63\x5D\x5A\x58\xE2\x2F\xE3\x1D\xE4\xA9\xD6\xD0\x0A\xD0\x9E\xBF\xD7\x81\x09\xF1\xC9\xC7\x26\x0D\xAC\x98\x16\x56\xA0", ["CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO"] = "\x30\x82\x05\x59\x30\x82\x03\x41\xA0\x03\x02\x01\x02\x02\x01\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x33\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x30\x32\x36\x30\x38\x32\x38\x35\x38\x5A\x17\x0D\x34\x30\x31\x30\x32\x36\x30\x38\x32\x38\x35\x38\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4F\x31\x1D\x30\x1B\x06\x03\x55\x04\x0A\x0C\x14\x42\x75\x79\x70\x61\x73\x73\x20\x41\x53\x2D\x39\x38\x33\x31\x36\x33\x33\x32\x37\x31\x20\x30\x1E\x06\x03\x55\x04\x03\x0C\x17\x42\x75\x79\x70\x61\x73\x73\x20\x43\x6C\x61\x73\x73\x20\x33\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA5\xDA\x0A\x95\x16\x50\xE3\x95\xF2\x5E\x9D\x76\x31\x06\x32\x7A\x9B\xF1\x10\x76\xB8\x00\x9A\xB5\x52\x36\xCD\x24\x47\xB0\x9F\x18\x64\xBC\x9A\xF6\xFA\xD5\x79\xD8\x90\x62\x4C\x22\x2F\xDE\x38\x3D\xD6\xE0\xA8\xE9\x1C\x2C\xDB\x78\x11\xE9\x8E\x68\x51\x15\x72\xC7\xF3\x33\x87\xE4\xA0\x5D\x0B\x5C\xE0\x57\x07\x2A\x30\xF5\xCD\xC4\x37\x77\x28\x4D\x18\x91\xE6\xBF\xD5\x52\xFD\x71\x2D\x70\x3E\xE7\xC6\xC4\x8A\xE3\xF0\x28\x0B\xF4\x76\x98\xA1\x8B\x87\x55\xB2\x3A\x13\xFC\xB7\x3E\x27\x37\x8E\x22\xE3\xA8\x4F\x2A\xEF\x60\xBB\x3D\xB7\x39\xC3\x0E\x01\x47\x99\x5D\x12\x4F\xDB\x43\xFA\x57\xA1\xED\xF9\x9D\xBE\x11\x47\x26\x5B\x13\x98\xAB\x5D\x16\x8A\xB0\x37\x1C\x57\x9D\x45\xFF\x88\x96\x36\xBF\xBB\xCA\x07\x7B\x6F\x87\x63\xD7\xD0\x32\x6A\xD6\x5D\x6C\x0C\xF1\xB3\x6E\x39\xE2\x6B\x31\x2E\x39\x00\x27\x14\xDE\x38\xC0\xEC\x19\x66\x86\x12\xE8\x9D\x72\x16\x13\x64\x52\xC7\xA9\x37\x1C\xFD\x82\x30\xED\x84\x18\x1D\xF4\xAE\x5C\xFF\x70\x13\x00\xEB\xB1\xF5\x33\x7A\x4B\xD6\x55\xF8\x05\x8D\x4B\x69\xB0\xF5\xB3\x28\x36\x5C\x14\xC4\x51\x73\x4D\x6B\x0B\xF1\x34\x07\xDB\x17\x39\xD7\xDC\x28\x7B\x6B\xF5\x9F\xF3\x2E\xC1\x4F\x17\x2A\x10\xF3\xCC\xCA\xE8\xEB\xFD\x6B\xAB\x2E\x9A\x9F\x2D\x82\x6E\x04\xD4\x52\x01\x93\x2D\x3D\x86\xFC\x7E\xFC\xDF\xEF\x42\x1D\xA6\x6B\xEF\xB9\x20\xC6\xF7\xBD\xA0\xA7\x95\xFD\xA7\xE6\x89\x24\xD8\xCC\x8C\x34\x6C\xE2\x23\x2F\xD9\x12\x1A\x21\xB9\x55\x91\x6F\x0B\x91\x79\x19\x0C\xAD\x40\x88\x0B\x70\xE2\x7A\xD2\x0E\xD8\x68\x48\xBB\x82\x13\x39\x10\x58\xE9\xD8\x2A\x07\xC6\x12\xDB\x58\xDB\xD2\x3B\x55\x10\x47\x05\x15\x67\x62\x7E\x18\x63\xA6\x46\x3F\x09\x0E\x54\x32\x5E\xBF\x0D\x62\x7A\x27\xEF\x80\xE8\xDB\xD9\x4B\x06\x5A\x37\x5A\x25\xD0\x08\x12\x77\xD4\x6F\x09\x50\x97\x3D\xC8\x1D\xC3\xDF\x8C\x45\x30\x56\xC6\xD3\x64\xAB\x66\xF3\xC0\x5E\x96\x9C\xC3\xC4\xEF\xC3\x7C\x6B\x8B\x3A\x79\x7F\xB3\x49\xCF\x3D\xE2\x89\x9F\xA0\x30\x4B\x85\xB9\x9C\x94\x24\x79\x8F\x7D\x6B\xA9\x45\x68\x0F\x2B\xD0\xF1\xDA\x1C\xCB\x69\xB8\xCA\x49\x62\x6D\xC8\xD0\x63\x62\xDD\x60\x0F\x58\xAA\x8F\xA1\xBC\x05\xA5\x66\xA2\xCF\x1B\x76\xB2\x84\x64\xB1\x4C\x39\x52\xC0\x30\xBA\xF0\x8C\x4B\x02\xB0\xB6\xB7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x47\xB8\xCD\xFF\xE5\x6F\xEE\xF8\xB2\xEC\x2F\x4E\x0E\xF9\x25\xB0\x8E\x3C\x6B\xC3\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x00\x20\x23\x41\x35\x04\x90\xC2\x40\x62\x60\xEF\xE2\x35\x4C\xD7\x3F\xAC\xE2\x34\x90\xB8\xA1\x6F\x76\xFA\x16\x16\xA4\x48\x37\x2C\xE9\x90\xC2\xF2\x3C\xF8\x0A\x9F\xD8\x81\xE5\xBB\x5B\xDA\x25\x2C\xA4\xA7\x55\x71\x24\x32\xF6\xC8\x0B\xF2\xBC\x6A\xF8\x93\xAC\xB2\x07\xC2\x5F\x9F\xDB\xCC\xC8\x8A\xAA\xBE\x6A\x6F\xE1\x49\x10\xCC\x31\xD7\x80\xBB\xBB\xC8\xD8\xA2\x0E\x64\x57\xEA\xA2\xF5\xC2\xA9\x31\x15\xD2\x20\x6A\xEC\xFC\x22\x01\x28\xCF\x86\xB8\x80\x1E\xA9\xCC\x11\xA5\x3C\xF2\x16\xB3\x47\x9D\xFC\xD2\x80\x21\xC4\xCB\xD0\x47\x70\x41\xA1\xCA\x83\x19\x08\x2C\x6D\xF2\x5D\x77\x9C\x8A\x14\x13\xD4\x36\x1C\x92\xF0\xE5\x06\x37\xDC\xA6\xE6\x90\x9B\x38\x8F\x5C\x6B\x1B\x46\x86\x43\x42\x5F\x3E\x01\x07\x53\x54\x5D\x65\x7D\xF7\x8A\x73\xA1\x9A\x54\x5A\x1F\x29\x43\x14\x27\xC2\x85\x0F\xB5\x88\x7B\x1A\x3B\x94\xB7\x1D\x60\xA7\xB5\x9C\xE7\x29\x69\x57\x5A\x9B\x93\x7A\x43\x30\x1B\x03\xD7\x62\xC8\x40\xA6\xAA\xFC\x64\xE4\x4A\xD7\x91\x53\x01\xA8\x20\x88\x6E\x9C\x5F\x44\xB9\xCB\x60\x81\x34\xEC\x6F\xD3\x7D\xDA\x48\x5F\xEB\xB4\x90\xBC\x2D\xA9\x1C\x0B\xAC\x1C\xD5\xA2\x68\x20\x80\x04\xD6\xFC\xB1\x8F\x2F\xBB\x4A\x31\x0D\x4A\x86\x1C\xEB\xE2\x36\x29\x26\xF5\xDA\xD8\xC4\xF2\x75\x61\xCF\x7E\xAE\x76\x63\x4A\x7A\x40\x65\x93\x87\xF8\x1E\x80\x8C\x86\xE5\x86\xD6\x8F\x0E\xFC\x53\x2C\x60\xE8\x16\x61\x1A\xA2\x3E\x43\x7B\xCD\x39\x60\x54\x6A\xF5\xF2\x89\x26\x01\x68\x83\x48\xA2\x33\xE8\xC9\x04\x91\xB2\x11\x34\x11\x3E\xEA\xD0\x43\x19\x1F\x03\x93\x90\x0C\xFF\x51\x3D\x57\xF4\x41\x6E\xE1\xCB\xA0\xBE\xEB\xC9\x63\xCD\x6D\xCC\xE4\xF8\x36\xAA\x68\x9D\xED\xBD\x5D\x97\x70\x44\x0D\xB6\x0E\x35\xDC\xE1\x0C\x5D\xBB\xA0\x51\x94\xCB\x7E\x16\xEB\x11\x2F\xA3\x92\x45\xC8\x4C\x71\xD9\xBC\xC9\x99\x52\x57\x46\x2F\x50\xCF\xBD\x35\x69\xF4\x3D\x15\xCE\x06\xA5\x2C\x0F\x3E\xF6\x81\xBA\x94\xBB\xC3\xBB\xBF\x65\x78\xD2\x86\x79\xFF\x49\x3B\x1A\x83\x0C\xF0\xDE\x78\xEC\xC8\xF2\x4D\x4C\x1A\xDE\x82\x29\xF8\xC1\x5A\xDA\xED\xEE\xE6\x27\x5E\xE8\x45\xD0\x9D\x1C\x51\xA8\x68\xAB\x44\xE3\xD0\x8B\x6A\xE3\xF8\x3B\xBB\xDC\x4D\xD7\x64\xF2\x51\xBE\xE6\xAA\xAB\x5A\xE9\x31\xEE\x06\xBC\x73\xBF\x13\x62\x0A\x9F\xC7\xB9\x97", @@ -79,7 +76,6 @@ redef root_certs += { ["CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US"] = "\x30\x82\x05\xDE\x30\x82\x03\xC6\xA0\x03\x02\x01\x02\x02\x10\x01\xFD\x6D\x30\xFC\xA3\xCA\x51\xA8\x1B\xBC\x64\x0E\x35\x03\x2D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x52\x53\x41\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x31\x30\x30\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x52\x53\x41\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\x80\x12\x65\x17\x36\x0E\xC3\xDB\x08\xB3\xD0\xAC\x57\x0D\x76\xED\xCD\x27\xD3\x4C\xAD\x50\x83\x61\xE2\xAA\x20\x4D\x09\x2D\x64\x09\xDC\xCE\x89\x9F\xCC\x3D\xA9\xEC\xF6\xCF\xC1\xDC\xF1\xD3\xB1\xD6\x7B\x37\x28\x11\x2B\x47\xDA\x39\xC6\xBC\x3A\x19\xB4\x5F\xA6\xBD\x7D\x9D\xA3\x63\x42\xB6\x76\xF2\xA9\x3B\x2B\x91\xF8\xE2\x6F\xD0\xEC\x16\x20\x90\x09\x3E\xE2\xE8\x74\xC9\x18\xB4\x91\xD4\x62\x64\xDB\x7F\xA3\x06\xF1\x88\x18\x6A\x90\x22\x3C\xBC\xFE\x13\xF0\x87\x14\x7B\xF6\xE4\x1F\x8E\xD4\xE4\x51\xC6\x11\x67\x46\x08\x51\xCB\x86\x14\x54\x3F\xBC\x33\xFE\x7E\x6C\x9C\xFF\x16\x9D\x18\xBD\x51\x8E\x35\xA6\xA7\x66\xC8\x72\x67\xDB\x21\x66\xB1\xD4\x9B\x78\x03\xC0\x50\x3A\xE8\xCC\xF0\xDC\xBC\x9E\x4C\xFE\xAF\x05\x96\x35\x1F\x57\x5A\xB7\xFF\xCE\xF9\x3D\xB7\x2C\xB6\xF6\x54\xDD\xC8\xE7\x12\x3A\x4D\xAE\x4C\x8A\xB7\x5C\x9A\xB4\xB7\x20\x3D\xCA\x7F\x22\x34\xAE\x7E\x3B\x68\x66\x01\x44\xE7\x01\x4E\x46\x53\x9B\x33\x60\xF7\x94\xBE\x53\x37\x90\x73\x43\xF3\x32\xC3\x53\xEF\xDB\xAA\xFE\x74\x4E\x69\xC7\x6B\x8C\x60\x93\xDE\xC4\xC7\x0C\xDF\xE1\x32\xAE\xCC\x93\x3B\x51\x78\x95\x67\x8B\xEE\x3D\x56\xFE\x0C\xD0\x69\x0F\x1B\x0F\xF3\x25\x26\x6B\x33\x6D\xF7\x6E\x47\xFA\x73\x43\xE5\x7E\x0E\xA5\x66\xB1\x29\x7C\x32\x84\x63\x55\x89\xC4\x0D\xC1\x93\x54\x30\x19\x13\xAC\xD3\x7D\x37\xA7\xEB\x5D\x3A\x6C\x35\x5C\xDB\x41\xD7\x12\xDA\xA9\x49\x0B\xDF\xD8\x80\x8A\x09\x93\x62\x8E\xB5\x66\xCF\x25\x88\xCD\x84\xB8\xB1\x3F\xA4\x39\x0F\xD9\x02\x9E\xEB\x12\x4C\x95\x7C\xF3\x6B\x05\xA9\x5E\x16\x83\xCC\xB8\x67\xE2\xE8\x13\x9D\xCC\x5B\x82\xD3\x4C\xB3\xED\x5B\xFF\xDE\xE5\x73\xAC\x23\x3B\x2D\x00\xBF\x35\x55\x74\x09\x49\xD8\x49\x58\x1A\x7F\x92\x36\xE6\x51\x92\x0E\xF3\x26\x7D\x1C\x4D\x17\xBC\xC9\xEC\x43\x26\xD0\xBF\x41\x5F\x40\xA9\x44\x44\xF4\x99\xE7\x57\x87\x9E\x50\x1F\x57\x54\xA8\x3E\xFD\x74\x63\x2F\xB1\x50\x65\x09\xE6\x58\x42\x2E\x43\x1A\x4C\xB4\xF0\x25\x47\x59\xFA\x04\x1E\x93\xD4\x26\x46\x4A\x50\x81\xB2\xDE\xBE\x78\xB7\xFC\x67\x15\xE1\xC9\x57\x84\x1E\x0F\x63\xD6\xE9\x62\xBA\xD6\x5F\x55\x2E\xEA\x5C\xC6\x28\x08\x04\x25\x39\xB8\x0E\x2B\xA9\xF2\x4C\x97\x1C\x07\x3F\x0D\x52\xF5\xED\xEF\x2F\x82\x0F\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x53\x79\xBF\x5A\xAA\x2B\x4A\xCF\x54\x80\xE1\xD8\x9B\xC0\x9D\xF2\xB2\x03\x66\xCB\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\x5C\xD4\x7C\x0D\xCF\xF7\x01\x7D\x41\x99\x65\x0C\x73\xC5\x52\x9F\xCB\xF8\xCF\x99\x06\x7F\x1B\xDA\x43\x15\x9F\x9E\x02\x55\x57\x96\x14\xF1\x52\x3C\x27\x87\x94\x28\xED\x1F\x3A\x01\x37\xA2\x76\xFC\x53\x50\xC0\x84\x9B\xC6\x6B\x4E\xBA\x8C\x21\x4F\xA2\x8E\x55\x62\x91\xF3\x69\x15\xD8\xBC\x88\xE3\xC4\xAA\x0B\xFD\xEF\xA8\xE9\x4B\x55\x2A\x06\x20\x6D\x55\x78\x29\x19\xEE\x5F\x30\x5C\x4B\x24\x11\x55\xFF\x24\x9A\x6E\x5E\x2A\x2B\xEE\x0B\x4D\x9F\x7F\xF7\x01\x38\x94\x14\x95\x43\x07\x09\xFB\x60\xA9\xEE\x1C\xAB\x12\x8C\xA0\x9A\x5E\xA7\x98\x6A\x59\x6D\x8B\x3F\x08\xFB\xC8\xD1\x45\xAF\x18\x15\x64\x90\x12\x0F\x73\x28\x2E\xC5\xE2\x24\x4E\xFC\x58\xEC\xF0\xF4\x45\xFE\x22\xB3\xEB\x2F\x8E\xD2\xD9\x45\x61\x05\xC1\x97\x6F\xA8\x76\x72\x8F\x8B\x8C\x36\xAF\xBF\x0D\x05\xCE\x71\x8D\xE6\xA6\x6F\x1F\x6C\xA6\x71\x62\xC5\xD8\xD0\x83\x72\x0C\xF1\x67\x11\x89\x0C\x9C\x13\x4C\x72\x34\xDF\xBC\xD5\x71\xDF\xAA\x71\xDD\xE1\xB9\x6C\x8C\x3C\x12\x5D\x65\xDA\xBD\x57\x12\xB6\x43\x6B\xFF\xE5\xDE\x4D\x66\x11\x51\xCF\x99\xAE\xEC\x17\xB6\xE8\x71\x91\x8C\xDE\x49\xFE\xDD\x35\x71\xA2\x15\x27\x94\x1C\xCF\x61\xE3\x26\xBB\x6F\xA3\x67\x25\x21\x5D\xE6\xDD\x1D\x0B\x2E\x68\x1B\x3B\x82\xAF\xEC\x83\x67\x85\xD4\x98\x51\x74\xB1\xB9\x99\x80\x89\xFF\x7F\x78\x19\x5C\x79\x4A\x60\x2E\x92\x40\xAE\x4C\x37\x2A\x2C\xC9\xC7\x62\xC8\x0E\x5D\xF7\x36\x5B\xCA\xE0\x25\x25\x01\xB4\xDD\x1A\x07\x9C\x77\x00\x3F\xD0\xDC\xD5\xEC\x3D\xD4\xFA\xBB\x3F\xCC\x85\xD6\x6F\x7F\xA9\x2D\xDF\xB9\x02\xF7\xF5\x97\x9A\xB5\x35\xDA\xC3\x67\xB0\x87\x4A\xA9\x28\x9E\x23\x8E\xFF\x5C\x27\x6B\xE1\xB0\x4F\xF3\x07\xEE\x00\x2E\xD4\x59\x87\xCB\x52\x41\x95\xEA\xF4\x47\xD7\xEE\x64\x41\x55\x7C\x8D\x59\x02\x95\xDD\x62\x9D\xC2\xB9\xEE\x5A\x28\x74\x84\xA5\x9B\xB7\x90\xC7\x0C\x07\xDF\xF5\x89\x36\x74\x32\xD6\x28\xC1\xB0\xB0\x0B\xE0\x9C\x4C\xC3\x1C\xD6\xFC\xE3\x69\xB5\x47\x46\x81\x2F\xA2\x82\xAB\xD3\x63\x44\x70\xC4\x8D\xFF\x2D\x33\xBA\xAD\x8F\x7B\xB5\x70\x88\xAE\x3E\x19\xCF\x40\x28\xD8\xFC\xC8\x90\xBB\x5D\x99\x22\xF5\x52\xE6\x58\xC5\x1F\x88\x31\x43\xEE\x88\x1D\xD7\xC6\x8E\x3C\x43\x6A\x1D\xA7\x18\xDE\x7D\x3D\x16\xF1\x62\xF9\xCA\x90\xA8\xFD", ["CN=USERTrust ECC Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US"] = "\x30\x82\x02\x8F\x30\x82\x02\x15\xA0\x03\x02\x01\x02\x02\x10\x5C\x8B\x99\xC5\x5A\x94\xC5\xD2\x71\x56\xDE\xCD\x89\x80\xCC\x26\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x1E\x17\x0D\x31\x30\x30\x32\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x32\x33\x35\x39\x35\x39\x5A\x30\x81\x88\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x13\x30\x11\x06\x03\x55\x04\x08\x13\x0A\x4E\x65\x77\x20\x4A\x65\x72\x73\x65\x79\x31\x14\x30\x12\x06\x03\x55\x04\x07\x13\x0B\x4A\x65\x72\x73\x65\x79\x20\x43\x69\x74\x79\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x13\x15\x54\x68\x65\x20\x55\x53\x45\x52\x54\x52\x55\x53\x54\x20\x4E\x65\x74\x77\x6F\x72\x6B\x31\x2E\x30\x2C\x06\x03\x55\x04\x03\x13\x25\x55\x53\x45\x52\x54\x72\x75\x73\x74\x20\x45\x43\x43\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x1A\xAC\x54\x5A\xA9\xF9\x68\x23\xE7\x7A\xD5\x24\x6F\x53\xC6\x5A\xD8\x4B\xAB\xC6\xD5\xB6\xD1\xE6\x73\x71\xAE\xDD\x9C\xD6\x0C\x61\xFD\xDB\xA0\x89\x03\xB8\x05\x14\xEC\x57\xCE\xEE\x5D\x3F\xE2\x21\xB3\xCE\xF7\xD4\x8A\x79\xE0\xA3\x83\x7E\x2D\x97\xD0\x61\xC4\xF1\x99\xDC\x25\x91\x63\xAB\x7F\x30\xA3\xB4\x70\xE2\xC7\xA1\x33\x9C\xF3\xBF\x2E\x5C\x53\xB1\x5F\xB3\x7D\x32\x7F\x8A\x34\xE3\x79\x79\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x3A\xE1\x09\x86\xD4\xCF\x19\xC2\x96\x76\x74\x49\x76\xDC\xE0\x35\xC6\x63\x63\x9A\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x30\x36\x67\xA1\x16\x08\xDC\xE4\x97\x00\x41\x1D\x4E\xBE\xE1\x63\x01\xCF\x3B\xAA\x42\x11\x64\xA0\x9D\x94\x39\x02\x11\x79\x5C\x7B\x1D\xFA\x64\xB9\xEE\x16\x42\xB3\xBF\x8A\xC2\x09\xC4\xEC\xE4\xB1\x4D\x02\x31\x00\xE9\x2A\x61\x47\x8C\x52\x4A\x4B\x4E\x18\x70\xF6\xD6\x44\xD6\x6E\xF5\x83\xBA\x6D\x58\xBD\x24\xD9\x56\x48\xEA\xEF\xC4\xA2\x46\x81\x88\x6A\x3A\x46\xD1\xA9\x9B\x4D\xC9\x61\xDA\xD1\x5D\x57\x6A\x18", ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R5"] = "\x30\x82\x02\x1E\x30\x82\x01\xA4\xA0\x03\x02\x01\x02\x02\x11\x60\x59\x49\xE0\x26\x2E\xBB\x55\xF9\x0A\x77\x8A\x71\xF9\x4A\xD8\x6C\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x50\x31\x24\x30\x22\x06\x03\x55\x04\x0B\x13\x1B\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x2D\x20\x52\x35\x31\x13\x30\x11\x06\x03\x55\x04\x0A\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x30\x1E\x17\x0D\x31\x32\x31\x31\x31\x33\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x38\x30\x31\x31\x39\x30\x33\x31\x34\x30\x37\x5A\x30\x50\x31\x24\x30\x22\x06\x03\x55\x04\x0B\x13\x1B\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x2D\x20\x52\x35\x31\x13\x30\x11\x06\x03\x55\x04\x0A\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x47\x6C\x6F\x62\x61\x6C\x53\x69\x67\x6E\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x47\x45\x0E\x96\xFB\x7D\x5D\xBF\xE9\x39\xD1\x21\xF8\x9F\x0B\xB6\xD5\x7B\x1E\x92\x3A\x48\x59\x1C\xF0\x62\x31\x2D\xC0\x7A\x28\xFE\x1A\xA7\x5C\xB3\xB6\xCC\x97\xE7\x45\xD4\x58\xFA\xD1\x77\x6D\x43\xA2\xC0\x87\x65\x34\x0A\x1F\x7A\xDD\xEB\x3C\x33\xA1\xC5\x9D\x4D\xA4\x6F\x41\x95\x38\x7F\xC9\x1E\x84\xEB\xD1\x9E\x49\x92\x87\x94\x87\x0C\x3A\x85\x4A\x66\x9F\x9D\x59\x93\x4D\x97\x61\x06\x86\x4A\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x3D\xE6\x29\x48\x9B\xEA\x07\xCA\x21\x44\x4A\x26\xDE\x6E\xDE\xD2\x83\xD0\x9F\x59\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xE5\x69\x12\xC9\x6E\xDB\xC6\x31\xBA\x09\x41\xE1\x97\xF8\xFB\xFD\x9A\xE2\x7D\x12\xC9\xED\x7C\x64\xD3\xCB\x05\x25\x8B\x56\xD9\xA0\xE7\x5E\x5D\x4E\x0B\x83\x9C\x5B\x76\x29\xA0\x09\x26\x21\x6A\x62\x02\x30\x71\xD2\xB5\x8F\x5C\xEA\x3B\xE1\x78\x09\x85\xA8\x75\x92\x3B\xC8\x5C\xFD\x48\xEF\x0D\x74\x22\xA8\x08\xE2\x6E\xC5\x49\xCE\xC7\x0C\xBC\xA7\x61\x69\xF1\xF7\x3B\xE1\x2A\xCB\xF9\x2B\xF3\x66\x90\x37", - ["CN=Staat der Nederlanden EV Root CA,O=Staat der Nederlanden,C=NL"] = "\x30\x82\x05\x70\x30\x82\x03\x58\xA0\x03\x02\x01\x02\x02\x04\x00\x98\x96\x8D\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x58\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4C\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x0C\x15\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x31\x29\x30\x27\x06\x03\x55\x04\x03\x0C\x20\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x31\x30\x31\x32\x30\x38\x31\x31\x31\x39\x32\x39\x5A\x17\x0D\x32\x32\x31\x32\x30\x38\x31\x31\x31\x30\x32\x38\x5A\x30\x58\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4E\x4C\x31\x1E\x30\x1C\x06\x03\x55\x04\x0A\x0C\x15\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x31\x29\x30\x27\x06\x03\x55\x04\x03\x0C\x20\x53\x74\x61\x61\x74\x20\x64\x65\x72\x20\x4E\x65\x64\x65\x72\x6C\x61\x6E\x64\x65\x6E\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE3\xC7\x7E\x89\xF9\x24\x4B\x3A\xD2\x33\x83\x35\x2C\x69\xEC\xDC\x09\xA4\xE3\x51\xA8\x25\x2B\x79\xB8\x08\x3D\xE0\x91\xBA\x84\x85\xC6\x85\xA4\xCA\xE6\xC9\x2E\x53\xA4\xC9\x24\x1E\xFD\x55\x66\x71\x5D\x2C\xC5\x60\x68\x04\xB7\xD9\xC2\x52\x26\x38\x88\xA4\xD6\x3B\x40\xA6\xC2\xCD\x3F\xCD\x98\x93\xB3\x54\x14\x58\x96\x55\xD5\x50\xFE\x86\xAD\xA4\x63\x7F\x5C\x87\xF6\x8E\xE6\x27\x92\x67\x17\x92\x02\x03\x2C\xDC\xD6\x66\x74\xED\xDD\x67\xFF\xC1\x61\x8D\x63\x4F\x0F\x9B\x6D\x17\x30\x26\xEF\xAB\xD2\x1F\x10\xA0\xF9\xC5\x7F\x16\x69\x81\x03\x47\xED\x1E\x68\x8D\x72\xA1\x4D\xB2\x26\xC6\xBA\x6C\x5F\x6D\xD6\xAF\xD1\xB1\x13\x8E\xA9\xAD\xF3\x5E\x69\x75\x26\x18\x3E\x41\x2B\x21\x7F\xEE\x8B\x5D\x07\x06\x9D\x43\xC4\x29\x0A\x2B\xFC\x2A\x3E\x86\xCB\x3C\x83\x3A\xF9\xC9\x0D\xDA\xC5\x99\xE2\xBC\x78\x41\x33\x76\xE1\xBF\x2F\x5D\xE5\xA4\x98\x50\x0C\x15\xDD\xE0\xFA\x9C\x7F\x38\x68\xD0\xB2\xA6\x7A\xA7\xD1\x31\xBD\x7E\x8A\x58\x27\x43\xB3\xBA\x33\x91\xD3\xA7\x98\x15\x5C\x9A\xE6\xD3\x0F\x75\xD9\xFC\x41\x98\x97\x3E\xAA\x25\xDB\x8F\x92\x2E\xB0\x7B\x0C\x5F\xF1\x63\xA9\x37\xF9\x9B\x75\x69\x4C\x28\x26\x25\xDA\xD5\xF2\x12\x70\x45\x55\xE3\xDF\x73\x5E\x37\xF5\x21\x6C\x90\x8E\x35\x5A\xC9\xD3\x23\xEB\xD3\xC0\xBE\x78\xAC\x42\x28\x58\x66\xA5\x46\x6D\x70\x02\xD7\x10\xF9\x4B\x54\xFC\x5D\x86\x4A\x87\xCF\x7F\xCA\x45\xAC\x11\x5A\xB5\x20\x51\x8D\x2F\x88\x47\x97\x39\xC0\xCF\xBA\xC0\x42\x01\x40\x99\x48\x21\x0B\x6B\xA7\xD2\xFD\x96\xD5\xD1\xBE\x46\x9D\x49\xE0\x0B\xA6\xA0\x22\x4E\x38\xD0\xC1\x3C\x30\xBC\x70\x8F\x2C\x75\xCC\xD0\xC5\x8C\x51\x3B\x3D\x94\x08\x64\x26\x61\x7D\xB9\xC3\x65\x8F\x14\x9C\x21\xD0\xAA\xFD\x17\x72\x03\x8F\xBD\x9B\x8C\xE6\x5E\x53\x9E\xB9\x9D\xEF\x82\xBB\xE1\xBC\xE2\x72\x41\x5B\x21\x94\xD3\x45\x37\x94\xD1\xDF\x09\x39\x5D\xE7\x23\xAA\x9A\x1D\xCA\x6D\xA8\x0A\x86\x85\x8A\x82\xBE\x42\x07\xD6\xF2\x38\x82\x73\xDA\x87\x5B\xE5\x3C\xD3\x9E\x3E\xA7\x3B\x9E\xF4\x03\xB3\xF9\xF1\x7D\x13\x74\x02\xFF\xBB\xA1\xE5\xFA\x00\x79\x1C\xA6\x66\x41\x88\x5C\x60\x57\xA6\x2E\x09\xC4\xBA\xFD\x9A\xCF\xA7\x1F\x40\xC3\xBB\xCC\x5A\x0A\x55\x4B\x3B\x38\x76\x51\xB8\x63\x8B\x84\x94\x16\xE6\x56\xF3\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xFE\xAB\x00\x90\x98\x9E\x24\xFC\xA9\xCC\x1A\x8A\xFB\x27\xB8\xBF\x30\x6E\xA8\x3B\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xCF\x77\x2C\x6E\x56\xBE\x4E\xB3\xB6\x84\x00\x94\xAB\x47\xC9\x0D\xD2\x76\xC7\x86\x9F\x1D\x07\xD3\xB6\xB4\xBB\x08\x78\xAF\x69\xD2\x0B\x49\xDE\x33\xC5\xAC\xAD\xC2\x88\x02\x7D\x06\xB7\x35\x02\xC1\x60\xC9\xBF\xC4\xE8\x94\xDE\xD4\xD3\xA9\x13\x25\x5A\xFE\x6E\xA2\xAE\x7D\x05\xDC\x7D\xF3\x6C\xF0\x7E\xA6\x8D\xEE\xD9\xD7\xCE\x58\x17\xE8\xA9\x29\xAE\x73\x48\x87\xE7\x9B\xCA\x6E\x29\xA1\x64\x5F\x19\x13\xF7\xAE\x06\x10\xFF\x51\xC6\x9B\x4D\x55\x25\x4F\x93\x99\x10\x01\x53\x75\xF1\x13\xCE\xC7\xA6\x41\x41\xD2\xBF\x88\xA5\x7F\x45\xFC\xAC\xB8\xA5\xB5\x33\x0C\x82\xC4\xFB\x07\xF6\x6A\xE5\x25\x84\x5F\x06\xCA\xC1\x86\x39\x11\xDB\x58\xCD\x77\x3B\x2C\xC2\x4C\x0F\x5E\x9A\xE3\xF0\xAB\x3E\x61\x1B\x50\x24\xC2\xC0\xF4\xF1\x19\xF0\x11\x29\xB6\xA5\x18\x02\x9B\xD7\x63\x4C\x70\x8C\x47\xA3\x03\x43\x5C\xB9\x5D\x46\xA0\x0D\x6F\xFF\x59\x8E\xBE\xDD\x9F\x72\xC3\x5B\x2B\xDF\x8C\x5B\xCE\xE5\x0C\x46\x6C\x92\xB2\x0A\xA3\x4C\x54\x42\x18\x15\x12\x18\xBD\xDA\xFC\xBA\x74\x6E\xFF\xC1\xB6\xA0\x64\xD8\xA9\x5F\x55\xAE\x9F\x5C\x6A\x76\x96\xD8\x73\x67\x87\xFB\x4D\x7F\x5C\xEE\x69\xCA\x73\x10\xFB\x8A\xA9\xFD\x9E\xBD\x36\x38\x49\x49\x87\xF4\x0E\x14\xF0\xE9\x87\xB8\x3F\xA7\x4F\x7A\x5A\x8E\x79\xD4\x93\xE4\xBB\x68\x52\x84\xAC\x6C\xE9\xF3\x98\x70\x55\x72\x32\xF9\x34\xAB\x2B\x49\xB5\xCD\x20\x62\xE4\x3A\x7A\x67\x63\xAB\x96\xDC\x6D\xAE\x97\xEC\xFC\x9F\x76\x56\x88\x2E\x66\xCF\x5B\xB6\xC9\xA4\xB0\xD7\x05\xBA\xE1\x27\x2F\x93\xBB\x26\x2A\xA2\x93\xB0\x1B\xF3\x8E\xBE\x1D\x40\xA3\xB9\x36\x8F\x3E\x82\x1A\x1A\x5E\x88\xEA\x50\xF8\x59\xE2\x83\x46\x29\x0B\xE3\x44\x5C\xE1\x95\xB6\x69\x90\x9A\x14\x6F\x97\xAE\x81\xCF\x68\xEF\x99\x9A\xBE\xB5\xE7\xE1\x7F\xF8\xFA\x13\x47\x16\x4C\xCC\x6D\x08\x40\xE7\x8B\x78\x6F\x50\x82\x44\x50\x3F\x66\x06\x8A\xAB\x43\x84\x56\x4A\x0F\x20\x2D\x86\x0E\xF5\xD2\xDB\xD2\x7A\x8A\x4B\xCD\xA5\xE8\x4E\xF1\x5E\x26\x25\x01\x59\x23\xA0\x7E\xD2\xF6\x7E\x21\x57\xD7\x27\xBC\x15\x57\x4C\xA4\x46\xC1\xE0\x83\x1E\x0C\x4C\x4D\x1F\x4F\x06\x19\xE2\xF9\xA8\xF4\x3A\x82\xA1\xB2\x79\x43\x79\xD6\xAD\x6F\x7A\x27\x90\x03\xA4\xEA\x24\x87\x3F\xD9\xBD\xD9\xE9\xF2\x5F\x50\x49\x1C\xEE\xEC\xD7\x2E", ["CN=IdenTrust Commercial Root CA 1,O=IdenTrust,C=US"] = "\x30\x82\x05\x60\x30\x82\x03\x48\xA0\x03\x02\x01\x02\x02\x10\x0A\x01\x42\x80\x00\x00\x01\x45\x23\xC8\x44\xB5\x00\x00\x00\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x43\x6F\x6D\x6D\x65\x72\x63\x69\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x1E\x17\x0D\x31\x34\x30\x31\x31\x36\x31\x38\x31\x32\x32\x33\x5A\x17\x0D\x33\x34\x30\x31\x31\x36\x31\x38\x31\x32\x32\x33\x5A\x30\x4A\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x43\x6F\x6D\x6D\x65\x72\x63\x69\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA7\x50\x19\xDE\x3F\x99\x3D\xD4\x33\x46\xF1\x6F\x51\x61\x82\xB2\xA9\x4F\x8F\x67\x89\x5D\x84\xD9\x53\xDD\x0C\x28\xD9\xD7\xF0\xFF\xAE\x95\x43\x72\x99\xF9\xB5\x5D\x7C\x8A\xC1\x42\xE1\x31\x50\x74\xD1\x81\x0D\x7C\xCD\x9B\x21\xAB\x43\xE2\xAC\xAD\x5E\x86\x6E\xF3\x09\x8A\x1F\x5A\x32\xBD\xA2\xEB\x94\xF9\xE8\x5C\x0A\xEC\xFF\x98\xD2\xAF\x71\xB3\xB4\x53\x9F\x4E\x87\xEF\x92\xBC\xBD\xEC\x4F\x32\x30\x88\x4B\x17\x5E\x57\xC4\x53\xC2\xF6\x02\x97\x8D\xD9\x62\x2B\xBF\x24\x1F\x62\x8D\xDF\xC3\xB8\x29\x4B\x49\x78\x3C\x93\x60\x88\x22\xFC\x99\xDA\x36\xC8\xC2\xA2\xD4\x2C\x54\x00\x67\x35\x6E\x73\xBF\x02\x58\xF0\xA4\xDD\xE5\xB0\xA2\x26\x7A\xCA\xE0\x36\xA5\x19\x16\xF5\xFD\xB7\xEF\xAE\x3F\x40\xF5\x6D\x5A\x04\xFD\xCE\x34\xCA\x24\xDC\x74\x23\x1B\x5D\x33\x13\x12\x5D\xC4\x01\x25\xF6\x30\xDD\x02\x5D\x9F\xE0\xD5\x47\xBD\xB4\xEB\x1B\xA1\xBB\x49\x49\xD8\x9F\x5B\x02\xF3\x8A\xE4\x24\x90\xE4\x62\x4F\x4F\xC1\xAF\x8B\x0E\x74\x17\xA8\xD1\x72\x88\x6A\x7A\x01\x49\xCC\xB4\x46\x79\xC6\x17\xB1\xDA\x98\x1E\x07\x59\xFA\x75\x21\x85\x65\xDD\x90\x56\xCE\xFB\xAB\xA5\x60\x9D\xC4\x9D\xF9\x52\xB0\x8B\xBD\x87\xF9\x8F\x2B\x23\x0A\x23\x76\x3B\xF7\x33\xE1\xC9\x00\xF3\x69\xF9\x4B\xA2\xE0\x4E\xBC\x7E\x93\x39\x84\x07\xF7\x44\x70\x7E\xFE\x07\x5A\xE5\xB1\xAC\xD1\x18\xCC\xF2\x35\xE5\x49\x49\x08\xCA\x56\xC9\x3D\xFB\x0F\x18\x7D\x8B\x3B\xC1\x13\xC2\x4D\x8F\xC9\x4F\x0E\x37\xE9\x1F\xA1\x0E\x6A\xDF\x62\x2E\xCB\x35\x06\x51\x79\x2C\xC8\x25\x38\xF4\xFA\x4B\xA7\x89\x5C\x9C\xD2\xE3\x0D\x39\x86\x4A\x74\x7C\xD5\x59\x87\xC2\x3F\x4E\x0C\x5C\x52\xF4\x3D\xF7\x52\x82\xF1\xEA\xA3\xAC\xFD\x49\x34\x1A\x28\xF3\x41\x88\x3A\x13\xEE\xE8\xDE\xFF\x99\x1D\x5F\xBA\xCB\xE8\x1E\xF2\xB9\x50\x60\xC0\x31\xD3\x73\xE5\xEF\xBE\xA0\xED\x33\x0B\x74\xBE\x20\x20\xC4\x67\x6C\xF0\x08\x03\x7A\x55\x80\x7F\x46\x4E\x96\xA7\xF4\x1E\x3E\xE1\xF6\xD8\x09\xE1\x33\x64\x2B\x63\xD7\x32\x5E\x9F\xF9\xC0\x7B\x0F\x78\x6F\x97\xBC\x93\x9A\xF9\x9C\x12\x90\x78\x7A\x80\x87\x15\xD7\x72\x74\x9C\x55\x74\x78\xB1\xBA\xE1\x6E\x70\x04\xBA\x4F\xA0\xBA\x68\xC3\x7B\xFF\x31\xF0\x73\x3D\x3D\x94\x2A\xB1\x0B\x41\x0E\xA0\xFE\x4D\x88\x65\x6B\x79\x33\xB4\xD7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xED\x44\x19\xC0\xD3\xF0\x06\x8B\xEE\xA4\x7B\xBE\x42\xE7\x26\x54\xC8\x8E\x36\x76\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x0D\xAE\x90\x32\xF6\xA6\x4B\x7C\x44\x76\x19\x61\x1E\x27\x28\xCD\x5E\x54\xEF\x25\xBC\xE3\x08\x90\xF9\x29\xD7\xAE\x68\x08\xE1\x94\x00\x58\xEF\x2E\x2E\x7E\x53\x52\x8C\xB6\x5C\x07\xEA\x88\xBA\x99\x8B\x50\x94\xD7\x82\x80\xDF\x61\x09\x00\x93\xAD\x0D\x14\xE6\xCE\xC1\xF2\x37\x94\x78\xB0\x5F\x9C\xB3\xA2\x73\xB8\x8F\x05\x93\x38\xCD\x8D\x3E\xB0\xB8\xFB\xC0\xCF\xB1\xF2\xEC\x2D\x2D\x1B\xCC\xEC\xAA\x9A\xB3\xAA\x60\x82\x1B\x2D\x3B\xC3\x84\x3D\x57\x8A\x96\x1E\x9C\x75\xB8\xD3\x30\xCD\x60\x08\x83\x90\xD3\x8E\x54\xF1\x4D\x66\xC0\x5D\x74\x03\x40\xA3\xEE\x85\x7E\xC2\x1F\x77\x9C\x06\xE8\xC1\xA7\x18\x5D\x52\x95\xED\xC9\xDD\x25\x9E\x6D\xFA\xA9\xED\xA3\x3A\x34\xD0\x59\x7B\xDA\xED\x50\xF3\x35\xBF\xED\xEB\x14\x4D\x31\xC7\x60\xF4\xDA\xF1\x87\x9C\xE2\x48\xE2\xC6\xC5\x37\xFB\x06\x10\xFA\x75\x59\x66\x31\x47\x29\xDA\x76\x9A\x1C\xE9\x82\xAE\xEF\x9A\xB9\x51\xF7\x88\x23\x9A\x69\x95\x62\x3C\xE5\x55\x80\x36\xD7\x54\x02\xFF\xF1\xB9\x5D\xCE\xD4\x23\x6F\xD8\x45\x84\x4A\x5B\x65\xEF\x89\x0C\xDD\x14\xA7\x20\xCB\x18\xA5\x25\xB4\x0D\xF9\x01\xF0\xA2\xD2\xF4\x00\xC8\x74\x8E\xA1\x2A\x48\x8E\x65\xDB\x13\xC4\xE2\x25\x17\x7D\xEB\xBE\x87\x5B\x17\x20\x54\x51\x93\x4A\x53\x03\x0B\xEC\x5D\xCA\x33\xED\x62\xFD\x45\xC7\x2F\x5B\xDC\x58\xA0\x80\x39\xE6\xFA\xD7\xFE\x13\x14\xA6\xED\x3D\x94\x4A\x42\x74\xD4\xC3\x77\x59\x73\xCD\x8F\x46\xBE\x55\x38\xEF\xFA\xE8\x91\x32\xEA\x97\x58\x04\x22\xDE\x38\xC3\xCC\xBC\x6D\xC9\x33\x3A\x6A\x0A\x69\x3F\xA0\xC8\xEA\x72\x8F\x8C\x63\x86\x23\xBD\x6D\x3C\x96\x9E\x95\xE0\x49\x4C\xAA\xA2\xB9\x2A\x1B\x9C\x36\x81\x78\xED\xC3\xE8\x46\xE2\x26\x59\x44\x75\x1E\xD9\x75\x89\x51\xCD\x10\x84\x9D\x61\x60\xCB\x5D\xF9\x97\x22\x4D\x8E\x98\xE6\xE3\x7F\xF6\x5B\xBB\xAE\xCD\xCA\x4A\x81\x6B\x5E\x0B\xF3\x51\xE1\x74\x2B\xE9\x7E\x27\xA7\xD9\x99\x49\x4E\xF8\xA5\x80\xDB\x25\x0F\x1C\x63\x62\x8A\xC9\x33\x67\x6B\x3C\x10\x83\xC6\xAD\xDE\xA8\xCD\x16\x8E\x8D\xF0\x07\x37\x71\x9F\xF2\xAB\xFC\x41\xF5\xC1\x8B\xEC\x00\x37\x5D\x09\xE5\x4E\x80\xEF\xFA\xB1\x5C\x38\x06\xA5\x1B\x4A\xE1\xDC\x38\x2D\x3C\xDC\xAB\x1F\x90\x1A\xD5\x4A\x9C\xEE\xD1\x70\x6C\xCC\xEE\xF4\x57\xF8\x18\xBA\x84\x6E\x87", ["CN=IdenTrust Public Sector Root CA 1,O=IdenTrust,C=US"] = "\x30\x82\x05\x66\x30\x82\x03\x4E\xA0\x03\x02\x01\x02\x02\x10\x0A\x01\x42\x80\x00\x00\x01\x45\x23\xCF\x46\x7C\x00\x00\x00\x02\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x13\x21\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x50\x75\x62\x6C\x69\x63\x20\x53\x65\x63\x74\x6F\x72\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x1E\x17\x0D\x31\x34\x30\x31\x31\x36\x31\x37\x35\x33\x33\x32\x5A\x17\x0D\x33\x34\x30\x31\x31\x36\x31\x37\x35\x33\x33\x32\x5A\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x31\x2A\x30\x28\x06\x03\x55\x04\x03\x13\x21\x49\x64\x65\x6E\x54\x72\x75\x73\x74\x20\x50\x75\x62\x6C\x69\x63\x20\x53\x65\x63\x74\x6F\x72\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB6\x22\x94\xFC\xA4\x48\xAF\xE8\x47\x6B\x0A\xFB\x27\x76\xE4\xF2\x3F\x8A\x3B\x7A\x4A\x2C\x31\x2A\x8C\x8D\xB0\xA9\xC3\x31\x6B\xA8\x77\x76\x84\x26\xB6\xAC\x81\x42\x0D\x08\xEB\x55\x58\xBB\x7A\xF8\xBC\x65\x7D\xF2\xA0\x6D\x8B\xA8\x47\xE9\x62\x76\x1E\x11\xEE\x08\x14\xD1\xB2\x44\x16\xF4\xEA\xD0\xFA\x1E\x2F\x5E\xDB\xCB\x73\x41\xAE\xBC\x00\xB0\x4A\x2B\x40\xB2\xAC\xE1\x3B\x4B\xC2\x2D\x9D\xE4\xA1\x9B\xEC\x1A\x3A\x1E\xF0\x08\xB3\xD0\xE4\x24\x35\x07\x9F\x9C\xB4\xC9\x52\x6D\xDB\x07\xCA\x8F\xB5\x5B\xF0\x83\xF3\x4F\xC7\x2D\xA5\xC8\xAD\xCB\x95\x20\xA4\x31\x28\x57\x58\x5A\xE4\x8D\x1B\x9A\xAB\x9E\x0D\x0C\xF2\x0A\x33\x39\x22\x39\x0A\x97\x2E\xF3\x53\x77\xB9\x44\x45\xFD\x84\xCB\x36\x20\x81\x59\x2D\x9A\x6F\x6D\x48\x48\x61\xCA\x4C\xDF\x53\xD1\xAF\x52\xBC\x44\x9F\xAB\x2F\x6B\x83\x72\xEF\x75\x80\xDA\x06\x33\x1B\x5D\xC8\xDA\x63\xC6\x4D\xCD\xAC\x66\x31\xCD\xD1\xDE\x3E\x87\x10\x36\xE1\xB9\xA4\x7A\xEF\x60\x50\xB2\xCB\xCA\xA6\x56\xE0\x37\xAF\xAB\x34\x13\x39\x25\xE8\x39\x66\xE4\x98\x7A\xAA\x12\x98\x9C\x59\x66\x86\x3E\xAD\xF1\xB0\xCA\x3E\x06\x0F\x7B\xF0\x11\x4B\x37\xA0\x44\x6D\x7B\xCB\xA8\x8C\x71\xF4\xD5\xB5\x91\x36\xCC\xF0\x15\xC6\x2B\xDE\x51\x17\xB1\x97\x4C\x50\x3D\xB1\x95\x59\x7C\x05\x7D\x2D\x21\xD5\x00\xBF\x01\x67\xA2\x5E\x7B\xA6\x5C\xF2\xF7\x22\xF1\x90\x0D\x93\xDB\xAA\x44\x51\x66\xCC\x7D\x76\x03\xEB\x6A\xA8\x2A\x38\x19\x97\x76\x0D\x6B\x8A\x61\xF9\xBC\xF6\xEE\x76\xFD\x70\x2B\xDD\x29\x3C\xF8\x0A\x1E\x5B\x42\x1C\x8B\x56\x2F\x55\x1B\x1C\xA1\x2E\xB5\xC7\x16\xE6\xF8\xAA\x3C\x92\x8E\x69\xB6\x01\xC1\xB5\x86\x9D\x89\x0F\x0B\x38\x94\x54\xE8\xEA\xDC\x9E\x3D\x25\xBC\x53\x26\xED\xD5\xAB\x39\xAA\xC5\x40\x4C\x54\xAB\xB2\xB4\xD9\xD9\xF8\xD7\x72\xDB\x1C\xBC\x6D\xBD\x65\x5F\xEF\x88\x35\x2A\x66\x2F\xEE\xF6\xB3\x65\xF0\x33\x8D\x7C\x98\x41\x69\x46\x0F\x43\x1C\x69\xFA\x9B\xB5\xD0\x61\x6A\xCD\xCA\x4B\xD9\x4C\x90\x46\xAB\x15\x59\xA1\x47\x54\x29\x2E\x83\x28\x5F\x1C\xC2\xA2\xAB\x72\x17\x00\x06\x8E\x45\xEC\x8B\xE2\x33\x3D\x7F\xDA\x19\x44\xE4\x62\x72\xC3\xDF\x22\xC6\xF2\x56\xD4\xDD\x5F\x95\x72\xED\x6D\x5F\xF7\x48\x03\x5B\xFD\xC5\x2A\xA0\xF6\x73\x23\x84\x10\x1B\x01\xE7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xE3\x71\xE0\x9E\xD8\xA7\x42\xD9\xDB\x71\x91\x6B\x94\x93\xEB\xC3\xA3\xD1\x14\xA3\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x47\xFA\xDD\x0A\xB0\x11\x91\x38\xAD\x4D\x5D\xF7\xE5\x0E\x97\x54\x19\x82\x48\x87\x54\x8C\xAA\x64\x99\xD8\x5A\xFE\x88\x01\xC5\x58\xA5\x99\xB1\x23\x54\x23\xB7\x6A\x1D\x20\x57\xE5\x01\x62\x41\x17\xD3\x09\xDB\x75\xCB\x6E\x54\x90\x75\xFE\x1A\x9F\x81\x0A\xC2\xDD\xD7\xF7\x09\xD0\x5B\x72\x15\xE4\x1E\x09\x6A\x3D\x33\xF3\x21\x9A\xE6\x15\x7E\xAD\x51\xD5\x0D\x10\xED\x7D\x42\xC0\x8F\xEE\xC0\x9A\x08\xD5\x41\xD6\x5C\x0E\x21\x69\x6E\x80\x61\x0E\x15\xC0\xB8\xCF\xC5\x49\x12\x52\xCC\xBE\x3A\xCC\xD4\x2E\x38\x05\xDE\x35\xFD\x1F\x6F\xB8\x80\x68\x98\x3D\x4D\xA0\xCA\x40\x65\xD2\x73\x7C\xF5\x8B\xD9\x0A\x95\x3F\xD8\x3F\x23\x6D\x1A\xD1\x2A\x24\x19\xD9\x85\xB3\x17\xEF\x78\x6E\xA9\x58\xD1\x23\xD3\xC7\x13\xED\x72\x25\x7F\x5D\xB1\x73\x70\xD0\x7F\x06\x97\x09\x84\x29\x80\x61\x1D\xFA\x5E\xFF\x73\xAC\xA0\xE3\x89\xB8\x1C\x71\x15\xC6\xDE\x31\x7F\x12\xDC\xE1\x6D\x9B\xAF\xE7\xE8\x9F\x75\x78\x4C\xAB\x46\x3B\x9A\xCE\xBF\x05\x18\x5D\x4D\x15\x3C\x16\x9A\x19\x50\x04\x9A\xB2\x9A\x6F\x65\x8B\x52\x5F\x3C\x58\x04\x28\x25\xC0\x66\x61\x31\x7E\xB9\xE0\x75\xB9\x1A\xA8\x81\xD6\x72\x17\xB3\xC5\x03\x31\x35\x11\x78\x78\xA2\xE0\xE9\x30\x8C\x7F\x80\xDF\x58\xDF\x3C\xBA\x27\x96\xE2\x80\x34\x6D\xE3\x98\xD3\x64\x27\xAC\x48\x7E\x28\x77\x5C\xC6\x25\x61\x25\xF8\x85\x0C\x65\xFA\xC4\x32\x2F\xA5\x98\x05\xE4\xF8\x0B\x67\x16\x16\xC6\x82\xB8\x32\x19\xF9\xF9\xB9\x79\xDC\x1F\xCD\xEB\xAF\xAB\x0E\xDD\x1B\xDB\x45\xE4\x7A\xE7\x02\xE2\x95\x5D\xFC\x69\xF0\x53\x69\x61\x95\x75\x79\x0B\x5E\x55\xE6\x38\x1C\x94\xA9\x59\x33\x9E\xC8\x71\x74\x79\x7F\x51\x89\xB6\xC8\x6A\xB8\x30\xC8\x6A\x38\xC3\x6E\x9E\xE1\x37\x16\xEA\x05\x62\x4C\x5B\x12\x47\xED\xA7\xB4\xB3\x58\x56\xC7\x49\xF3\x7F\x12\x68\x09\x31\x71\xF0\x6D\xF8\x4E\x47\xFB\xD6\x85\xEE\xC5\x58\x40\x19\xA4\x1D\xA7\xF9\x4B\x43\x37\xDC\x68\x5A\x4F\xCF\xEB\xC2\x64\x74\xDE\xB4\x15\xD9\xF4\x54\x54\x1A\x2F\x1C\xD7\x97\x71\x54\x90\x8E\xD9\x20\x9D\x53\x2B\x7F\xAB\x8F\xE2\xEA\x30\xBC\x50\x37\xEF\xF1\x47\xB5\x7D\x7C\x2C\x04\xEC\x68\x9D\xB4\x49\x44\x10\xF4\x72\x4B\x1C\x64\xE7\xFC\xE6\x6B\x90\xDD\x69\x7D\x69\xFD\x00\x56\xA5\xB7\xAC\xB6\xAD\xB7\xCA\x3E\x01\xEF\x9C", ["CN=Entrust Root Certification Authority - G2,OU=(c) 2009 Entrust\, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust\, Inc.,C=US"] = "\x30\x82\x04\x3E\x30\x82\x03\x26\xA0\x03\x02\x01\x02\x02\x04\x4A\x53\x8C\x28\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x81\xBE\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x16\x30\x14\x06\x03\x55\x04\x0A\x13\x0D\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x65\x20\x77\x77\x77\x2E\x65\x6E\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x6C\x65\x67\x61\x6C\x2D\x74\x65\x72\x6D\x73\x31\x39\x30\x37\x06\x03\x55\x04\x0B\x13\x30\x28\x63\x29\x20\x32\x30\x30\x39\x20\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x20\x2D\x20\x66\x6F\x72\x20\x61\x75\x74\x68\x6F\x72\x69\x7A\x65\x64\x20\x75\x73\x65\x20\x6F\x6E\x6C\x79\x31\x32\x30\x30\x06\x03\x55\x04\x03\x13\x29\x45\x6E\x74\x72\x75\x73\x74\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x20\x2D\x20\x47\x32\x30\x1E\x17\x0D\x30\x39\x30\x37\x30\x37\x31\x37\x32\x35\x35\x34\x5A\x17\x0D\x33\x30\x31\x32\x30\x37\x31\x37\x35\x35\x35\x34\x5A\x30\x81\xBE\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x16\x30\x14\x06\x03\x55\x04\x0A\x13\x0D\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x31\x28\x30\x26\x06\x03\x55\x04\x0B\x13\x1F\x53\x65\x65\x20\x77\x77\x77\x2E\x65\x6E\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x6C\x65\x67\x61\x6C\x2D\x74\x65\x72\x6D\x73\x31\x39\x30\x37\x06\x03\x55\x04\x0B\x13\x30\x28\x63\x29\x20\x32\x30\x30\x39\x20\x45\x6E\x74\x72\x75\x73\x74\x2C\x20\x49\x6E\x63\x2E\x20\x2D\x20\x66\x6F\x72\x20\x61\x75\x74\x68\x6F\x72\x69\x7A\x65\x64\x20\x75\x73\x65\x20\x6F\x6E\x6C\x79\x31\x32\x30\x30\x06\x03\x55\x04\x03\x13\x29\x45\x6E\x74\x72\x75\x73\x74\x20\x52\x6F\x6F\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x20\x2D\x20\x47\x32\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBA\x84\xB6\x72\xDB\x9E\x0C\x6B\xE2\x99\xE9\x30\x01\xA7\x76\xEA\x32\xB8\x95\x41\x1A\xC9\xDA\x61\x4E\x58\x72\xCF\xFE\xF6\x82\x79\xBF\x73\x61\x06\x0A\xA5\x27\xD8\xB3\x5F\xD3\x45\x4E\x1C\x72\xD6\x4E\x32\xF2\x72\x8A\x0F\xF7\x83\x19\xD0\x6A\x80\x80\x00\x45\x1E\xB0\xC7\xE7\x9A\xBF\x12\x57\x27\x1C\xA3\x68\x2F\x0A\x87\xBD\x6A\x6B\x0E\x5E\x65\xF3\x1C\x77\xD5\xD4\x85\x8D\x70\x21\xB4\xB3\x32\xE7\x8B\xA2\xD5\x86\x39\x02\xB1\xB8\xD2\x47\xCE\xE4\xC9\x49\xC4\x3B\xA7\xDE\xFB\x54\x7D\x57\xBE\xF0\xE8\x6E\xC2\x79\xB2\x3A\x0B\x55\xE2\x50\x98\x16\x32\x13\x5C\x2F\x78\x56\xC1\xC2\x94\xB3\xF2\x5A\xE4\x27\x9A\x9F\x24\xD7\xC6\xEC\xD0\x9B\x25\x82\xE3\xCC\xC2\xC4\x45\xC5\x8C\x97\x7A\x06\x6B\x2A\x11\x9F\xA9\x0A\x6E\x48\x3B\x6F\xDB\xD4\x11\x19\x42\xF7\x8F\x07\xBF\xF5\x53\x5F\x9C\x3E\xF4\x17\x2C\xE6\x69\xAC\x4E\x32\x4C\x62\x77\xEA\xB7\xE8\xE5\xBB\x34\xBC\x19\x8B\xAE\x9C\x51\xE7\xB7\x7E\xB5\x53\xB1\x33\x22\xE5\x6D\xCF\x70\x3C\x1A\xFA\xE2\x9B\x67\xB6\x83\xF4\x8D\xA5\xAF\x62\x4C\x4D\xE0\x58\xAC\x64\x34\x12\x03\xF8\xB6\x8D\x94\x63\x24\xA4\x71\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x6A\x72\x26\x7A\xD0\x1E\xEF\x7D\xE7\x3B\x69\x51\xD4\x6C\x8D\x9F\x90\x12\x66\xAB\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x79\x9F\x1D\x96\xC6\xB6\x79\x3F\x22\x8D\x87\xD3\x87\x03\x04\x60\x6A\x6B\x9A\x2E\x59\x89\x73\x11\xAC\x43\xD1\xF5\x13\xFF\x8D\x39\x2B\xC0\xF2\xBD\x4F\x70\x8C\xA9\x2F\xEA\x17\xC4\x0B\x54\x9E\xD4\x1B\x96\x98\x33\x3C\xA8\xAD\x62\xA2\x00\x76\xAB\x59\x69\x6E\x06\x1D\x7E\xC4\xB9\x44\x8D\x98\xAF\x12\xD4\x61\xDB\x0A\x19\x46\x47\xF3\xEB\xF7\x63\xC1\x40\x05\x40\xA5\xD2\xB7\xF4\xB5\x9A\x36\xBF\xA9\x88\x76\x88\x04\x55\x04\x2B\x9C\x87\x7F\x1A\x37\x3C\x7E\x2D\xA5\x1A\xD8\xD4\x89\x5E\xCA\xBD\xAC\x3D\x6C\xD8\x6D\xAF\xD5\xF3\x76\x0F\xCD\x3B\x88\x38\x22\x9D\x6C\x93\x9A\xC4\x3D\xBF\x82\x1B\x65\x3F\xA6\x0F\x5D\xAA\xFC\xE5\xB2\x15\xCA\xB5\xAD\xC6\xBC\x3D\xD0\x84\xE8\xEA\x06\x72\xB0\x4D\x39\x32\x78\xBF\x3E\x11\x9C\x0B\xA4\x9D\x9A\x21\xF3\xF0\x9B\x0B\x30\x78\xDB\xC1\xDC\x87\x43\xFE\xBC\x63\x9A\xCA\xC5\xC2\x1C\xC9\xC7\x8D\xFF\x3B\x12\x58\x08\xE6\xB6\x3D\xEC\x7A\x2C\x4E\xFB\x83\x96\xCE\x0C\x3C\x69\x87\x54\x73\xA4\x73\xC2\x93\xFF\x51\x10\xAC\x15\x54\x01\xD8\xFC\x05\xB1\x89\xA1\x7F\x74\x83\x9A\x49\xD7\xDC\x4E\x7B\x8A\x48\x6F\x8B\x45\xF6", @@ -146,4 +142,12 @@ redef root_certs += { ["CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI"] = "\x30\x82\x05\x74\x30\x82\x03\x5C\xA0\x03\x02\x01\x02\x02\x0F\x01\x67\x5F\x27\xD6\xFE\x7A\xE3\xE4\xAC\xBE\x09\x5B\x05\x9E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x44\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x49\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x0C\x11\x54\x65\x6C\x69\x61\x20\x46\x69\x6E\x6C\x61\x6E\x64\x20\x4F\x79\x6A\x31\x19\x30\x17\x06\x03\x55\x04\x03\x0C\x10\x54\x65\x6C\x69\x61\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x76\x32\x30\x1E\x17\x0D\x31\x38\x31\x31\x32\x39\x31\x31\x35\x35\x35\x34\x5A\x17\x0D\x34\x33\x31\x31\x32\x39\x31\x31\x35\x35\x35\x34\x5A\x30\x44\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x46\x49\x31\x1A\x30\x18\x06\x03\x55\x04\x0A\x0C\x11\x54\x65\x6C\x69\x61\x20\x46\x69\x6E\x6C\x61\x6E\x64\x20\x4F\x79\x6A\x31\x19\x30\x17\x06\x03\x55\x04\x03\x0C\x10\x54\x65\x6C\x69\x61\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x76\x32\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB2\xD0\x3F\x07\xBC\xE2\x7B\xD0\x6B\x99\xF8\xE2\x77\x69\xE7\xCE\x9D\xA4\x03\xBC\x82\x6D\xA1\xFE\x81\x65\x1F\x4C\x27\xAC\x8E\x00\xBA\x16\x7B\xEB\x30\x6A\x00\xC0\xB3\x74\x68\x7E\xB2\xAF\xC7\xD5\x62\xB3\x7A\x3F\x50\xCA\x8C\x36\x44\x24\x63\xD2\x36\xE9\x0C\x85\xF6\x43\x76\xD5\x4C\xA1\x60\x72\x67\xE2\x28\x33\xA5\xCB\x31\xB8\x3A\x22\x23\x34\xB8\x7D\xBD\x56\x22\x40\x9D\xEA\xF4\x7B\x03\xAD\x68\xFC\xB2\x81\x4F\x98\xD0\x74\xEA\x8D\xE5\x7D\xCD\x63\xC3\xA3\xF6\xDE\x92\xC2\x58\x19\xE0\x96\xBB\xC5\xC4\xA9\x3D\xA5\x74\x96\xFE\xAF\xF9\x89\xAA\xBD\x95\x17\x54\xD8\x78\x44\xF1\x0C\x77\x15\x92\xE0\x98\x42\xA7\xA4\xD6\xAA\x20\x92\xCD\xC1\xA0\xB3\x96\xB2\x3A\x84\x42\x8D\x7D\xD5\x95\xE4\xD6\xDB\xE9\x62\xC4\x58\xB3\x79\xC5\x8C\xD3\x35\x33\x83\x9F\x75\xA1\x52\x27\x61\x38\xF1\x59\x3D\x8E\x50\xE0\xBD\x79\x3C\xE7\x6C\x96\xFE\x5E\xD9\x02\x65\xB4\x8E\x5C\xD0\x11\x34\xDF\x5D\xBF\x52\xA7\x81\x00\xC3\x7F\x99\x45\x99\x15\xD5\x17\xC8\x0A\x53\xEC\x63\xF3\x99\x7D\xCC\x69\x12\x86\xC2\x17\xF0\x01\x9E\xBF\x84\xBC\xD1\x52\xCB\x1B\x92\x66\xCE\xA4\x53\xE5\xA1\xBF\xC4\xDB\x09\xD6\xE6\x89\x56\x2B\xC8\xE3\x7C\xDE\xE3\xFF\x89\xE5\x35\x6E\x28\xE8\x6C\x0B\x23\x51\xA9\x25\x05\xEB\x48\xF8\xDD\xB1\xCA\xFA\x6C\x08\x51\xEF\xB7\x18\x6C\x44\xCA\x26\xE1\x73\xC6\x89\x06\x81\xE5\x8A\xAC\xB0\xE2\x29\xC6\xB9\x24\xB3\x6B\x44\x11\xF4\xA5\x43\xC2\x4C\x43\xE5\x70\x36\x8C\xB6\x33\x57\x7A\x95\x2E\x82\xA0\xF4\x5C\x10\xB3\x61\x83\xF6\x02\x05\x86\x2E\x7C\x2D\x6C\xDC\x03\x46\x6E\x35\x93\xD5\x7A\x95\x2F\xDE\x20\xD8\x5B\x7E\x94\x90\x04\x6A\xBA\x59\x3D\x04\x05\x75\x9D\x37\xA2\x0E\x2E\x3D\xEB\xC1\xA4\x52\x83\xFE\xD0\x6B\xD4\x66\x8E\xDC\xC6\xE9\x12\x4E\x1D\x2A\x57\xAA\x10\xBC\x7C\x5E\x82\x7D\xA6\xA6\xC9\xF2\x2D\xB9\xF5\x17\x27\xAD\xD1\x0E\x89\x54\x2B\x95\xFA\xC0\xAD\x1D\x98\x14\x78\x33\x42\x86\x0A\xA9\x73\xB5\xFB\x74\x0D\xB7\x1B\x30\x19\xC4\x5A\x0E\x1C\x27\xB7\xDA\x18\xD0\xFF\x8A\xC8\x05\xBA\xF1\xAA\x1C\xA2\x37\xB7\xE6\x48\xA4\x46\x2C\x94\xEA\xA8\x76\x62\x47\x8B\x10\x53\x07\x48\x57\x6C\xE2\x92\x4D\xB6\xAE\x05\xCB\xDC\xC1\x4A\x5E\x8F\xAC\x3D\x19\x4E\xC2\xED\x60\x75\x2B\xDB\xC1\xCA\x42\xD5\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x72\xAC\xE4\x33\x79\xAA\x45\x87\xF6\xFD\xAC\x1D\x9E\xD6\xC7\x2F\x86\xD8\x24\x39\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x72\xAC\xE4\x33\x79\xAA\x45\x87\xF6\xFD\xAC\x1D\x9E\xD6\xC7\x2F\x86\xD8\x24\x39\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xA0\x3B\x59\xA7\x09\x94\x3E\x36\x84\xD2\x7E\x2F\x39\xA5\x96\x97\xFA\x11\xAD\xFC\x67\xF3\x71\x09\xF2\xB2\x89\x84\x67\x44\xAF\xB9\xEF\xED\x96\xEC\x9C\x64\xDB\x32\x30\x6F\x67\x9A\xAC\x7E\x5F\xB2\xAB\x01\x36\x7E\x81\xFA\xE4\x84\x5E\xD2\xAC\x36\xE0\x6B\x62\xC5\x7D\x4B\x0E\x82\x6D\xD2\x76\x62\xD1\xFE\x97\xF8\x9F\x30\x7C\x18\xF9\xB4\x52\x77\x82\x1D\x76\xDB\xD3\x1D\xA9\xF0\xC1\x9A\x00\xBD\x6D\x75\xD8\x7D\xE7\xFA\xC7\x38\xA3\x9C\x70\xE8\x46\x79\x03\xAF\x2E\x74\xDB\x75\xF8\x6E\x53\x0C\x03\xC8\x99\x1A\x89\x35\x19\x3C\xD3\xC9\x54\x7C\xA8\xF0\x2C\xE6\x6E\x07\x79\x6F\x6A\xE1\xE6\xEA\x91\x82\x69\x0A\x1D\xC3\x7E\x59\xA2\x9E\x6B\x46\x15\x98\x5B\xD3\xAF\x46\x1D\x62\xC8\xCE\x80\x52\x49\x11\x3F\xC9\x04\x12\xC3\x13\x7C\x3F\x3B\x8A\x96\xDB\x3C\xA0\x1E\x0A\xB4\x8B\x54\xB2\x24\x67\x0D\xEF\x82\xCB\xBE\x3C\x7D\xD1\xE2\x7F\xAE\x16\xD6\x56\x58\xB9\xDA\x20\xB1\x83\x15\xA1\xEF\x8A\x4D\x32\x6F\x41\x2F\x13\x52\x82\x94\xD7\x1A\xC1\x78\xA2\x51\xDD\x2B\x70\x6D\xB7\x1A\xF9\xF7\xB0\xE0\x67\x97\x56\xDB\x7C\x61\x53\x09\x03\x28\x02\x40\xC7\xB3\xD8\xFD\x9C\x70\x6A\xC6\x28\xC3\x85\xE9\xE2\xED\x1A\x93\xA0\xDE\x4B\x98\xA2\x84\x3E\x05\x77\x01\x96\x3D\xFB\xB4\x20\x0F\x9C\x72\x02\x7A\x12\x2F\xD5\xA3\xBA\x51\x78\xAF\x2A\x2B\x44\x65\x4E\xB5\xFD\x0A\xE8\xC1\xCD\x79\x87\x61\x2B\xDE\x80\x57\x45\xBF\x67\xF1\x9B\x91\x5E\xA5\xA4\xEC\x59\x48\x10\x0D\x38\xC7\xB0\xFA\xC3\x44\x6D\x04\xF5\x78\x50\x1C\x92\x96\x5B\xDA\xF5\xB8\x2E\xBA\x5B\xCF\xE5\xF0\x6A\x9D\x4B\x2F\x58\x73\x2D\x4F\x2D\xC4\x1C\x3E\xF4\xB3\x3F\xAB\x15\x0E\x3B\x19\x41\x8A\xA4\xC1\x57\x12\x66\x71\x4C\xFA\x53\xE3\x57\xEB\x62\x95\x09\x9E\x54\xDD\xD1\xC2\x3C\x57\x3C\xBD\x38\xAD\x98\x64\xB7\xB8\x03\x9A\x53\x56\x60\x5D\xB3\xD8\x42\x1B\x5C\x4B\x12\x8A\x1C\xEB\xEB\x7D\xC6\x7A\x69\xC7\x27\x7F\xA4\xF8\x8B\xF2\xE4\x94\x66\x87\x4B\xE9\x94\x07\x09\x12\x79\x8A\xB2\xEB\x74\x04\xDC\xCE\xF4\x44\x59\xE0\x16\xCA\xC5\x2C\x58\xD7\x3C\x7B\xCF\x62\x86\x6A\x50\x7D\x35\x36\x66\xA7\xFB\x37\xE7\x28\xC7\xD8\xD0\xAD\xA5\x69\x94\x8F\xE8\xC1\xDF\x24\xF8\x1B\x07\x31\x87\x81\xD8\x5D\xF6\xE8\x28\xD8\x4A\x52\x80\xAC\x13\xEE\x50\x14\x1E\x98\xC7", ["CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE"] = "\x30\x82\x02\xDB\x30\x82\x02\x60\xA0\x03\x02\x01\x02\x02\x10\x7C\xC9\x8F\x2B\x84\xD7\xDF\xEA\x0F\xC9\x65\x9A\xD3\x4B\x4D\x96\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x42\x52\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x1E\x17\x0D\x32\x30\x30\x32\x31\x31\x30\x39\x34\x35\x30\x30\x5A\x17\x0D\x33\x35\x30\x32\x31\x31\x30\x39\x34\x34\x35\x39\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x42\x52\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xC6\xCB\xC7\x28\xD1\xFB\x84\xF5\x9A\xEF\x42\x14\x20\xE1\x43\x6B\x6E\x75\xAD\xFC\x2B\x03\x84\xD4\x76\x93\x25\xD7\x59\x3B\x41\x65\x6B\x1E\xE6\x34\x2A\xBB\x74\xF6\x12\xCE\xE8\x6D\xE7\xAB\xE4\x3C\x4E\x3F\x44\x08\x8B\xCD\x16\x71\xCB\xBF\x92\x99\xF4\xA4\xD7\x3C\x50\x54\x52\x90\x85\x83\x78\x94\x67\x67\xA3\x1C\x09\x19\x3D\x75\x34\x85\xDE\xED\x60\x7D\xC7\x0C\xB4\x41\x52\xB9\x6E\xE5\xEE\x42\xA3\x82\x01\x0D\x30\x82\x01\x09\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x73\x91\x10\xAB\xFF\x55\xB3\x5A\x7C\x09\x25\xD5\xB2\xBA\x08\xA0\x6B\xAB\x1F\x6D\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x81\xC6\x06\x03\x55\x1D\x1F\x04\x81\xBE\x30\x81\xBB\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x63\x72\x6C\x2F\x64\x2D\x74\x72\x75\x73\x74\x5F\x62\x72\x5F\x72\x6F\x6F\x74\x5F\x63\x61\x5F\x31\x5F\x32\x30\x32\x30\x2E\x63\x72\x6C\x30\x79\xA0\x77\xA0\x75\x86\x73\x6C\x64\x61\x70\x3A\x2F\x2F\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x43\x4E\x3D\x44\x2D\x54\x52\x55\x53\x54\x25\x32\x30\x42\x52\x25\x32\x30\x52\x6F\x6F\x74\x25\x32\x30\x43\x41\x25\x32\x30\x31\x25\x32\x30\x32\x30\x32\x30\x2C\x4F\x3D\x44\x2D\x54\x72\x75\x73\x74\x25\x32\x30\x47\x6D\x62\x48\x2C\x43\x3D\x44\x45\x3F\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x72\x65\x76\x6F\x63\x61\x74\x69\x6F\x6E\x6C\x69\x73\x74\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\x94\x90\x2D\x13\xFA\xE1\x63\xF8\x61\x63\xE8\xAD\x85\x78\x54\x91\x9C\xB8\x93\x38\x3E\x1A\x41\xDA\x40\x16\x53\x42\x08\xCA\x2F\x8E\xF1\x3E\x81\x56\xC0\xAA\xD8\xED\x18\xC4\xB0\xAE\xF4\x3E\xFA\x26\x02\x31\x00\xF3\x28\xE2\xC6\xDB\x2B\x99\xFB\xB7\x51\xB8\x24\xA3\xA4\x94\x7A\x1A\x3F\xE6\x36\xE2\x03\x57\x33\x8A\x30\xCB\x82\xC7\xD6\x14\x11\xD5\x75\x63\x5B\x14\x95\x9C\x1F\x01\xCF\xD8\xD5\x72\xA7\x0F\x3B", ["CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE"] = "\x30\x82\x02\xDB\x30\x82\x02\x60\xA0\x03\x02\x01\x02\x02\x10\x5F\x02\x41\xD7\x7A\x87\x7C\x4C\x03\xA3\xAC\x96\x8D\xFB\xFF\xD0\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x1E\x17\x0D\x32\x30\x30\x32\x31\x31\x31\x30\x30\x30\x30\x30\x5A\x17\x0D\x33\x35\x30\x32\x31\x31\x30\x39\x35\x39\x35\x39\x5A\x30\x48\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x15\x30\x13\x06\x03\x55\x04\x0A\x13\x0C\x44\x2D\x54\x72\x75\x73\x74\x20\x47\x6D\x62\x48\x31\x22\x30\x20\x06\x03\x55\x04\x03\x13\x19\x44\x2D\x54\x52\x55\x53\x54\x20\x45\x56\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x31\x20\x32\x30\x32\x30\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xF1\x0B\xDD\x86\x43\x20\x19\xDF\x97\x85\xE8\x22\x4A\x9B\xCF\x9D\x98\xBF\xB4\x05\x26\xC9\xCB\xE3\xA6\xD2\x8F\xC5\x9E\x78\x7B\x31\x89\xA9\x89\xAD\x27\x3C\x65\x10\x82\xFC\xDF\xC3\x9D\x4E\xF0\x33\x23\xC4\xD2\x32\xF5\x1C\xB0\xDF\x33\x17\x5D\xC5\xF0\xB1\x8A\xF9\xEF\xB9\xB7\x14\xCA\x29\x4A\xC2\x0F\xA9\x7F\x75\x65\x49\x2A\x30\x67\xF4\x64\xF7\xD6\x1A\x77\xDA\xC3\xC2\x97\x61\x42\x7B\x49\xAD\xA3\x82\x01\x0D\x30\x82\x01\x09\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x7F\x10\x01\x16\x37\x3A\xA4\x28\xE4\x50\xF8\xA4\xF7\xEC\x6B\x32\xB6\xFE\xE9\x8B\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x81\xC6\x06\x03\x55\x1D\x1F\x04\x81\xBE\x30\x81\xBB\x30\x3E\xA0\x3C\xA0\x3A\x86\x38\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x63\x72\x6C\x2F\x64\x2D\x74\x72\x75\x73\x74\x5F\x65\x76\x5F\x72\x6F\x6F\x74\x5F\x63\x61\x5F\x31\x5F\x32\x30\x32\x30\x2E\x63\x72\x6C\x30\x79\xA0\x77\xA0\x75\x86\x73\x6C\x64\x61\x70\x3A\x2F\x2F\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x64\x2D\x74\x72\x75\x73\x74\x2E\x6E\x65\x74\x2F\x43\x4E\x3D\x44\x2D\x54\x52\x55\x53\x54\x25\x32\x30\x45\x56\x25\x32\x30\x52\x6F\x6F\x74\x25\x32\x30\x43\x41\x25\x32\x30\x31\x25\x32\x30\x32\x30\x32\x30\x2C\x4F\x3D\x44\x2D\x54\x72\x75\x73\x74\x25\x32\x30\x47\x6D\x62\x48\x2C\x43\x3D\x44\x45\x3F\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x72\x65\x76\x6F\x63\x61\x74\x69\x6F\x6E\x6C\x69\x73\x74\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\xCA\x3C\xC6\x2A\x75\xC2\x5E\x75\x62\x39\x36\x00\x60\x5A\x8B\xC1\x93\x99\xCC\xD9\xDB\x41\x3B\x3B\x87\x99\x17\x3B\xD5\xCC\x4F\xCA\x22\xF7\xA0\x80\xCB\xF9\xB4\xB1\x1B\x56\xF5\x72\xD2\xFC\x19\xD1\x02\x31\x00\x91\xF7\x30\x93\x3F\x10\x46\x2B\x71\xA4\xD0\x3B\x44\x9B\xC0\x29\x02\x05\xB2\x41\x77\x51\xF3\x79\x5A\x9E\x8E\x14\xA0\x4E\x42\xD2\x5B\x81\xF3\x34\x6A\x03\xE7\x22\x38\x50\x5B\xED\x19\x4F\x43\x16", + ["CN=DigiCert TLS ECC P384 Root G5,O=DigiCert\, Inc.,C=US"] = "\x30\x82\x02\x19\x30\x82\x01\x9F\xA0\x03\x02\x01\x02\x02\x10\x09\xE0\x93\x65\xAC\xF7\xD9\xC8\xB9\x3E\x1C\x0B\x04\x2A\x2E\xF3\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x45\x43\x43\x20\x50\x33\x38\x34\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x1E\x17\x0D\x32\x31\x30\x31\x31\x35\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x31\x31\x34\x32\x33\x35\x39\x35\x39\x5A\x30\x4E\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x45\x43\x43\x20\x50\x33\x38\x34\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xC1\x44\xA1\xCF\x11\x97\x50\x9A\xDE\x23\x82\x35\x07\xCD\xD0\xCB\x18\x9D\xD2\xF1\x7F\x77\x35\x4F\x3B\xDD\x94\x72\x52\xED\xC2\x3B\xF8\xEC\xFA\x7B\x6B\x58\x20\xEC\x99\xAE\xC9\xFC\x68\xB3\x75\xB9\xDB\x09\xEC\xC8\x13\xF5\x4E\xC6\x0A\x1D\x66\x30\x4C\xBB\x1F\x47\x0A\x3C\x61\x10\x42\x29\x7C\xA5\x08\x0E\xE0\x22\xE9\xD3\x35\x68\xCE\x9B\x63\x9F\x84\xB5\x99\x4D\x58\xA0\x8E\xF5\x54\xE7\x95\xC9\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xC1\x51\x45\x50\x59\xAB\x3E\xE7\x2C\x5A\xFA\x20\x22\x12\x07\x80\x88\x7C\x11\x6A\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\x89\x6A\x8D\x47\xE7\xEC\xFC\x6E\x55\x03\xD9\x67\x6C\x26\x4E\x83\xC6\xFD\xC9\xFB\x2B\x13\xBC\xB7\x7A\x8C\xB4\x65\xD2\x69\x69\x63\x13\x63\x3B\x26\x50\x2E\x01\xA1\x79\x06\x91\x9D\x48\xBF\xC2\xBE\x02\x30\x47\xC3\x15\x7B\xB1\xA0\x91\x99\x49\x93\xA8\x3C\x7C\xE8\x46\x06\x8B\x2C\xF2\x31\x00\x94\x9D\x62\xC8\x89\xBD\x19\x84\x14\xE9\xA5\xFB\x01\xB8\x0D\x76\x43\x8C\x2E\x53\xCB\x7C\xDF\x0C\x17\x96\x50", + ["CN=DigiCert TLS RSA4096 Root G5,O=DigiCert\, Inc.,C=US"] = "\x30\x82\x05\x66\x30\x82\x03\x4E\xA0\x03\x02\x01\x02\x02\x10\x08\xF9\xB4\x78\xA8\xFA\x7E\xDA\x6A\x33\x37\x89\xDE\x7C\xCF\x8A\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x25\x30\x23\x06\x03\x55\x04\x03\x13\x1C\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x52\x53\x41\x34\x30\x39\x36\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x1E\x17\x0D\x32\x31\x30\x31\x31\x35\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x31\x31\x34\x32\x33\x35\x39\x35\x39\x5A\x30\x4D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x0A\x13\x0E\x44\x69\x67\x69\x43\x65\x72\x74\x2C\x20\x49\x6E\x63\x2E\x31\x25\x30\x23\x06\x03\x55\x04\x03\x13\x1C\x44\x69\x67\x69\x43\x65\x72\x74\x20\x54\x4C\x53\x20\x52\x53\x41\x34\x30\x39\x36\x20\x52\x6F\x6F\x74\x20\x47\x35\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xB3\xD0\xF4\xC9\x79\x11\x9D\xFD\xFC\x66\x81\xE7\xCC\xD5\xE4\xBC\xEC\x81\x3E\x6A\x35\x8E\x2E\xB7\xE7\xDE\xAF\xF9\x07\x4D\xCF\x30\x9D\xEA\x09\x0B\x99\xBD\x6C\x57\xDA\x18\x4A\xB8\x78\xAC\x3A\x39\xA8\xA6\x48\xAC\x2E\x72\xE5\xBD\xEB\xF1\x1A\xCD\xE7\xA4\x03\xA9\x3F\x11\xB4\xD8\x2F\x89\x16\xFB\x94\x01\x3D\xBB\x2F\xF8\x13\x05\xA1\x78\x1C\x8E\x28\xE0\x45\xE0\x83\xF4\x59\x1B\x95\xB3\xAE\x7E\x03\x45\xE5\xBE\xC2\x42\xFE\xEE\xF2\x3C\xB6\x85\x13\x98\x32\x9D\x16\xA8\x29\xC2\x0B\x1C\x38\xDC\x9F\x31\x77\x5C\xBF\x27\xA3\xFC\x27\xAC\xB7\x2B\xBD\x74\x9B\x17\x2D\xF2\x81\xDA\x5D\xB0\xE1\x23\x17\x3E\x88\x4A\x12\x23\xD0\xEA\xCF\x9D\xDE\x03\x17\xB1\x42\x4A\xA0\x16\x4C\xA4\x6D\x93\xE9\x3F\x3A\xEE\x3A\x7C\x9D\x58\x9D\xF4\x4E\x8F\xFC\x3B\x23\xC8\x6D\xB8\xE2\x05\xDA\xCC\xEB\xEC\xC3\x31\xF4\xD7\xA7\x29\x54\x80\xCF\x44\x5B\x4C\x6F\x30\x9E\xF3\xCC\xDD\x1F\x94\x43\x9D\x4D\x7F\x70\x70\x0D\xD4\x3A\xD1\x37\xF0\x6C\x9D\x9B\xC0\x14\x93\x58\xEF\xCD\x41\x38\x75\xBC\x13\x03\x95\x7C\x7F\xE3\x5C\xE9\xD5\x0D\xD5\xE2\x7C\x10\x62\xAA\x6B\xF0\x3D\x76\xF3\x3F\xA3\xE8\xB0\xC1\xFD\xEF\xAA\x57\x4D\xAC\x86\xA7\x18\xB4\x29\xC1\x2C\x0E\xBF\x64\xBE\x29\x8C\xD8\x02\x2D\xCD\x5C\x2F\xF2\x7F\xEF\x15\xF4\x0C\x15\xAC\x0A\xB0\xF1\xD3\x0D\x4F\x6A\x4D\x77\x97\x01\xA0\xF1\x66\xB7\xB7\xCE\xEF\xCE\xEC\xEC\xA5\x75\xCA\xAC\xE3\xE1\x63\xF7\xB8\xA1\x04\xC8\xBC\x7B\x3F\x5D\x2D\x16\x22\x56\xED\x48\x49\xFE\xA7\x2F\x79\x30\x25\x9B\xBA\x6B\x2D\x3F\x9D\x3B\xC4\x17\xE7\x1D\x2E\xFB\xF2\xCF\xA6\xFC\xE3\x14\x2C\x96\x98\x21\x8C\xB4\x91\xE9\x19\x60\x83\xF2\x30\x2B\x06\x73\x50\xD5\x98\x3B\x06\xE9\xC7\x8A\x0C\x60\x8C\x28\xF8\x52\x9B\x6E\xE1\xF6\x4D\xBB\x06\x24\x9B\xD7\x2B\x26\x3F\xFD\x2A\x2F\x71\xF5\xD6\x24\xBE\x7F\x31\x9E\x0F\x6D\xE8\x8F\x4F\x4D\xA3\x3F\xFF\x35\xEA\xDF\x49\x5E\x41\x8F\x86\xF9\xF1\x77\x79\x4B\x1B\xB4\xA3\x5E\x2F\xFB\x46\x02\xD0\x66\x13\x5E\x5E\x85\x4F\xCE\xD8\x70\x88\x7B\xCE\x01\xB5\x96\x97\xD7\xCD\x7D\xFD\x82\xF8\xC2\x24\xC1\xCA\x01\x39\x4F\x8D\xA2\xC1\x14\x40\x1F\x9C\x66\xD5\x0C\x09\x46\xD6\xF2\xD0\xD1\x48\x76\x56\x3A\x43\xCB\xB6\x0A\x11\x39\xBA\x8C\x13\x6C\x06\xB5\x9E\xCF\xEB\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x51\x33\x1C\xED\x36\x40\xAF\x17\xD3\x25\xCD\x69\x68\xF2\xAF\x4E\x23\x3E\xB3\x41\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x86\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\x60\xA6\xAF\x5B\x5F\x57\xDA\x89\xDB\x4B\x50\xA9\xC4\x23\x35\x21\xFF\xD0\x61\x30\x84\x91\xB7\x3F\x10\xCF\x25\x8E\xC9\xBF\x46\x34\xD9\xC1\x21\x26\x1C\x70\x19\x72\x1E\xA3\xC9\x87\xFE\xA9\x43\x64\x96\x3A\xC8\x53\x04\x0A\xB6\x41\xBB\xC4\x47\x00\xD9\x9F\x18\x18\x3B\xB2\x0E\xF3\x34\xEA\x24\xF7\xDD\xAF\x20\x60\xAE\x92\x28\x5F\x36\xE7\x5D\xE4\xDE\xC7\x3C\xDB\x50\x39\xAD\xBB\x3D\x28\x4D\x96\x7C\x76\xC6\x5B\xF4\xC1\xDB\x14\xA5\xAB\x19\x62\x07\x18\x40\x5F\x97\x91\xDC\x9C\xC7\xAB\xB5\x51\x0D\xE6\x69\x53\x55\xCC\x39\x7D\xDA\xC5\x11\x55\x72\xC5\x3B\x8B\x89\xF8\x34\x2D\xA4\x17\xE5\x17\xE6\x99\x7D\x30\x88\x21\x37\xCD\x30\x17\x3D\xB8\xF2\xBC\xA8\x75\xA0\x43\xDC\x3E\x89\x4B\x90\xAE\x6D\x03\xE0\x1C\xA3\xA0\x96\x09\xBB\x7D\xA3\xB7\x2A\x10\x44\x4B\x46\x07\x34\x63\xED\x31\xB9\x04\xEE\xA3\x9B\x9A\xAE\xE6\x31\x78\xF4\xEA\x24\x61\x3B\xAB\x58\x64\xFF\xBB\x87\x27\x62\x25\x81\xDF\xDC\xA1\x2F\xF6\xED\xA7\xFF\x7A\x8F\x51\x2E\x30\xF8\xA4\x01\xD2\x85\x39\x5F\x01\x99\x96\x6F\x5A\x5B\x70\x19\x46\xFE\x86\x60\x3E\xAD\x80\x10\x09\xDD\x39\x25\x2F\x58\x7F\xBB\xD2\x74\xF0\xF7\x46\x1F\x46\x39\x4A\xD8\x53\xD0\xF3\x2E\x3B\x71\xA5\xD4\x6F\xFC\xF3\x67\xE4\x07\x8F\xDD\x26\x19\xE1\x8D\x5B\xFA\xA3\x93\x11\x9B\xE9\xC8\x3A\xC3\x55\x68\x9A\x92\xE1\x52\x76\x38\xE8\xE1\xBA\xBD\xFB\x4F\xD5\xEF\xB3\xE7\x48\x83\x31\xF0\x82\x21\xE3\xB6\xBE\xA7\xAB\x6F\xEF\x9F\xDF\x4C\xCF\x01\xB8\x62\x6A\x23\x3D\xE7\x09\x4D\x80\x1B\x7B\x30\xA4\xC3\xDD\x07\x7F\x34\xBE\xA4\x26\xB2\xF6\x41\xE8\x09\x1D\xE3\x20\x98\xAA\x37\x4F\xFF\xF7\xF1\xE2\x29\x70\x31\x47\x3F\x74\xD0\x14\x16\xFA\x21\x8A\x02\xD5\x8A\x09\x94\x77\x2E\xF2\x59\x28\x8B\x7C\x50\x92\x0A\x66\x78\x38\x83\x75\xC4\xB5\x5A\xA8\x11\xC6\xE5\xC1\x9D\x66\x55\xCF\x53\xC4\xAF\xD7\x75\x85\xA9\x42\x13\x56\xEC\x21\x77\x81\x93\x5A\x0C\xEA\x96\xD9\x49\xCA\xA1\x08\xF2\x97\x3B\x6D\x9B\x04\x18\x24\x44\x8E\x7C\x01\xF2\xDC\x25\xD8\x5E\x86\x9A\xB1\x39\xDB\xF5\x91\x32\x6A\xD1\xA6\x70\x8A\xA2\xF7\xDE\xA4\x45\x85\x26\xA8\x1E\x8C\x5D\x29\x5B\xC8\x4B\xD8\x9A\x6A\x03\x5E\x70\xF2\x85\x4F\x6C\x4B\x68\x2F\xCA\x54\xF6\x8C\xDA\x32\xFE\xC3\x6B\x83\x3F\x38\xC6\x7E", + ["CN=Certainly Root R1,O=Certainly,C=US"] = "\x30\x82\x05\x47\x30\x82\x03\x2F\xA0\x03\x02\x01\x02\x02\x11\x00\x8E\x0F\xF9\x4B\x90\x71\x68\x65\x33\x54\xF4\xD4\x44\x39\xB7\xE0\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x52\x31\x30\x1E\x17\x0D\x32\x31\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x52\x31\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xD0\x36\xD4\x1F\xEA\xDD\xAB\xE4\xD1\xB6\xE6\xFB\x22\xC0\xDD\x13\x0D\x6A\x7B\x22\x13\x1C\x97\x3C\x68\x63\x66\x32\x9C\x03\xB5\x8D\xA4\x81\x83\xDA\x78\x30\x11\xCF\xDC\xB2\x2B\xBE\x92\xBF\x8E\xE4\xC4\x13\xBE\xA4\x68\x4C\xDA\x02\x68\x16\x74\xBE\xB2\xDD\x04\xE4\x6B\x2A\xDD\x37\x1F\x60\x2C\xDB\xF5\xF7\xA1\x7C\x95\xB7\x0C\x70\x86\x2E\xF1\x3A\xEF\x52\xF7\xCC\xD3\x9B\xF9\x8B\xBE\x0E\xDF\x31\xB7\x9D\x68\x5C\x92\xA6\xF5\xE5\xF3\x0A\x34\xB5\xFF\x7B\xA2\xE4\x87\xA1\xC6\xAF\x17\x00\xEF\x03\x91\xED\xA9\x1C\x4E\x71\x3D\xD2\x8B\x6C\x89\xF4\x78\x86\xE6\x6A\x49\xA0\xCE\xB5\xD2\xB0\xAB\x9B\xF6\xF4\xD4\x2E\xE3\x72\xF9\x36\xC6\xEB\x15\xB7\x25\x8C\x3A\xFC\x25\x0D\xB3\x22\x73\x21\x74\xC8\x4A\x96\x61\x92\xF5\x2F\x0B\x18\xA5\xF4\xAD\xE2\xEE\x41\xBD\x01\x79\xFA\x96\x8C\x8D\x17\x02\x30\xB4\xF9\xAF\x78\x1A\x8C\xB4\x36\x10\x10\x07\x05\x70\xD0\xF4\x31\x90\x8A\x51\xC5\x86\x26\x79\xB2\x11\x88\x5E\xC5\xF0\x0A\x54\xCD\x49\xA6\xBF\x02\x9C\xD2\x44\xA7\xED\xE3\x78\xEF\x46\x5E\x6D\x71\xD1\x79\x70\x1C\x46\x5F\x51\xE9\xC9\x37\xDC\x5F\x7E\x69\x7B\x41\xDF\x34\x45\xE0\x3B\x84\xF4\xA1\x8A\x0A\x36\x9E\x37\xCC\x62\x52\xE1\x89\x0D\x28\xF9\x7A\x23\xB1\x0D\x3D\x3D\x9A\xFD\x9D\x81\xEF\x2C\x90\xC0\x7B\x44\x4E\xBB\x49\xE0\x0E\x4A\x56\x92\xBC\xCB\xB5\xDD\x79\x17\x89\x91\xDE\x61\x89\x74\x92\xA8\xE3\x32\x85\xBE\x4E\x85\xA4\x4B\x59\xCB\x2B\xC5\x78\x8E\x71\x54\xD0\x02\x37\x99\x8C\xE5\x49\xEA\xE0\x54\x72\xA4\x11\x06\x2F\x0B\x8C\xC1\x5B\xBE\xB5\xA1\xB0\x53\x6E\x9C\xB8\x60\x91\x1F\x59\x6B\xF9\x2D\xF4\x94\x0A\x97\xB5\xEC\xC5\x76\x03\x54\x1B\x65\x52\xBA\x4C\x92\x56\x51\x35\xA0\x40\xD8\x29\xDB\xAE\x52\x76\x3B\x2D\x30\x40\x9B\x8A\xD0\x42\x56\xB4\xB7\x88\x01\xA4\x87\x3B\x53\x96\xCD\xA3\x16\x8F\xF3\x66\xAA\x17\xB1\xC7\x60\xE0\xC1\x43\x05\x0C\xEE\x9B\x5B\x60\x6F\x06\x5C\x87\x5B\x27\xF9\x40\x11\x9E\x9C\x33\xC1\xB7\xE5\x35\x57\x05\x7F\x27\xCE\x17\x20\x8C\x1C\xFC\xF1\xFB\xDA\x31\x29\x49\xED\xF5\x0B\x84\xA7\x4F\xC1\xF6\x4E\xC2\x28\x9C\xFA\xEE\xE0\xAF\x07\xFB\x33\x11\x7A\x21\x4F\x0B\x21\x10\xB6\x40\x3A\xAB\x22\x3A\x04\x9C\x8B\x9B\x84\x86\x72\x9A\xD2\xA7\xA5\xC4\xB4\x75\x91\xA9\x2B\x23\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xE0\xAA\x3F\x25\x8D\x9F\x44\x5C\xC1\x3A\xE8\x2E\xAE\x77\x4C\x84\x3E\x67\x0C\xF4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\xB9\x57\xAF\xB8\x12\xDA\x57\x83\x8F\x68\x0B\x33\x1D\x03\x53\x55\xF4\x95\x70\xE4\x2B\x3D\xB0\x39\xEB\xFA\x89\x62\xFD\xF7\xD6\x18\x04\x2F\x21\x34\xDD\xF1\x68\xF0\xD5\x96\x5A\xDE\xC2\x80\xA3\xC1\x8D\xC6\x6A\xF7\x59\x77\xAE\x15\x64\xCF\x5B\x79\x05\x77\x66\xEA\x8C\xD3\x6B\x0D\xDD\xF1\x59\x2C\xC1\x33\xA5\x30\x80\x15\x45\x07\x45\x1A\x31\x22\xB6\x92\x00\xAB\x99\x4D\x3A\x8F\x77\xAF\xA9\x22\xCA\x2F\x63\xCA\x15\xD6\xC7\xC6\xF0\x3D\x6C\xFC\x1C\x0D\x98\x10\x61\x9E\x11\xA2\x22\xD7\x0A\xF2\x91\x7A\x6B\x39\x0E\x2F\x30\xC3\x36\x49\x9F\xE0\xE9\x0F\x02\x44\x50\x37\x94\x55\x7D\xEA\x9F\xF6\x3B\xBA\x94\xA5\x4C\xE9\xBC\x3E\x51\xB4\xE8\xCA\x92\x36\x54\x6D\x5C\x25\x28\xDA\xDD\xAD\x14\xFD\xD3\xEE\xE2\x22\x05\xEB\xD0\xF2\xB7\x68\x12\xD7\x5A\x8A\x41\x1A\xC6\x92\xA5\x5A\x3B\x63\x45\x4F\xBF\xE1\x3A\x77\x22\x2F\x5C\xBF\x46\xF9\x5A\x03\x85\x13\x42\x5F\xCA\xDE\x53\xD7\x62\xB5\xA6\x35\x04\xC2\x47\xFF\x99\xFD\x84\xDF\x5C\xCE\xE9\x5E\x80\x28\x41\xF2\x7D\xE7\x1E\x90\xD8\x4F\x76\x3E\x82\x3C\x0D\xFC\xA5\x03\xFA\x7B\x1A\xD9\x45\x1E\x60\xDA\xC4\x8E\xF9\xFC\x2B\xC9\x7B\x95\xC5\x2A\xFF\xAA\x89\xDF\x82\x31\x0F\x72\xFF\x0C\x27\xD7\x0A\x1E\x56\x00\x50\x1E\x0C\x90\xC1\x96\xB5\xD8\x14\x85\xBB\xA7\x0D\x16\xC1\xF8\x07\x24\x1B\xBA\x85\xA1\x1A\x05\x09\x80\xBA\x95\x63\xC9\x3A\xEC\x25\x9F\x7F\x9D\xBA\xA4\x47\x15\x9B\x44\x70\xF1\x6A\x4B\xD6\x38\x5E\x43\xF3\x18\x7E\x50\x6E\xE9\x5A\x28\xE6\x65\xE6\x77\x1B\x3A\xFD\x1D\xBE\x03\x26\xA3\xDB\xD4\xE1\xBB\x7E\x96\x27\x2B\x1D\xEE\xA4\xFB\xDA\x25\x54\x13\x03\xDE\x39\xC6\xC3\x1F\x4D\x90\xEC\x8F\x1B\x4A\xD2\x1C\xED\x85\x95\x38\x50\x79\x46\xD6\xC1\x90\x50\x31\xA9\x5C\x9A\x6E\x1D\xF5\x33\x56\x8B\xA7\x99\xD2\xF2\xC8\x2C\x33\x93\x92\x30\xC7\x4E\x8C\x65\x33\x10\x64\x17\xFD\x24\x17\x96\xD1\x8D\xC2\x3A\x6A\x2B\xEB\x13\x8B\x44\xF2\x21\xF3\x4A\x1A\xB7\x77\x5F\xD7\xED\x88\xA4\x72\xE5\x39\x1F\x95\x9D\xBE\x67\xC1\x70\x11\x3D\xBB\xF4\xF8\x49\xB7\xE3\x26\x97\x3A\x9F\xD2\x5F\x7C\xFB\xC0\x99\x7C\x39\x29\xE0\x7B\x1D\xBF\x0D\xA7\x8F\xD2\x29\x34\x6E\x24\x15\xCB\xDE\x90\x5E\xBF\x1A\xC4\x66\xEA\xC2\xE6\xBA\x39\x5F\x8A\x99\xA9\x41\x59\x07\xB0\x2C\xAF", + ["CN=Certainly Root E1,O=Certainly,C=US"] = "\x30\x82\x01\xF7\x30\x82\x01\x7D\xA0\x03\x02\x01\x02\x02\x10\x06\x25\x33\xB1\x47\x03\x33\x27\x5C\xF9\x8D\x9A\xB9\xBF\xCC\xF8\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x45\x31\x30\x1E\x17\x0D\x32\x31\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x34\x36\x30\x34\x30\x31\x30\x30\x30\x30\x30\x30\x5A\x30\x3D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x12\x30\x10\x06\x03\x55\x04\x0A\x13\x09\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x31\x1A\x30\x18\x06\x03\x55\x04\x03\x13\x11\x43\x65\x72\x74\x61\x69\x6E\x6C\x79\x20\x52\x6F\x6F\x74\x20\x45\x31\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xDE\x6F\xF8\x7F\x1C\xDF\xED\xF9\x47\x87\x86\xB1\xA4\xC0\x8A\xF8\x82\x97\x80\xEA\x8F\xC8\x4A\x5E\x2A\x7D\x88\x68\xA7\x01\x62\x14\x91\x24\x7A\x5C\x9E\xA3\x17\x7D\x8A\x86\x21\x34\x18\x50\x1B\x10\xDE\xD0\x37\x4B\x26\xC7\x19\x60\x80\xE9\x34\xBD\x60\x19\x36\x40\xD6\x29\x87\x09\x3C\x91\x7A\xF6\xBC\x13\x23\xDD\x59\x4E\x04\x5E\xCF\xC8\x02\x1C\x18\x53\xC1\x31\xD8\xDA\x20\xE9\x44\x8D\xE4\x76\xA3\x42\x30\x40\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xF3\x28\x18\xCB\x64\x75\xEE\x29\x2A\xEB\xED\xAE\x23\x58\x38\x85\xEB\xC8\x22\x07\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x31\x00\xB1\x8E\x5A\x20\xC3\xB2\x19\x62\x4D\xDE\xB0\x4F\xDF\x6E\xD2\x70\x8A\xF1\x9F\x7E\x6A\x8C\xE6\xBA\xDE\x83\x69\xCA\x69\xB3\xA9\x05\xB5\x96\x92\x17\x87\xC2\xD2\xEA\xD0\x7B\xCE\xD8\x41\x5B\x7C\xAE\x02\x30\x46\xDE\xEA\xCB\x5D\x9A\xEC\x32\xC2\x65\x16\xB0\x4C\x30\x5C\x30\xF3\xDA\x4E\x73\x86\x06\xD8\xCE\x89\x04\x48\x37\x37\xF8\xDD\x33\x51\x9D\x70\xAF\x7B\x55\xD8\x01\x2E\x7D\x05\x64\x0E\x86\xB8\x91", + ["CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR"] = "\x30\x82\x05\xF3\x30\x82\x03\xDB\xA0\x03\x02\x01\x02\x02\x14\x0D\x4D\xC5\xCD\x16\x22\x95\x96\x08\x7E\xB8\x0B\x7F\x15\x06\x34\xFB\x79\x10\x34\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x52\x53\x41\x20\x76\x33\x30\x1E\x17\x0D\x32\x30\x30\x33\x31\x38\x30\x39\x30\x37\x31\x37\x5A\x17\x0D\x34\x35\x30\x33\x31\x32\x30\x39\x30\x37\x31\x37\x5A\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x52\x53\x41\x20\x76\x33\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xA2\x66\xF0\x89\xB7\x72\x7B\xEE\x09\xC9\x63\xD2\xD3\x43\xDD\x5E\xC3\xA6\x84\x38\x4A\xF1\x8D\x81\xBB\x14\xBD\x47\xE8\x40\x17\xF3\x3D\xC3\x78\x45\x72\xA6\x2E\x90\xDE\x9A\x3A\xD4\x20\x71\xCA\xBC\x9F\x1D\x4B\x97\x0A\xC7\x31\xBA\x3E\xD7\xFE\x25\xA9\x2A\x8E\x36\xF4\xD1\x2F\xC7\xB7\xA9\x5D\x33\xDC\x30\x70\xF8\x40\x6C\x4B\xB2\xA6\x31\x61\xD1\x34\x3C\x3D\x31\x7A\xC7\xAF\xC4\xA7\xA7\x84\xE1\x97\xA4\xE8\x4B\xF6\x17\x7C\xEE\x3C\x07\xED\xE2\x8A\x57\xDC\xB6\xFB\xF8\x43\x25\x50\xEA\x27\x81\xA8\x86\xBC\x8F\x52\x4A\x96\x3A\x60\x1A\x96\xBB\xFD\x73\xF4\x85\xFD\x83\xFD\x7F\x84\x6D\x34\x6C\x7F\x6A\xB7\x4B\x01\x03\xBF\xAD\x69\xB7\xD7\x32\xD9\xF5\x57\x6A\xE9\x86\x82\x3E\xA5\x66\x31\xB3\x16\x3D\xC2\xF3\x26\x60\x32\xD3\x52\x1E\xB0\x6C\xA4\x37\x3E\xF4\xF5\xAF\xEB\xE1\xDF\x80\x06\xCF\x2A\x41\xE7\x66\x09\xE1\x4B\x97\xE7\x77\xBD\x21\x6D\x29\xB6\x67\xC3\x2D\x7E\xED\xD6\x79\x65\xD1\xCF\x3A\xB6\xD1\xB1\x5E\x56\x61\x50\x7A\x5A\xCE\x4E\x50\x31\x80\x03\x98\x47\xE7\xE4\x18\x7C\x44\x5A\xC6\xA4\xB3\x3B\xC6\xC6\xC3\x3A\xF0\x6C\xC3\x8B\xC8\xA4\x91\x05\xF3\xF5\xD9\xB6\xAA\x06\xA1\xB7\xAB\xE4\xB1\xEA\x21\x14\x5C\x83\xA4\xFC\xFF\xB6\x50\xD3\x8C\x12\x26\x99\x76\x70\xE9\xC0\x0F\xA6\x74\xFC\xBB\xD0\x1B\x78\xCE\x72\x92\xE2\x28\x9C\xBC\xE6\xE9\x09\xD8\x3A\xD3\x89\xE6\xBE\x2E\x77\xDF\x01\x0A\x6F\x96\xF6\xE5\x8D\x3C\x4D\x52\x76\x1A\x56\xE1\x73\x7E\x17\xAC\x3D\xAD\x6C\xA3\x52\x12\x18\x70\xE6\x80\x4E\x33\xF2\x7E\x26\x32\xAC\x05\x8D\x38\xA4\xE6\x76\x3C\x9F\x10\x69\x0E\x6D\x9D\xD2\xC1\x79\x20\x6B\x5B\xCF\x33\x8D\xD1\x94\x76\x35\xE7\x5D\x55\xC7\xB7\xAC\x28\xAB\x46\xCC\xE7\x3B\x21\xB5\x0A\x0A\xE4\x4A\x59\xDC\x81\x35\x4B\x44\x95\x12\x0A\x67\xA5\xA1\xFF\x5B\x00\x07\xD2\xC0\xCC\xF9\x3F\xFC\x9F\x33\xF2\x00\xF8\x8C\x6C\x87\x9D\x06\x2D\xF1\xEF\xE3\xE6\x06\xFA\xC5\x66\x13\x5B\xFC\x50\x07\x9E\x71\x86\xB2\xDA\x6F\x74\x30\xCF\x93\x53\xE8\xDC\x22\xD6\xDE\x20\x1F\x61\x8D\xA3\x2E\xA3\x78\x32\x90\x6C\xDC\xAC\x32\xB5\x05\xE4\xF5\x3C\x33\x0D\xD6\xE0\x87\x77\x17\x4C\x9D\xB0\xD8\x09\xA8\x0D\x57\xF7\x44\x85\xF0\xC8\x04\xBE\x5C\x5D\x5A\xE3\x17\x8E\x54\x63\x69\x7F\x49\x74\x64\x05\x8C\xA3\x02\x03\x01\x00\x01\xA3\x63\x30\x61\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\xB2\xB4\xAE\xE6\x2D\xF7\x26\xD5\xAA\x75\x2D\x76\x4B\xC0\x1B\x53\x21\xD0\x48\xEF\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xB2\xB4\xAE\xE6\x2D\xF7\x26\xD5\xAA\x75\x2D\x76\x4B\xC0\x1B\x53\x21\xD0\x48\xEF\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x02\x01\x00\x89\xA8\x72\x7F\x8C\xEB\xCE\x2E\x18\xC4\x10\x80\x2D\x10\x0C\xFF\xFB\x14\xCD\x04\xE0\x14\x3C\x4E\x9A\xFB\x9F\x29\xBF\x22\x9E\x57\xB9\x82\x73\x12\x63\x26\xB5\xCC\x90\xE9\xD2\x2A\x29\xEE\x9C\x2D\xCC\x2C\x99\xBE\x45\x27\xE4\xB1\x71\xED\xE4\x38\x95\x31\x41\xF2\x7D\x7A\x63\x78\xDF\xCA\x36\x16\x2F\x82\x88\x9F\xBC\x11\x47\x4F\x76\x4D\xC8\x2D\x8E\xEB\xDF\x2D\x7C\x4E\x3B\xDA\xAE\xF6\xE3\xDA\x5D\x14\xA6\xAE\xE8\x85\x44\x9D\x06\x6E\x8E\xFB\xEF\x7A\x4A\x6A\x2D\x2B\x28\x18\xFE\xBF\x90\x2C\x75\x16\x9F\x0F\xEA\x96\x7D\x05\xEE\x9B\x13\xA5\x44\x6C\xF8\x03\xD0\xDD\x23\xE1\xFD\x03\x12\x12\x08\xF4\x18\x34\xB3\xE0\x37\x0B\x77\x11\x01\x48\xBF\x61\xB4\xB5\xF8\x19\xD9\xCB\x4D\xEA\xA3\x8C\xEF\xFD\xF0\x06\xB5\x6D\x92\xF4\x4A\x61\x50\x84\xED\xEC\x49\xD3\xE4\xBE\x68\xE6\x2E\xE3\x31\x0B\x54\x0B\x1A\x92\xD6\x82\xD8\xB6\xA2\x65\x3C\x66\x04\xF9\x55\xDA\x6C\xFB\xDB\xB5\x14\x66\x4D\x94\x83\x3B\xCD\x1E\xA6\x2B\xB2\xFE\x77\x40\x86\xAB\xE7\xDF\x0A\xC9\xFD\xF6\xDD\x87\x56\x18\xD8\xB0\x2C\x55\x60\x96\xFA\x08\x7E\x52\x90\xF5\x4B\xA6\x2E\x87\x7C\xCB\x20\xDB\x06\x3E\xA0\x5D\x03\x77\x7D\xA2\x3C\x13\x1B\x29\xA2\x13\x55\xA0\x3D\x14\x22\xAF\x6F\xB8\xD0\x9A\x1B\x72\xDD\x05\x01\x8D\x86\x60\xBF\xA4\x67\xEE\xB5\xA5\x0D\xD1\x7F\xE6\x1A\x2B\x62\x66\xC3\x07\xBA\xE7\xA0\x48\x1C\x38\xC3\xE9\x45\xFB\xA7\x7F\xFC\xED\x02\x68\x1A\xCA\x77\x12\x77\xA6\x00\x55\x28\x14\xEC\xD6\xC7\x12\xA2\x1B\x65\x42\xE9\x91\xE8\xCB\x3E\x87\x89\x54\x5D\xD9\xAF\x9D\x97\x9C\x69\xE7\x0A\xFF\x0F\x5A\x78\x8B\x63\x2A\x4C\x7D\x47\x94\x3F\xDE\x4B\xE9\x53\xD0\x30\xF1\xC5\xF6\x9E\x49\xDF\x3B\xA0\x91\xA3\xA3\xFE\xCD\x58\xCC\xEA\xDF\xAF\x6F\x28\x3B\xA0\x69\x9B\x8F\xEC\xAC\xAE\x2B\x54\x9D\x9B\x04\xB1\x47\x20\xAF\x96\x12\x3E\x63\x94\x1D\x04\xE7\x2E\xBB\x86\xC7\x0C\x9A\x88\xBF\x76\x47\xEF\xF7\xB0\x0B\x97\x66\xD2\x44\xCF\x60\x52\x07\xE1\xD5\x2C\x4A\x3A\x27\x61\x77\xCA\xD7\x8F\xE7\x87\x0E\x30\xFF\x0C\xBB\x04\xE2\x61\xC3\xA2\xC8\x97\x61\x8E\xB4\x30\x6A\x3C\x6D\xC2\x07\x5F\x4A\x73\x2F\x3F\xF9\x16\x8A\x01\x66\xEF\xBA\x91\xCA\x52\x57\x7B\xAE\xD4\xE6\x0F\xDD\x0B\x7A\x7F\x8B\x9E\x26\x20\xCF\x3B\xEF\x81\x71\x83\x59", + ["CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR"] = "\x30\x82\x02\xA5\x30\x82\x02\x2A\xA0\x03\x02\x01\x02\x02\x14\x26\x46\x19\x77\x31\xE1\x4F\x6F\x28\x36\xDE\x39\x51\x86\xE6\xD4\x97\x88\x22\xC1\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x45\x43\x43\x20\x76\x33\x30\x1E\x17\x0D\x32\x30\x30\x33\x31\x38\x30\x39\x34\x36\x35\x38\x5A\x17\x0D\x34\x35\x30\x33\x31\x32\x30\x39\x34\x36\x35\x38\x5A\x30\x81\x80\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x54\x52\x31\x0F\x30\x0D\x06\x03\x55\x04\x07\x13\x06\x41\x6E\x6B\x61\x72\x61\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x45\x2D\x54\x75\x67\x72\x61\x20\x45\x42\x47\x20\x41\x2E\x53\x2E\x31\x1D\x30\x1B\x06\x03\x55\x04\x0B\x13\x14\x45\x2D\x54\x75\x67\x72\x61\x20\x54\x72\x75\x73\x74\x20\x43\x65\x6E\x74\x65\x72\x31\x26\x30\x24\x06\x03\x55\x04\x03\x13\x1D\x45\x2D\x54\x75\x67\x72\x61\x20\x47\x6C\x6F\x62\x61\x6C\x20\x52\x6F\x6F\x74\x20\x43\x41\x20\x45\x43\x43\x20\x76\x33\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\x8E\x98\x29\xBF\xC7\x10\x1E\x27\xDB\xAB\x03\xCC\x28\x2C\xD8\x5E\x48\x19\x10\x29\xCC\xCB\x59\x81\xCC\x8C\xB8\x92\x17\x89\x83\x2A\x92\xF6\xC3\xA4\x1D\x4C\x62\xD5\x9F\xD6\xA0\x46\xDC\x1C\xBC\x76\xC1\xE3\x47\xD0\x5B\x13\xDA\xE7\xA5\xB3\x66\x48\xE7\x21\x9A\x4A\x4F\x86\x0A\x7D\x6C\xEA\x4D\x32\x80\x0A\xB2\x7A\x09\x9B\x69\x4B\x98\x81\xE2\x2E\xEC\x02\x70\x96\x1F\xFD\xF5\x46\xCE\xCA\xDC\x82\xA3\x63\x30\x61\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\xFF\x82\x31\x72\x3E\xF9\xC4\x66\x6C\xAD\x38\x9E\xD1\xB0\x51\x88\xA5\x90\xCC\xF5\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\xFF\x82\x31\x72\x3E\xF9\xC4\x66\x6C\xAD\x38\x9E\xD1\xB0\x51\x88\xA5\x90\xCC\xF5\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x69\x00\x30\x66\x02\x31\x00\xE6\x05\x58\x69\x61\xE5\x2D\xCA\x0D\xCB\xF1\x19\x08\xBD\xD6\xFD\x51\x92\x1A\x7E\x63\x54\x04\x90\x91\x9A\x35\x91\x39\x99\xFA\x07\xA9\x66\x93\xBA\xC8\x68\xD4\x8A\x3F\xFA\xED\x6E\x16\x02\x27\xB7\x02\x31\x00\xDD\x5A\x17\x2B\x76\x1D\x65\x42\x96\xA6\xAC\x5D\x8A\x79\x56\xD8\x8A\x1B\xDF\x9A\xDE\x5F\xC7\x50\x8F\xB1\x5B\x71\x0C\x26\xDF\x6A\x40\x00\xEC\x33\x91\x21\x71\xBE\x68\xE4\x23\xA4\xD9\xAD\xA1\x37", + ["CN=Security Communication RootCA3,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x05\x7F\x30\x82\x03\x67\xA0\x03\x02\x01\x02\x02\x09\x00\xE1\x7C\x37\x40\xFD\x1B\xFE\x67\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x33\x30\x1E\x17\x0D\x31\x36\x30\x36\x31\x36\x30\x36\x31\x37\x31\x36\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x30\x36\x31\x37\x31\x36\x5A\x30\x5D\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x27\x30\x25\x06\x03\x55\x04\x03\x13\x1E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x52\x6F\x6F\x74\x43\x41\x33\x30\x82\x02\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x02\x0F\x00\x30\x82\x02\x0A\x02\x82\x02\x01\x00\xE3\xC9\x72\x49\xF7\x30\xDE\x09\x7C\xA9\x40\x81\x58\xD3\xB4\x3A\xDD\xBA\x61\x0F\x93\x50\x6E\x69\x3C\x35\xC2\xEE\x5B\x73\x90\x1B\x67\x4C\x21\xEC\x5F\x35\xBB\x39\x3E\x2B\x0A\x60\xEF\xBB\x6D\x2B\x86\xFB\x71\xA2\xC8\xAC\xE4\x56\x94\xF9\xC9\xAF\xB1\x72\xD4\x20\xAC\x74\xD2\xB8\x15\xAD\x51\xFE\x85\x74\xA1\xB9\x10\xFE\x05\x80\xF9\x52\x93\xB3\x40\x3D\x75\x10\xAC\xC0\x96\xB7\xA7\x7E\x76\xBC\xE3\x1B\x52\x19\xCE\x11\x1F\x0B\x04\x34\xF5\xD8\xF5\x69\x3C\x77\xF3\x64\xF4\x0D\xAA\x85\xDE\xE0\x09\x50\x04\x17\x96\x84\xB7\xC8\x8A\xBC\x4D\x72\xFC\x1C\xBB\xCF\xF3\x06\x4D\xF9\x9F\x64\xF7\x7E\xA6\x66\x86\x35\x71\xC8\x11\x80\x4C\xC1\x71\x40\x58\x1E\xBE\xA0\x73\xF6\xFC\x3E\x50\xE1\xE0\x2F\x26\x3D\x7E\x5C\x23\xB5\x79\x70\xDE\xFA\xE0\xD1\xA5\xD6\x0C\x41\x71\x7B\xF7\xEA\x8C\x1C\x88\xC7\xEC\x8B\xF5\xD1\x2F\x55\x96\x46\x7C\x5A\x3B\x58\x3B\xFB\xBA\xD8\x2D\xB5\x25\xDA\x7A\x4E\xCF\x44\xAE\x21\xA6\x9E\x98\xCA\x20\x6E\x7C\xBB\x88\x85\x5B\xFB\xC0\x10\x62\xBB\xF2\xF9\x27\x47\xEF\xD1\x89\x39\x43\xC4\xDF\xDE\xE1\x41\xBF\x54\x73\x20\x97\x2D\x6C\xDA\xF3\xD4\x07\xA3\xE6\xB9\xD8\x6F\xAE\xFC\x8C\x19\x2E\xD3\x67\x67\x2B\x95\xDB\x58\x5C\xB5\x6A\x02\xF3\xB8\x83\x5E\xB4\x6B\xBE\x41\x7E\x57\x09\x75\x44\x50\x55\xCD\x5A\x11\x61\x21\x0A\x61\xC2\xA9\x88\xFD\x13\xBC\x2D\x89\x2F\xCD\x61\xE0\x95\xBE\xCA\xB5\x7B\xE1\x7B\x34\x67\x0B\x1F\xB6\x0C\xC7\x7C\x1E\x19\x53\xCA\xA7\xB1\x4A\x15\x20\x56\x14\x70\x3D\x2B\x82\x2C\x0F\x9D\x15\x1D\x47\x80\x47\xFF\x78\x99\x0E\x31\xAF\x6F\x3E\x8F\xED\x86\x69\x1E\x7B\x18\x88\x14\xB2\xC2\xFC\x82\x33\x2E\x9C\x4B\x2D\xFB\x70\x3B\x71\xAA\x2B\x7B\x26\x27\xF3\x1A\xC2\xDC\xFB\x17\xB8\xA1\xEA\xCB\xA0\xB4\xAE\xD3\x94\x7E\x7A\xD0\xAB\xC3\xEC\x38\x2D\x11\x2E\x88\xBF\xD4\x3F\xAD\x12\x3B\x42\xAC\x8F\x02\x6E\x7D\xCC\xD1\x5F\x61\xBE\xA1\xBC\x3A\x6A\x48\xEA\x26\x55\x22\x16\x5D\x5F\x0D\xFF\x27\x33\x9F\x18\x03\x74\x8A\x5B\x52\x20\x47\x6B\x45\x4D\x22\x77\x8C\x55\x27\xF0\xAF\x1E\x8C\xC9\x83\x22\x54\xB7\x9A\xD0\x4F\xD9\xCE\xFC\xD9\x2E\x1C\x96\x28\xB1\x02\xD3\x03\xBD\x25\x52\x1C\x34\x66\x4F\x23\xAB\xF4\x77\x82\x96\x1D\xD1\x57\x30\x08\x11\x05\xFD\x57\xD1\xD9\xC7\x02\x03\x01\x00\x01\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x64\x14\x7C\xFC\x58\x72\x16\xA6\x0A\x29\x34\x15\x6F\x2A\xCB\xBC\xFC\xAF\xA8\xAB\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C\x05\x00\x03\x82\x02\x01\x00\xDC\x02\x23\x08\xE2\xEF\x21\x3A\xC7\x0D\xB7\x26\xD2\x62\x93\xA7\xA5\x23\x72\x07\x20\x82\x60\xDF\x18\xD7\x54\xAD\x69\x25\x92\x9E\xD9\x14\xCF\x99\xB9\x52\x81\xCF\xAE\x6C\x8A\x3B\x5A\x39\xC8\x6C\x01\x43\xC2\x22\x6D\x02\xF0\x62\xCD\x4E\x63\x43\xC0\x14\xDA\xF4\x63\xF0\xEA\xF4\x71\xEE\x4E\x87\xE3\x71\xA9\xF4\xC9\x57\xE5\x2E\x5F\x1C\x79\xBB\x23\xAA\x87\x44\x57\xE9\xBD\x35\x4D\x41\xBB\x4B\x28\xA3\x98\xB2\x1B\xD9\x0B\x17\x07\xE5\xF7\xEA\x9D\xF5\x76\xD7\xBF\xC4\xB6\x81\x58\xFF\xC8\xFF\x64\x69\x62\x79\xAD\x6E\x0E\x1F\x7F\xEE\x1D\x69\xE5\xB7\x72\x71\xB3\xFE\xA5\x01\x35\x94\x54\x2B\xC0\x52\x6D\x8F\x55\xC4\xC9\xD2\xB8\xCB\xCA\x34\x08\x51\x85\xA0\xF5\xBC\xB4\x17\x58\xEA\x0A\x5C\x7A\xBD\x63\xC6\x3A\x2F\xFF\x96\x49\x19\x84\xEA\x67\xD8\x04\xB1\x61\xF4\x00\x5B\x4A\xB7\x9C\x71\x37\x19\x85\x79\xBF\x81\xB0\xC7\x13\x0E\x76\x71\x3E\x3A\x80\x06\xAE\x06\x16\xA7\x8D\xB5\xC2\xC4\xCB\xFF\x40\xA5\x5C\x8D\xA5\xC9\x3A\xED\x72\x81\xCA\x5C\x98\x3C\xD2\x34\x03\x77\x08\xFD\xF0\x29\x59\x5D\x21\x08\xC7\x60\xBF\xA4\x71\x7B\xB8\xD9\x1E\x82\xBE\x09\xAF\x65\x6F\x28\xAB\xBF\x4B\xB5\xEE\x3E\x08\x47\x27\xA0\x0F\x6F\x0F\x8B\x3F\xAC\x95\x18\xF3\xB9\x0E\xDC\x67\x55\x6E\x62\x9E\x46\x0E\xD1\x04\x78\xCA\x72\xAE\x76\xD9\xA5\xF8\xB2\xDF\x88\x09\x61\x8B\xEF\x24\x4E\xD1\x59\x3F\x5A\xD4\x3D\xC9\x93\x3C\x2B\x64\xF5\x81\x0D\x16\x96\xF7\x92\xC3\xFE\x31\x6F\xE8\x2A\x32\x74\x0E\xF4\x4C\x98\x4A\x18\x0E\x30\x54\xD5\xC5\xEB\xBC\xC5\x15\x9E\xE8\x99\x21\xEB\x27\x2B\x09\x0A\xDB\xF1\xE6\x70\x18\x56\xBB\x0C\xE4\xBE\xF9\xE8\x10\xA4\x13\x92\xB8\x1C\xE0\xDB\x67\x1D\x53\x03\xA4\x22\xA7\xDC\x5D\x92\x10\x3C\xEA\xFF\xFC\x1B\x10\x1A\xC3\xD8\xD0\x9C\x9D\x65\xCB\xD0\x2B\x27\x31\x03\x1E\x36\xE1\x3D\x76\x75\x0C\xFF\x45\x26\xB9\xDD\x51\xBC\x23\xC7\x5F\xD8\xD8\x87\x10\x40\x12\x0D\x3D\x38\x37\xE7\x44\x3C\x18\xC0\x53\x09\x64\x8F\xFF\xD5\x9A\xA6\x7C\x70\x2E\x73\x55\x21\xE8\xDF\xFF\x83\xB9\x1D\x3E\x32\x1E\xD6\xA6\x7D\x2C\xF1\x66\xE9\x5C\x1D\xA7\xA3\xCE\x5E\x25\x32\x2B\xE3\x95\xAC\x2A\x07\xCE\xB4\x28\x78\x86\x3C\x2D\xA6\x9D\x4D\xD2\x74\x30\xDD\x64\x51\x15\xDB\x83\x83\x51\xD7\xAF\xFD\x33\x9D\x4D\x66", + ["CN=Security Communication ECC RootCA1,O=SECOM Trust Systems CO.\,LTD.,C=JP"] = "\x30\x82\x02\x38\x30\x82\x01\xBE\xA0\x03\x02\x01\x02\x02\x09\x00\xD6\x5D\x9B\xB3\x78\x81\x2E\xEB\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x30\x61\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x43\x41\x31\x30\x1E\x17\x0D\x31\x36\x30\x36\x31\x36\x30\x35\x31\x35\x32\x38\x5A\x17\x0D\x33\x38\x30\x31\x31\x38\x30\x35\x31\x35\x32\x38\x5A\x30\x61\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4A\x50\x31\x25\x30\x23\x06\x03\x55\x04\x0A\x13\x1C\x53\x45\x43\x4F\x4D\x20\x54\x72\x75\x73\x74\x20\x53\x79\x73\x74\x65\x6D\x73\x20\x43\x4F\x2E\x2C\x4C\x54\x44\x2E\x31\x2B\x30\x29\x06\x03\x55\x04\x03\x13\x22\x53\x65\x63\x75\x72\x69\x74\x79\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x43\x43\x20\x52\x6F\x6F\x74\x43\x41\x31\x30\x76\x30\x10\x06\x07\x2A\x86\x48\xCE\x3D\x02\x01\x06\x05\x2B\x81\x04\x00\x22\x03\x62\x00\x04\xA4\xA5\x6F\x60\x03\x03\xC3\xBD\x31\xF4\xD3\x17\x9C\x2B\x84\x75\xAC\xE5\xFD\x3D\x57\x6E\xD7\x63\xBF\xE6\x04\x89\x92\x8E\x81\x9C\xE3\xE9\x47\x6E\xCA\x90\x12\xC8\x13\xE0\xA7\x9D\xF7\x65\x74\x1F\x6C\x10\xB2\xE8\xE4\xE9\xEF\x6D\x85\x32\x99\x44\xB1\x5E\xFD\xCC\x76\x10\xD8\x5B\xBD\xA2\xC6\xF9\xD6\x42\xE4\x57\x76\xDC\x90\xC2\x35\xA9\x4B\x88\x3C\x12\x47\x6D\x5C\xFF\x49\x4F\x1A\x4A\x50\xB1\xA3\x42\x30\x40\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x86\x1C\xE7\xFE\x2D\xA5\x4A\x8B\x08\xFE\x28\x11\xFA\xBE\xA3\x66\xF8\x60\x59\x2F\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x01\x06\x30\x0F\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x05\x30\x03\x01\x01\xFF\x30\x0A\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x03\x03\x68\x00\x30\x65\x02\x30\x15\x5D\x42\x3D\xFC\xB6\xEE\xF7\x3B\xB1\x36\xE8\x9E\xF6\xC4\x46\x28\x49\x33\xD0\x58\x43\x2A\x63\x29\xCC\x4D\xB1\xB4\x7A\xA2\xB9\x0D\x38\xA5\x5D\x48\x2A\xFD\xCB\xB2\x73\x5D\xA3\x88\x08\xC7\x0C\x02\x31\x00\xC0\xAB\x2D\x0E\x6D\xED\x18\xA2\xDB\x53\xE9\x25\xDB\x55\x08\xE0\x50\xCC\xDF\x44\x61\x16\x82\xAB\x49\xB0\xB2\x81\xEC\x73\x87\x78\xB4\x4C\xB2\x62\x1B\x12\xFA\x16\x4D\x25\x4B\x63\xBD\x1E\x37\xD9", }; diff --git a/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek b/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek index 8d0c9ad873..1d486032c6 100644 --- a/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek +++ b/testing/btest/scripts/policy/protocols/ssl/validate-sct.zeek @@ -11,6 +11,7 @@ redef SSL::ct_logs += { ["\x03\x01\x9d\xf3\xfd\x85\xa6\x9a\x8e\xbd\x1f\xac\xc6\xda\x9b\xa7\x3e\x46\x97\x74\xfe\x77\xf5\x79\xfc\x5a\x08\xb8\x32\x8c\x1d\x6b"] = SSL::CTInfo($description="Venafi Gen2 CT log", $operator="Venafi", $url="ctlog-gen2.api.venafi.com/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x8e\x27\x27\x7a\xb6\x55\x09\x74\xeb\x6c\x4b\x94\x84\x65\xbc\xe4\x15\xf1\xea\x5a\xd8\x7c\x0e\x37\xce\xba\x3f\x6c\x09\xda\xe7\x29\x96\xd3\x45\x50\x6f\xde\x1e\xb4\x1c\xd2\x83\x88\xff\x29\x2f\xce\xa9\xff\xdf\x34\xde\x75\x0f\xc0\xcc\x18\x0d\x94\x2e\xfc\x37\x01"), ["\x68\xf6\x98\xf8\x1f\x64\x82\xbe\x3a\x8c\xee\xb9\x28\x1d\x4c\xfc\x71\x51\x5d\x67\x93\xd4\x44\xd1\x0a\x67\xac\xbb\x4f\x4f\xfb\xc4"] = SSL::CTInfo($description="Google 'Aviator' log", $operator="Google", $url="ct.googleapis.com/aviator/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd7\xf4\xcc\x69\xb2\xe4\x0e\x90\xa3\x8a\xea\x5a\x70\x09\x4f\xef\x13\x62\xd0\x8d\x49\x60\xff\x1b\x40\x50\x07\x0c\x6d\x71\x86\xda\x25\x49\x8d\x65\xe1\x08\x0d\x47\x34\x6b\xbd\x27\xbc\x96\x21\x3e\x34\xf5\x87\x76\x31\xb1\x7f\x1d\xc9\x85\x3b\x0d\xf7\x1f\x3f\xe9"), ["\xac\x3b\x9a\xed\x7f\xa9\x67\x47\x57\x15\x9e\x6d\x7d\x57\x56\x72\xf9\xd9\x81\x00\x94\x1e\x9b\xde\xff\xec\xa1\x31\x3b\x75\x78\x2d"] = SSL::CTInfo($description="Venafi log", $operator="Venafi", $url="ctlog.api.venafi.com/", $maximum_merge_delay=86400, $key="\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01\x01\x00\xa2\x5a\x48\x1f\x17\x52\x95\x35\xcb\xa3\x5b\x3a\x1f\x53\x82\x76\x94\xa3\xff\x80\xf2\x1c\x37\x3c\xc0\xb1\xbd\xc1\x59\x8b\xab\x2d\x65\x93\xd7\xf3\xe0\x04\xd5\x9a\x6f\xbf\xd6\x23\x76\x36\x4f\x23\x99\xcb\x54\x28\xad\x8c\x15\x4b\x65\x59\x76\x41\x4a\x9c\xa6\xf7\xb3\x3b\x7e\xb1\xa5\x49\xa4\x17\x51\x6c\x80\xdc\x2a\x90\x50\x4b\x88\x24\xe9\xa5\x12\x32\x93\x04\x48\x90\x02\xfa\x5f\x0e\x30\x87\x8e\x55\x76\x05\xee\x2a\x4c\xce\xa3\x6a\x69\x09\x6e\x25\xad\x82\x76\x0f\x84\x92\xfa\x38\xd6\x86\x4e\x24\x8f\x9b\xb0\x72\xcb\x9e\xe2\x6b\x3f\xe1\x6d\xc9\x25\x75\x23\x88\xa1\x18\x58\x06\x23\x33\x78\xda\x00\xd0\x38\x91\x67\xd2\xa6\x7d\x27\x97\x67\x5a\xc1\xf3\x2f\x17\xe6\xea\xd2\x5b\xe8\x81\xcd\xfd\x92\x68\xe7\xf3\x06\xf0\xe9\x72\x84\xee\x01\xa5\xb1\xd8\x33\xda\xce\x83\xa5\xdb\xc7\xcf\xd6\x16\x7e\x90\x75\x18\xbf\x16\xdc\x32\x3b\x6d\x8d\xab\x82\x17\x1f\x89\x20\x8d\x1d\x9a\xe6\x4d\x23\x08\xdf\x78\x6f\xc6\x05\xbf\x5f\xae\x94\x97\xdb\x5f\x64\xd4\xee\x16\x8b\xa3\x84\x6c\x71\x2b\xf1\xab\x7f\x5d\x0d\x32\xee\x04\xe2\x90\xec\x41\x9f\xfb\x39\xc1\x02\x03\x01\x00\x01"), +["\x56\x14\x06\x9a\x2f\xd7\xc2\xec\xd3\xf5\xe1\xbd\x44\xb2\x3e\xc7\x46\x76\xb9\xbc\x99\x11\x5c\xc0\xef\x94\x98\x55\xd6\x89\xd0\xdd"] = SSL::CTInfo($description="DigiCert Log Server", $operator="DigiCert", $url="https://ct1.digicert-ct.com/log/", $maximum_merge_delay=86400, $key="\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x02\x46\xc5\xbe\x1b\xbb\x82\x40\x16\xe8\xc1\xd2\xac\x19\x69\x13\x59\xf8\xf8\x70\x85\x46\x40\xb9\x38\xb0\x23\x82\xa8\x64\x4c\x7f\xbf\xbb\x34\x9f\x4a\x5f\x28\x8a\xcf\x19\xc4\x00\xf6\x36\x06\x93\x65\xed\x4c\xf5\xa9\x21\x62\x5a\xd8\x91\xeb\x38\x24\x40\xac\xe8"), }; module SSL; From 21888a145a86bbc04d227261cfbcf12b04dba85c Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Wed, 3 May 2023 11:16:14 +0100 Subject: [PATCH 12/35] SSL: do not try to disable failed analyzer Currently, if a TLS/DTLS analyzer fails with a protocol violation, we will still try to remove the analyzer later, which results in the following error message: error: connection does not have analyzer specified to disable Now, instead we don't try removing the analyzer anymore, after a violation occurred. --- scripts/base/protocols/ssl/main.zeek | 9 +++++++++ .../.stderr | 1 + .../Traces/tls/tls1.2-protocol-violation.pcap | Bin 0 -> 8601 bytes .../protocols/ssl/tls-protocol-violation.test | 5 +++++ 4 files changed, 15 insertions(+) create mode 100644 testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr create mode 100644 testing/btest/Traces/tls/tls1.2-protocol-violation.pcap create mode 100644 testing/btest/scripts/base/protocols/ssl/tls-protocol-violation.test diff --git a/scripts/base/protocols/ssl/main.zeek b/scripts/base/protocols/ssl/main.zeek index 3e74950951..f4c2eb4e18 100644 --- a/scripts/base/protocols/ssl/main.zeek +++ b/scripts/base/protocols/ssl/main.zeek @@ -499,6 +499,15 @@ event analyzer_confirmation_info(atype: AllAnalyzers::Tag, info: AnalyzerConfirm } } +event analyzer_violation_info(atype: AllAnalyzers::Tag, info: AnalyzerViolationInfo) &priority=5 + { + if ( atype == Analyzer::ANALYZER_SSL || atype == Analyzer::ANALYZER_DTLS ) + { + # analyzer errored out; prevent us from trying to remove it later + delete info$c$ssl$analyzer_id; + } + } + event ssl_plaintext_data(c: connection, is_client: bool, record_version: count, content_type: count, length: count) &priority=5 { set_session(c); diff --git a/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr b/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ssl.tls-protocol-violation/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Traces/tls/tls1.2-protocol-violation.pcap b/testing/btest/Traces/tls/tls1.2-protocol-violation.pcap new file mode 100644 index 0000000000000000000000000000000000000000..76a51c00c9c8622b9e52bd02094b8da16f185076 GIT binary patch literal 8601 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 Date: Wed, 3 May 2023 13:41:36 +0100 Subject: [PATCH 13/35] SSL: failing analyzer handling - address review feedback Fold the two analyzer_violation_info events into one. See GH-3012 --- scripts/base/protocols/ssl/main.zeek | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/base/protocols/ssl/main.zeek b/scripts/base/protocols/ssl/main.zeek index f4c2eb4e18..1389b711db 100644 --- a/scripts/base/protocols/ssl/main.zeek +++ b/scripts/base/protocols/ssl/main.zeek @@ -501,11 +501,6 @@ event analyzer_confirmation_info(atype: AllAnalyzers::Tag, info: AnalyzerConfirm event analyzer_violation_info(atype: AllAnalyzers::Tag, info: AnalyzerViolationInfo) &priority=5 { - if ( atype == Analyzer::ANALYZER_SSL || atype == Analyzer::ANALYZER_DTLS ) - { - # analyzer errored out; prevent us from trying to remove it later - delete info$c$ssl$analyzer_id; - } } event ssl_plaintext_data(c: connection, is_client: bool, record_version: count, content_type: count, length: count) &priority=5 @@ -523,5 +518,9 @@ event analyzer_violation_info(atype: AllAnalyzers::Tag, info: AnalyzerViolationI { if ( atype == Analyzer::ANALYZER_SSL || atype == Analyzer::ANALYZER_DTLS ) if ( info$c?$ssl ) + { + # analyzer errored out; prevent us from trying to remove it later + delete info$c$ssl$analyzer_id; finish(info$c, T); + } } From bef1d510155e2edef18e556dc11596b8e1eac001 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Wed, 3 May 2023 14:22:08 +0100 Subject: [PATCH 14/35] Update SQLite to 3.41.2 [nomail] --- src/3rdparty | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty b/src/3rdparty index 58e63b262e..410ada8bbe 160000 --- a/src/3rdparty +++ b/src/3rdparty @@ -1 +1 @@ -Subproject commit 58e63b262e542895024c821e791214008604cd55 +Subproject commit 410ada8bbe5839807a459a99c1b77221f790f1be From 8e49c8791281563fe90e618c62a49c1af7a373ef Mon Sep 17 00:00:00 2001 From: zeek-bot Date: Thu, 4 May 2023 00:24:39 +0000 Subject: [PATCH 15/35] Update doc submodule [nomail] [skip ci] --- doc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc b/doc index f3f85f68ec..64cb423176 160000 --- a/doc +++ b/doc @@ -1 +1 @@ -Subproject commit f3f85f68ecec844e5770900aa871361627451ae1 +Subproject commit 64cb4231767c56eceaeb23b29696ffac98459cd0 From 2c8b97c5223af1aad39b9106fafb2ccde8ea61cb Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 4 May 2023 17:23:14 +0200 Subject: [PATCH 16/35] NTP: Detect out-of-order packets The NTP mode provides us with the identity of the endpoints. For the simple CLIENT / SERVER modes, flip the connection if we detect orig/resp disagreeing with what the message says. This mainly results in the history getting a ^ and the ntp.log / conn.log showing the corrected endpoints. Closes #2998. --- NEWS | 5 +++++ src/analyzer/protocol/ntp/ntp-analyzer.pac | 14 ++++++++++++++ src/analyzer/protocol/ntp/ntp-protocol.pac | 9 +++++++++ .../.stdout | 3 +++ .../conn.log | 11 +++++++++++ .../ntp.log | 12 ++++++++++++ testing/btest/Traces/ntp/misordered-ntp.pcap | Bin 0 -> 236 bytes .../base/protocols/ntp/misordered-ntp.test | 12 ++++++++++++ 8 files changed, 66 insertions(+) create mode 100644 testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout create mode 100644 testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log create mode 100644 testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log create mode 100644 testing/btest/Traces/ntp/misordered-ntp.pcap create mode 100644 testing/btest/scripts/base/protocols/ntp/misordered-ntp.test diff --git a/NEWS b/NEWS index d255f93b48..959dd0849e 100644 --- a/NEWS +++ b/NEWS @@ -212,6 +212,11 @@ New Functionality - The ``ip4_hdr`` record was extended by ``DF``, ``MF``, ``offset`` and ``sum`` to aid packet-level analysis use-cases. +- The NTP analyzer now recognizes when client and server mode messages disagree + with the notion of "originator" and "responder" and flips the connection. This + can happen in packet loss or packet re-ordering scenarios. Such connections will + have a ``^`` added to their history. + Changed Functionality --------------------- diff --git a/src/analyzer/protocol/ntp/ntp-analyzer.pac b/src/analyzer/protocol/ntp/ntp-analyzer.pac index c202e40daf..d0ce8d964d 100644 --- a/src/analyzer/protocol/ntp/ntp-analyzer.pac +++ b/src/analyzer/protocol/ntp/ntp-analyzer.pac @@ -130,11 +130,25 @@ refine flow NTP_Flow += { + %member{ + bool flipped_; + %} + + %init{ + flipped_ = false; + %} function proc_ntp_message(msg: NTP_PDU): bool %{ connection()->zeek_analyzer()->AnalyzerConfirmation(); + // Flip roles for SERVER mode message from orig or a CLIENT mode message from resp. + if ( ((${msg.mode} == SERVER && is_orig()) || (${msg.mode} == CLIENT && ! is_orig())) && ! flipped_ ) + { + connection()->zeek_analyzer()->Conn()->FlipRoles(); + flipped_ = true; + } + if ( ! ntp_message ) return false; diff --git a/src/analyzer/protocol/ntp/ntp-protocol.pac b/src/analyzer/protocol/ntp/ntp-protocol.pac index 6c92aee1e8..dac60ebfc1 100644 --- a/src/analyzer/protocol/ntp/ntp-protocol.pac +++ b/src/analyzer/protocol/ntp/ntp-protocol.pac @@ -1,5 +1,14 @@ # This is the common part in the header format. # See RFC 5905 for details +enum NTP_Mode { + SYMMETRIC_ACTIVE = 1, + SYMMETRIC_PASSIVE = 2, + CLIENT = 3, + SERVER = 4, + BROADCAST_SERVER = 5, + BROADCAST_CLIENT = 6, +}; + type NTP_PDU(is_orig: bool) = record { # The first byte of the NTP header contains the leap indicator, # the version and the mode diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout new file mode 100644 index 0000000000..af7330beb9 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +ntp_message 192.168.1.95 -> 17.253.4.253:123 (D^) +ntp_message 192.168.1.95 -> 17.253.4.253:123 (D^) diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log new file mode 100644 index 0000000000..d2639d9ea4 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/conn.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path conn +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents +#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 udp - 0.959285 96 0 S0 T F 0 D^ 2 152 0 0 - +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log new file mode 100644 index 0000000000..736e20827e --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.ntp.misordered-ntp/ntp.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path ntp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version mode stratum poll precision root_delay root_disp ref_id ref_time org_time rec_time xmt_time num_exts +#types time string addr port addr port count count count interval interval interval interval string time time time time count +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 4 4 1 256.000000 0.000001 0.000000 0.000992 GPSs XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX 0 +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 192.168.1.95 123 17.253.4.253 123 4 3 0 256.000000 1.000000 0.000000 0.000000 \x00\x00\x00\x00 0.000000 0.000000 0.000000 XXXXXXXXXX.XXXXXX 0 +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Traces/ntp/misordered-ntp.pcap b/testing/btest/Traces/ntp/misordered-ntp.pcap new file mode 100644 index 0000000000000000000000000000000000000000..d2118414fedd2b26661c13211f39ba8d885d0a2a GIT binary patch literal 236 zcmca|c+)~A1{MYcU}0bca?(|qA|{G*Fhl{_Aj~2f#40DwpyX&Qw26bkm4U&B-PD1> zN-!Z?@Gr~X11lKg8LENMf~``8k>d^2G)MP<;NshB7C--XZJimAeo=meV-1LI;uY@) x(|qFdGJrO %s:%d (%s)", c$id$orig_h, c$id$resp_h, c$id$resp_p, c$history); + } From 148673a5c13aaa3c19f4215c8fb5ecf5f889ab5a Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Thu, 4 May 2023 10:52:38 -0700 Subject: [PATCH 17/35] BTest baseline updates for ZAM --- .../Baseline.zam/bifs.cat_sep_errors-2/.stderr | 2 +- .../Baseline.zam/bifs.cat_sep_errors-3/.stderr | 2 +- .../Baseline.zam/bifs.cat_sep_errors-4/.stderr | 2 +- .../Baseline.zam/bifs.cat_sep_errors-5/.stderr | 2 +- .../btest/Baseline.zam/bifs.cat_sep_errors/.stderr | 2 +- .../.stderr | 5 +++++ .../out | 2 ++ .../smtp.log | 13 +++++++++++++ .../weird.log | 12 ++++++++++++ 9 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr create mode 100644 testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out create mode 100644 testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log create mode 100644 testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr index 13a40bc019..f3eeb2d94b 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-2/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 3: cat_sep() takes at least 2 arguments, got 1 (cat_sep(sep)) +error in <...>/cat_sep_errors.zeek, line 3: cat_sep() takes at least 2 argument(s), got 1 (cat_sep(sep)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr index c19b73c3da..3aec3d0c30 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-3/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 4: expected type string for default, got count (cat_sep(sep, 1)) +error in <...>/cat_sep_errors.zeek, line 4: expected type string for def, got count (cat_sep(sep, 1)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr index 6416ec7c35..c414809740 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-4/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 4: expected type string for separator, got count (cat_sep(1, default)) +error in <...>/cat_sep_errors.zeek, line 4: expected type string for sep, got count (cat_sep(1, default)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr index 13009f26f2..8ecf9f22a3 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors-5/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 3: expected type string for separator, got record (cat_sep(::#0, default)) +error in <...>/cat_sep_errors.zeek, line 3: expected type string for sep, got record (cat_sep(::#0, default)) diff --git a/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr b/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr index f3813297fe..c0a49beadf 100644 --- a/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr +++ b/testing/btest/Baseline.zam/bifs.cat_sep_errors/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/cat_sep_errors.zeek, line 6: cat_sep() takes at least 2 arguments, got 0 (cat_sep()) +error in <...>/cat_sep_errors.zeek, line 6: cat_sep() takes at least 2 argument(s), got 0 (cat_sep()) diff --git a/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr b/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr new file mode 100644 index 0000000000..02602c34eb --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.frameworks.cluster.publish-hrw-type-check/.stderr @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/publish-hrw-type-check.zeek, line 15: expected type Cluster::Pool for pool (Cluster::publish_hrw(/topic, 1234/tcp, test_send, ::#0)) +error in <...>/publish-hrw-type-check.zeek, line 17: expected type Cluster::Pool for pool (Cluster::publish_hrw(0, 1234/tcp, test_send, ::#1)) +error in <...>/publish-hrw-type-check.zeek, line 19: expected type Cluster::Pool for pool (Cluster::publish_rr(/topic, val, test_send, ::#2)) +error in <...>/publish-hrw-type-check.zeek, line 21: expected type string for key, got port (Cluster::publish_rr(::#3, 1234/tcp, test_send, ::#4)) diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out new file mode 100644 index 0000000000..69ea064e38 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +XXXXXXXXXX.XXXXXX, disabling_analyzer, CHhAvVGS1DHFjwGM9, AllAnalyzers::ANALYZER_ANALYZER_SMTP, 3 diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log new file mode 100644 index 0000000000..26cb0b0369 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log @@ -0,0 +1,13 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path smtp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_depth helo mailfrom rcptto date from to cc reply_to msg_id in_reply_to subject x_originating_ip first_received second_received last_reply path user_agent tls fuids +#types time string addr port addr port count string string set[string] string string set[string] set[string] string string string string addr string string string vector[addr] string bool vector[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 1 Bob-PC bob@example.org alice@example.org - - - - - - - - - - - 250 OK id=1pgobK-001mwq-ED 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC - alice@example.org - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC bob@example.org - - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log new file mode 100644 index 0000000000..8b84b63d00 --- /dev/null +++ b/testing/btest/Baseline.zam/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_mail_transaction_invalid rcpt to missing mail from F zeek SMTP +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_excessive_invalid_mail_transactions - F zeek SMTP +#close XXXX-XX-XX-XX-XX-XX From 223de9c81583428da1d87484cc247326351dedb6 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Thu, 4 May 2023 10:17:32 -0700 Subject: [PATCH 18/35] generate-docs: Only update submodule pointer during scheduled builds --- .github/workflows/generate-docs.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/generate-docs.yml b/.github/workflows/generate-docs.yml index d1ba9ad6d2..515fea1992 100644 --- a/.github/workflows/generate-docs.yml +++ b/.github/workflows/generate-docs.yml @@ -34,7 +34,13 @@ jobs: with: submodules: "recursive" + # Only reset the submodule pointer for scheduled builds. The reason to do + # this is to pick up any merge commits or anything that may have been + # missed in a merge, but not have any actual content. We don't want to do + # it otherwise because PRs should just use the submodule they're pointing + # at. - name: Switch doc submodule to master + if: github.event_name == 'schedule' run: cd doc && git checkout master - name: Fetch Dependencies From 2044cf661a9629eb2225b373371cb35801e75a71 Mon Sep 17 00:00:00 2001 From: zeek-bot Date: Fri, 5 May 2023 00:28:17 +0000 Subject: [PATCH 19/35] Update doc submodule [nomail] [skip ci] --- doc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc b/doc index 64cb423176..ff282f3f78 160000 --- a/doc +++ b/doc @@ -1 +1 @@ -Subproject commit 64cb4231767c56eceaeb23b29696ffac98459cd0 +Subproject commit ff282f3f7896745719e51223fb67f8f4ecd07a39 From 4387532613f30449b9aad0263da09e0b7db9e492 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 4 May 2023 14:58:51 +0200 Subject: [PATCH 20/35] ci: Add public-ecr-vacuum.sh --- .cirrus.yml | 15 ++++++++++ ci/public-ecr-cleanup.sh | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100755 ci/public-ecr-cleanup.sh diff --git a/.cirrus.yml b/.cirrus.yml index 32ab5adbd0..2948b6d740 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -612,6 +612,21 @@ container_image_manifest_docker_builder: - arm64_container_image - amd64_container_image +# Once we've published new images in container_image_manifest, remove any untagged +# images from the public ECR repository to stay within free-tier bounds. +public_ecr_cleanup_docker_builder: + cpu: 1 + only_if: > + $CIRRUS_CRON == '' && $CIRRUS_REPO_FULL_NAME == 'zeek/zeek' && $CIRRUS_BRANCH == 'master' + env: + AWS_ACCESS_KEY_ID: ENCRYPTED[!eff52f6442e1bc78bce5b15a23546344df41bf519f6201924cb70c7af12db23f442c0e5f2b3687c2d856ceb11fcb8c49!] + AWS_SECRET_ACCESS_KEY: ENCRYPTED[!748bc302dd196140a5fa8e89c9efd148882dc846d4e723787d2de152eb136fa98e8dea7e6d2d6779d94f72dd3c088228!] + AWS_REGION: us-east-1 + cleanup_script: + - ./ci/public-ecr-cleanup.sh + depends_on: + - container_image_manifest + cluster_testing_docker_builder: cpu: *CPUS memory: *MEMORY diff --git a/ci/public-ecr-cleanup.sh b/ci/public-ecr-cleanup.sh new file mode 100755 index 0000000000..7a1f7c809e --- /dev/null +++ b/ci/public-ecr-cleanup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# +# Script to batch-delete all untagged images from ECR public repositories, +# defaulting to the zeek/zeek-dev repository. +# First scans for manifest list images that are referencing other images and +# deletes them, then deletes all remaining untagged images. +set -eu + +if ! command -v aws >/dev/null; then + echo "missing aws command" >&2 + exit 1 +fi + +REGISTRY_ID=${REGISTRY_ID:-103243056077} +REPOSITORY_NAME=${REPOSITORY_NAME:-zeek-dev} +BATCH_DELETE_SIZE=${BATCH_DELETE_SIZE:-50} + +# Chunk up "$1" into BATCH_DELETE_SIZE entries and batch-delete them at once +# via aws batch-delete. +# +# Expected input looks as follows to keep things simple: +# +# imageDigest=sha256:db6...366 +# imageDigest=sha256:2ad...9b0 +# +function batch_delete { + while read -r batch; do + if [ -z "${batch}" ]; then + break + fi + + echo "Deleting ${batch}" + aws ecr-public batch-delete-image \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --image-ids ${batch} + + done < <(xargs -L ${BATCH_DELETE_SIZE} <<<"$1") +} + +# Find all untagged manifest lists with the following media types: +# +# application/vnd.docker.distribution.manifest.list.v2+json +# application/vnd.oci.image.index.v1+json +# +# These reference other images, so we need to delete them first as +# otherwise the referenced images can not be deleted. +IMAGE_DIGESTS=$(aws ecr-public describe-images \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --query 'imageDetails[?!imageTags && (contains(imageManifestMediaType, `manifest.list.v2`) || contains(imageManifestMediaType, `image.index.v1`))].{imageDigest: join(`=`, [`imageDigest`, imageDigest])}' \ + --output text) + +batch_delete "${IMAGE_DIGESTS}" + +# Now find all untagged manifests that are left. +IMAGE_DIGESTS=$(aws ecr-public describe-images \ + --registry-id "${REGISTRY_ID}" \ + --repository-name "${REPOSITORY_NAME}" \ + --query 'imageDetails[?!imageTags].{imageDigest: join(`=`, [`imageDigest`, imageDigest])}' \ + --output text) + +batch_delete "${IMAGE_DIGESTS}" From 2f035dbc07a2464e034870251ba43616278c1307 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 20 Apr 2023 14:33:38 +0200 Subject: [PATCH 21/35] Bump zeek-archiver submodule --- auxil/zeek-archiver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auxil/zeek-archiver b/auxil/zeek-archiver index 2b40a6bafe..3013f85fb6 160000 --- a/auxil/zeek-archiver +++ b/auxil/zeek-archiver @@ -1 +1 @@ -Subproject commit 2b40a6bafedbbf3fba16d292fd9fe8ba6e9de1bf +Subproject commit 3013f85fb644c427014c10e41a20b1560ce32a4e From c81387291567eae887700c43ee2a0946fc271ae5 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 20 Apr 2023 15:54:16 +0200 Subject: [PATCH 22/35] cluster/supervisor: Multi-logger awareness When multiple loggers are configured in a Supervisor controlled cluster configuration, encode extra information into the rotated filename to identify which logger produced the log. This is similar to the approach taken for ZeekControl, re-using the log_suffix terminology, but as there's only a single zeek-archiver process and no postprocessors and no other side-channel for additional information, we encode extra metadata into the filename. zeek-archiver is extended to recognize the special metadata part of the filename. This also solves the issue that multiple loggers in a supervisor setup overwrite each others log files within a single log-queue directory. --- NEWS | 4 + .../base/frameworks/cluster/nodes/logger.zeek | 38 ++++++++ .../logs.out | 3 + .../config-cluster-multi-logger.zeek | 94 +++++++++++++++++++ 4 files changed, 139 insertions(+) create mode 100644 testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out create mode 100644 testing/btest/supervisor/config-cluster-multi-logger.zeek diff --git a/NEWS b/NEWS index 959dd0849e..d8243a129c 100644 --- a/NEWS +++ b/NEWS @@ -116,6 +116,10 @@ New Functionality ``make-archive-name`` script and using the new ``ZEEK_ARG_LOG_SUFFIX`` environment variable. +- A supervisor controlled Zeek cluster is now multi-logger aware. This avoids + loggers overwriting each others log files within a single log-queue directory. + By default, a logger's name is appended to the rotated logs by zeek-archiver. + - Introduce a new command-line option ``-V`` / ``--build-info``. It produces verbose output in JSON format about the repository state and any included plugins. diff --git a/scripts/base/frameworks/cluster/nodes/logger.zeek b/scripts/base/frameworks/cluster/nodes/logger.zeek index 1021cee100..0a5f33c3e2 100644 --- a/scripts/base/frameworks/cluster/nodes/logger.zeek +++ b/scripts/base/frameworks/cluster/nodes/logger.zeek @@ -22,6 +22,32 @@ redef Log::default_rotation_interval = 1 hrs; ## Alarm summary mail interval. redef Log::default_mail_alarms_interval = 24 hrs; +## Generic log metadata rendered into the filename that zeek-archiver may interpret. +## This is populated with a log_suffix entry within zeek_init() when multiple +## logger nodes are defined in cluster-layout.zeek. +global log_metadata: table[string] of string; + +## Encode the given table as zeek-archiver understood metadata part. +function encode_log_metadata(tbl: table[string] of string): string + { + local metadata_vec: vector of string; + for ( k, v in log_metadata ) + { + if ( |v| == 0 ) # Assume concious decision to skip this entry. + next; + + if ( /[,=]/ in k || /[,=]/ in v ) + { + Reporter::warning(fmt("Invalid log_metadata: k='%s' v='%s'", k, v)); + next; + } + + metadata_vec += fmt("%s=%s", k, v); + } + + return join_string_vec(metadata_vec, ","); + } + ## This function will rotate logs in a format compatible with zeek-archiver. ## If you're using the Supervisor framework, this function will be used, ## if not, you can set :zeek:see:`Log::rotation_format_func` to this function. @@ -30,6 +56,10 @@ function archiver_rotation_format_func(ri: Log::RotationFmtInfo): Log::RotationP local open_str = strftime(Log::default_rotation_date_format, ri$open); local close_str = strftime(Log::default_rotation_date_format, ri$close); local base = fmt("%s__%s__%s__", ri$path, open_str, close_str); + + if ( |log_metadata| > 0 ) + base = fmt("%s%s__", base, encode_log_metadata(log_metadata)); + local rval = Log::RotationPath($file_basename=base); return rval; } @@ -42,6 +72,14 @@ redef Log::rotation_format_func = archiver_rotation_format_func; redef LogAscii::enable_leftover_log_rotation = T; +event zeek_init() + { + if ( "log_suffix" in log_metadata ) + return; + + if ( Cluster::get_node_count(Cluster::LOGGER) > 1 ) + log_metadata["log_suffix"] = Cluster::node; + } @else ## Use the cluster's archive logging script. diff --git a/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out b/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out new file mode 100644 index 0000000000..a9a0561636 --- /dev/null +++ b/testing/btest/Baseline/supervisor.config-cluster-multi-logger/logs.out @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +zeek/log-queue/test__XXXX-XX-XX-XX-XX-XX__XXXX-XX-XX-XX-XX-XX__log_suffix=logger-1__.log +zeek/log-queue/test__XXXX-XX-XX-XX-XX-XX__XXXX-XX-XX-XX-XX-XX__log_suffix=logger-2__.log diff --git a/testing/btest/supervisor/config-cluster-multi-logger.zeek b/testing/btest/supervisor/config-cluster-multi-logger.zeek new file mode 100644 index 0000000000..51a7cfb229 --- /dev/null +++ b/testing/btest/supervisor/config-cluster-multi-logger.zeek @@ -0,0 +1,94 @@ + +# @TEST-PORT: SUPERVISOR_PORT +# @TEST-PORT: LOGGER_PORT1 +# @TEST-PORT: LOGGER_PORT2 + +# Run multiple loggers with the supervisor and verify the generated log files +# contain their node names as log_suffix metadata within the log-queue directory. +# +# @TEST-EXEC: btest-bg-run zeek zeek -j -b %INPUT +# @TEST-EXEC: btest-bg-wait 10 +# @TEST-EXEC: ls zeek/log-queue/test*logger-1__.log >> logs.out +# @TEST-EXEC: ls zeek/log-queue/test*logger-2__.log >> logs.out +# @TEST-EXEC: TEST_DIFF_CANONIFIER='sed "s/[0-9][0-9]/XX/g"' btest-diff logs.out + +@load base/frameworks/cluster + +# Make both loggers log into the same log-queue directory. +redef Log::default_rotation_dir = "../log-queue"; + +global topic = "test-topic"; + +module Test; +export { + redef enum Log::ID += { LOG }; + + type Log: record { + s: string; + } &log; +} +module GLOBAL; + +global pong_count = 0; + +event pong() + { + ++pong_count; + + if ( pong_count == 2 ) + terminate(); + } + +event ping() + { + Log::write(Test::LOG, [$s="test"]); + Broker::publish(topic, pong); + } + +event zeek_init() + { + Log::create_stream(Test::LOG, [$columns=Test::Log]); + + if ( Supervisor::is_supervisor() ) + { + Broker::subscribe(topic); + Broker::listen("127.0.0.1", to_port(getenv("SUPERVISOR_PORT"))); + Broker::peer("127.0.0.1", to_port(getenv("LOGGER_PORT1"))); + Broker::peer("127.0.0.1", to_port(getenv("LOGGER_PORT2"))); + + local cluster: table[string] of Supervisor::ClusterEndpoint; + cluster["logger-1"] = [ + $role=Supervisor::LOGGER, + $host=127.0.0.1, + $p=to_port(getenv("LOGGER_PORT1")), + ]; + + cluster["logger-2"] = [ + $role=Supervisor::LOGGER, + $host=127.0.0.1, + $p=to_port(getenv("LOGGER_PORT2")), + ]; + + for ( n, ep in cluster ) + { + local sn = Supervisor::NodeConfig($name = n); + sn$cluster = cluster; + sn$directory = n; + local res = Supervisor::create(sn); + + if ( res != "" ) + print fmt("failed to create node %s: %s", n, res); + } + } + else + { + Broker::subscribe(topic); + Broker::peer("127.0.0.1", to_port(getenv("SUPERVISOR_PORT"))); + } + } + +event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) + { + if ( Supervisor::is_supervisor() ) + Broker::publish(topic, ping); + } From 979f2df57d044e52cecd7bdc50a29094a515857e Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 5 May 2023 14:02:07 +0200 Subject: [PATCH 23/35] core.network_time.broker: Test reliability improvement I wasn't able to reproduce this locally, but after looking at -B main-loop,tm for a bit it dawned that if the manager is sending ticks too fast, the Broker IO source may consume two ticks in one go before expiring timers and that would explain the observed baseline differences. Solve this by removing the reliance on realtime delays and switch to a request-reply pattern instead. Also fix indentation and bogus messages. Fixes #3013 --- .../core.network_time.broker/manager..stdout | 2 +- .../core.network_time.broker/worker..stdout | 2 +- testing/btest/core/network_time/broker.zeek | 24 ++++++++++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/testing/btest/Baseline/core.network_time.broker/manager..stdout b/testing/btest/Baseline/core.network_time.broker/manager..stdout index 658d123ea1..d4c454b893 100644 --- a/testing/btest/Baseline/core.network_time.broker/manager..stdout +++ b/testing/btest/Baseline/core.network_time.broker/manager..stdout @@ -1,4 +1,4 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. manager: listening -manager: peer added, publishing do_continue_processing +manager: peer added, publishing timer_tick() events manager: peer lost, terminating diff --git a/testing/btest/Baseline/core.network_time.broker/worker..stdout b/testing/btest/Baseline/core.network_time.broker/worker..stdout index d5abbff6b9..9ff86f6f95 100644 --- a/testing/btest/Baseline/core.network_time.broker/worker..stdout +++ b/testing/btest/Baseline/core.network_time.broker/worker..stdout @@ -17,7 +17,7 @@ 44.750, timer_tick, 13, 45.0 45.000, timer, second timer (3 sec) 45.000, timer_tick, 14, 45.25 -45.250, timer, third timer (3.5 sec) +45.250, timer, third timer (3.25 sec) 45.250, timer_tick, 15, 45.5 45.500, timer_tick, 16, 45.75 45.750, timer_tick, 17, 46.0 diff --git a/testing/btest/core/network_time/broker.zeek b/testing/btest/core/network_time/broker.zeek index 9419fb5d3f..7ec26a7a03 100644 --- a/testing/btest/core/network_time/broker.zeek +++ b/testing/btest/core/network_time/broker.zeek @@ -11,6 +11,8 @@ redef allow_network_time_forward = F; +global timer_tock: event(); + event zeek_init() { print network_time(), "zeek_init: broker peering"; @@ -34,7 +36,8 @@ event timer(s: string) print fmt("%.3f", network_time()), "timer", s; } -# The manager tells us our network_time. +# The manager sends timer_tick() with the network time to the worker which +# replies back with a timer_tock(). global received_ticks = 0; event timer_tick(ts: time) &is_used { @@ -48,10 +51,12 @@ event timer_tick(ts: time) &is_used { schedule 0.5sec { timer("first timer (1 sec)") }; schedule 3sec { timer("second timer (3 sec)") }; - schedule 3.25sec { timer("third timer (3.5 sec)") }; + schedule 3.25sec { timer("third timer (3.25 sec)") }; schedule 5sec { timer("fourth timer (10 sec)") }; } + Broker::publish("zeek/event/my_topic", timer_tock); + if ( received_ticks == 30 ) terminate(); } @@ -74,20 +79,21 @@ event zeek_init() { print "manager: listening"; Broker::listen("127.0.0.1", to_port(getenv("BROKER_PORT"))); + Broker::subscribe("zeek/event/my_topic"); } -event local_tick() { +# Received from the worker once it has processed the tick. +event timer_tock() &is_used + { fake_network_time = fake_network_time + double_to_interval(0.25); Broker::publish("zeek/event/my_topic", timer_tick, fake_network_time); - schedule 0.05 sec { local_tick() }; -} + } event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "manager: peer added, publishing do_continue_processing"; + { + print "manager: peer added, publishing timer_tick() events"; Broker::publish("zeek/event/my_topic", timer_tick, fake_network_time); - schedule 0.05 sec { local_tick() }; - } + } event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) { From 8246baf25c692b658e7a39527f6652e37f5b5095 Mon Sep 17 00:00:00 2001 From: Dominik Charousset Date: Fri, 5 May 2023 17:12:10 +0200 Subject: [PATCH 24/35] Skip version.h by default for Zeek sources --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43952dc00d..628987568f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,11 @@ set_target_properties(zeek_internal PROPERTIES EXPORT_NAME Internal) install(TARGETS zeek_internal EXPORT ZeekTargets) target_compile_features(zeek_internal INTERFACE ${ZEEK_CXX_STD}) +# Skip including the version.h header from the zeek-config.h header. This is +# mainly to optimize build times on CI by making sure the compiler cache remains +# valid for longer. +target_compile_definitions(zeek_internal INTERFACE ZEEK_CONFIG_SKIP_VERSION_H) + # Target for bundling the creation of auto-generated files. add_custom_target(zeek_autogen_files) From c173cfdbe79d29184a32ec2bab31a03279961c62 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Fri, 5 May 2023 12:00:55 -0700 Subject: [PATCH 25/35] added ZEEK_REPORT_UNCOMPILABLE environment variable for "-O report-uncompilable" --- src/script_opt/ScriptOpt.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script_opt/ScriptOpt.cc b/src/script_opt/ScriptOpt.cc index 8ae6cae765..8a44ffcd84 100644 --- a/src/script_opt/ScriptOpt.cc +++ b/src/script_opt/ScriptOpt.cc @@ -266,6 +266,7 @@ static void init_options() check_env_opt("ZEEK_XFORM", analysis_options.activate); check_env_opt("ZEEK_ZAM", analysis_options.gen_ZAM); check_env_opt("ZEEK_COMPILE_ALL", analysis_options.compile_all); + check_env_opt("ZEEK_REPORT_UNCOMPILABLE", analysis_options.report_uncompilable); check_env_opt("ZEEK_ZAM_CODE", analysis_options.gen_ZAM_code); check_env_opt("ZEEK_NO_ZAM_OPT", analysis_options.no_ZAM_opt); check_env_opt("ZEEK_DUMP_ZAM", analysis_options.dump_ZAM); From 7d7a293c040f1f6be6431b6ce4192297c6f30108 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Fri, 5 May 2023 12:01:31 -0700 Subject: [PATCH 26/35] updates to C++ maintenance scripts to better handle uncompilable BTests --- src/script_opt/CPP/maint/README | 58 ++++++----------------- src/script_opt/CPP/maint/check-CPP-gen.sh | 2 +- src/script_opt/CPP/maint/do-CPP-btest.sh | 3 +- 3 files changed, 18 insertions(+), 45 deletions(-) diff --git a/src/script_opt/CPP/maint/README b/src/script_opt/CPP/maint/README index 3510f38192..072b9dd222 100644 --- a/src/script_opt/CPP/maint/README +++ b/src/script_opt/CPP/maint/README @@ -11,13 +11,7 @@ If you make changes to the scripts, format them using The maintenance workflow: -1. Update this timestamp, so this file will be changed and you'll remember - to check in updates to the list of how the compiler currently fares - on various btests (see end of this doc): - - Sun Mar 5 12:02:44 PST 2023 - -2. Make sure the compiler can compile and execute the base scripts: +1. Make sure the compiler can compile and execute the base scripts: echo | src/zeek -O gen-C++ ninja @@ -27,32 +21,30 @@ The maintenance workflow: compiler that you'll want to subsequent run against the test suite, per the following. -3. Run "find-test-files.sh" to generate a list (to stdout) of all of the +2. Run "find-test-files.sh" to generate a list (to stdout) of all of the possible Zeek source files found in the test suite. -4. For each such Zeek file, run "check-zeek.sh" to see whether Zeek can +3. For each such Zeek file, run "check-zeek.sh" to see whether Zeek can parse it. This helps remove from further consideration difficult tests (like those that have embedded input files, or multiple separate scripts). -5. "mkdir CPP-test" - a directory for holding results relating to C++ testing +4. "mkdir CPP-test" - a directory for holding results relating to C++ testing -6. Run "check-CPP-gen.sh" for each Zeek file that passed "check-zeek.sh". +5. Run "check-CPP-gen.sh" for each Zeek file that passed "check-zeek.sh". This will generate a corresponding file in CPP-test/out* indicating whether "-O gen-C++" can successfully run on the input. Presently, it should - be able to do so for all of them, other than some exceptions noted below. + be able to do so for all of them. This step is parallelizable, say using xargs -P 10 -n 1. -7. Copy ./src/zeek to ./zeek.HOLD. This is used to speed up recompilation used +6. Copy ./src/zeek to ./zeek.HOLD. This is used to speed up recompilation used in the next step. However, it's also a headache to do development to fix a bug and then forget to update zeek.HOLD, which means you wind up running the old version. You can combat that by removing ./zeek.HOLD every time you start working on fixing a bug. -8. Use the appended database to remove inputs that have known issues. - -9. For every input that survives that pruning, run "do-CPP-btest.sh". +7. For every input that survives that pruning, run "do-CPP-btest.sh". This will generate C++ for the BTest, compile it, and run the result to see if it succeeds. It populates CPP-test/diag* with the Btest diagnostic output (empty means success). For non-empty output, @@ -67,32 +59,12 @@ The maintenance workflow: does btest, for displaying differences or updating the baseline (which is Baseline.cpp). --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +FYI: + There are two tests that in the past have demonstrated possible + variations due to presumed race conditions: -These BTests won't successfully run due to the indicated issue: + ../testing/btest/scripts/base/utils/active-http.test + ../testing/btest/supervisor/revive-leaf.zeek - bad-constructor - uses a complex old-style constructor that - should be updated - bad-when - deliberately has old-style "when" without captures - cond - not compilable due to the presence of conditional code - deprecated - uses deprecated features not support for -O gen-C++ - test-glitch - fails because of how we do testing: the first -O gen-C++ - pass leaves httpd running, which causes the second -O use-C++ - pass to fail when it tries to start up a new httpd - skipped - test can be skipped due to environmental reasons (e.g., - whether we have a certain Kerberos setup) - start-next - test uses @TEST-START-NEXT. As long as the diagnostic - output doesn't have errors for language.blank-local-4, it's ok - race? - appears to have a race condition, can fail even when - running with interpreter, and can pass with -O C++ - -Database Of Known Issues - -../testing/btest/language/blank-local.zeek start-next -../testing/btest/language/when-aggregates.zeek bad-when -../testing/btest/scripts/base/protocols/krb/smb2_krb.test skipped -../testing/btest/scripts/base/protocols/krb/smb2_krb_nokeytab.test skipped -../testing/btest/scripts/base/utils/active-http.test test-glitch -../testing/btest/scripts/policy/frameworks/dpd/packet-segment-logging.zeek cond -../testing/btest/scripts/policy/misc/dump-events.zeek skipped -../testing/btest/supervisor/revive-leaf.zeek race? + These haven't shown up in a while, as of May 2023, so we can remove + the above if they continue to not show up. diff --git a/src/script_opt/CPP/maint/check-CPP-gen.sh b/src/script_opt/CPP/maint/check-CPP-gen.sh index dae5e93720..a85901b1be 100755 --- a/src/script_opt/CPP/maint/check-CPP-gen.sh +++ b/src/script_opt/CPP/maint/check-CPP-gen.sh @@ -10,7 +10,7 @@ gen_out=CPP-test/gen.$abbr echo "fail" exit 1 fi - if grep -E -q '(deprecated.*(when|vector))|skipping|cannot compile|no matching functions' $gen_out; then + if grep -E -q '(deprecated.*(when|vector))|skipping|cannot be compiled|cannot compile|no matching functions' $gen_out; then echo "fail" exit 1 fi diff --git a/src/script_opt/CPP/maint/do-CPP-btest.sh b/src/script_opt/CPP/maint/do-CPP-btest.sh index 71df6dbc38..55be391567 100755 --- a/src/script_opt/CPP/maint/do-CPP-btest.sh +++ b/src/script_opt/CPP/maint/do-CPP-btest.sh @@ -21,6 +21,7 @@ base=$(echo $1 | sed 's,\.\./,,;s,/,#,g') rel_test=$(echo $1 | sed 's,.*testing/btest/,,') export ZEEK_GEN_CPP=1 +export ZEEK_REPORT_UNCOMPILABLE=1 export ZEEK_CPP_DIR=$(pwd) # export ZEEK_OPT_FUNCS="" export ZEEK_OPT_FILES="testing/btest" @@ -31,7 +32,7 @@ export ZEEK_OPT_FILES="testing/btest" ) # export -n ZEEK_GEN_CPP ZEEK_CPP_DIR ZEEK_OPT_FUNCS ZEEK_OPT_FILES -export -n ZEEK_GEN_CPP ZEEK_CPP_DIR ZEEK_OPT_FILES +export -n ZEEK_GEN_CPP ZEEK_REPORT_UNCOMPILABLE ZEEK_CPP_DIR ZEEK_OPT_FILES ninja From 832f48382c4e9967896259fa85092f36fe906b36 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Fri, 5 May 2023 12:03:00 -0700 Subject: [PATCH 27/35] BTest baseline updates for -O gen-C++ --- .../broker.store.create-failure/zeek.err | 4 ++-- .../.stderr | 5 +++++ .../out | 11 +++++++++++ .../out | 2 ++ .../smtp.log | 13 +++++++++++++ .../weird.log | 12 ++++++++++++ testing/btest/core/checksums-cli.test | 3 +++ 7 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr create mode 100644 testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out create mode 100644 testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out create mode 100644 testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log create mode 100644 testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log diff --git a/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err b/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err index 3215cff134..5abfd1c321 100644 --- a/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err +++ b/testing/btest/Baseline.cpp/broker.store.create-failure/zeek.err @@ -1,6 +1,6 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/create-failure.zeek (C++), line 61: Failed to attach master store backend_failure: (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__33__zf()) -error in <...>/create-failure.zeek (C++), line 61: Could not create Broker master store '../fail' (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__33__zf()) +error in <...>/create-failure.zeek (C++), line 61: Failed to attach master store backend_failure: (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__34__zf()) +error in <...>/create-failure.zeek (C++), line 61: Could not create Broker master store '../fail' (<___>testing_btest__tmp_broker_store_create_failure_create_failure_zeek__zeek_init__34__zf()) error in : invalid Broker store handle (broker::store::{}) error in : invalid Broker store handle (broker::store::{}) error in : invalid Broker store handle (broker::store::{}) diff --git a/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr new file mode 100644 index 0000000000..4201f8f1d9 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/.stderr @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +1299481205.000000 warning: non-void function returning without a value: Test::my_rotation_format_func +1299481205.000000 error: Failed to call Log::rotation_format_func for path test continuing with rotation to: ./test-11-03-07_06.00.05 +1299495605.000000 runtime error in compiled code: division by zero +1299495605.000000 error: Failed to call Log::rotation_format_func for path test continuing with rotation to: ./test-11-03-07_10.00.05 diff --git a/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out new file mode 100644 index 0000000000..b8c9d46382 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.frameworks.logging.rotate-custom-fmt-func-bad/out @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +test-1.log +test-10.log +test-11-03-07_06.00.05.log +test-11-03-07_10.00.05.log +test-2.log +test-3.log +test-5.log +test-6.log +test-7.log +test-9.log diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out new file mode 100644 index 0000000000..69ea064e38 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +XXXXXXXXXX.XXXXXX, disabling_analyzer, CHhAvVGS1DHFjwGM9, AllAnalyzers::ANALYZER_ANALYZER_SMTP, 3 diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log new file mode 100644 index 0000000000..26cb0b0369 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/smtp.log @@ -0,0 +1,13 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path smtp +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_depth helo mailfrom rcptto date from to cc reply_to msg_id in_reply_to subject x_originating_ip first_received second_received last_reply path user_agent tls fuids +#types time string addr port addr port count string string set[string] string string set[string] set[string] string string string string addr string string string vector[addr] string bool vector[string] +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 1 Bob-PC bob@example.org alice@example.org - - - - - - - - - - - 250 OK id=1pgobK-001mwq-ED 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC - alice@example.org - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 2 Bob-PC bob@example.org - - - - - - - - - - - - 500 unrecognized command 127.0.0.1,127.0.0.1 - F (empty) +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log new file mode 100644 index 0000000000..8b84b63d00 --- /dev/null +++ b/testing/btest/Baseline.cpp/scripts.base.protocols.smtp.mail-transactions-invalid-disable-analyzer/weird.log @@ -0,0 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path weird +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer source +#types time string addr port addr port string string bool string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_mail_transaction_invalid rcpt to missing mail from F zeek SMTP +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 44478 127.0.0.1 25 smtp_excessive_invalid_mail_transactions - F zeek SMTP +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/core/checksums-cli.test b/testing/btest/core/checksums-cli.test index 705addbf22..9216545573 100644 --- a/testing/btest/core/checksums-cli.test +++ b/testing/btest/core/checksums-cli.test @@ -1,3 +1,6 @@ +# Skip for C++ testing, since not all of the tests use the same script. +# @TEST-REQUIRES: test "${ZEEK_USE_CPP}" != "1" + # This verifies the interaction between the -C flag and the script-layer # ignore_checksums global. # From 02b7439d44fd2e517ba074b1e514eae38acb3dba Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 5 May 2023 21:04:11 +0200 Subject: [PATCH 28/35] Revert "Skip version.h by default for Zeek sources" This reverts commit 8246baf25c692b658e7a39527f6652e37f5b5095. Actually fails the include_plugins CI test and I had just opened another related issue. --- CHANGES | 9 +++++++++ CMakeLists.txt | 5 ----- VERSION | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 32dd03a153..577290eb12 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +6.0.0-dev.511 | 2023-05-05 21:04:11 +0200 + + * Revert "Skip version.h by default for Zeek sources" (Arne Welzel, Corelight) + + This reverts commit 8246baf25c692b658e7a39527f6652e37f5b5095. + + Actually fails the include_plugins CI test and I had just + opened another related issue. + 6.0.0-dev.510 | 2023-05-05 20:14:21 +0200 * Skip version.h by default for Zeek sources (Dominik Charousset, Corelight) diff --git a/CMakeLists.txt b/CMakeLists.txt index 628987568f..43952dc00d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,11 +192,6 @@ set_target_properties(zeek_internal PROPERTIES EXPORT_NAME Internal) install(TARGETS zeek_internal EXPORT ZeekTargets) target_compile_features(zeek_internal INTERFACE ${ZEEK_CXX_STD}) -# Skip including the version.h header from the zeek-config.h header. This is -# mainly to optimize build times on CI by making sure the compiler cache remains -# valid for longer. -target_compile_definitions(zeek_internal INTERFACE ZEEK_CONFIG_SKIP_VERSION_H) - # Target for bundling the creation of auto-generated files. add_custom_target(zeek_autogen_files) diff --git a/VERSION b/VERSION index 8dc59a172a..d43d6dba63 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.0-dev.510 +6.0.0-dev.511 From 584e68434df2336976bf9a1f239e463462f2676e Mon Sep 17 00:00:00 2001 From: Fupeng Zhao Date: Sun, 16 Apr 2023 14:45:19 +0000 Subject: [PATCH 29/35] Implement from_json bif --- scripts/base/init-bare.zeek | 8 + src/Val.cc | 301 ++++++++++++++++++ src/Val.h | 6 + src/zeek.bif | 42 ++- .../btest/Baseline/bifs.from_json-10/.stderr | 1 + .../btest/Baseline/bifs.from_json-10/.stdout | 6 + .../btest/Baseline/bifs.from_json-11/.stderr | 2 + .../btest/Baseline/bifs.from_json-11/.stdout | 2 + .../btest/Baseline/bifs.from_json-2/.stderr | 2 + .../btest/Baseline/bifs.from_json-2/.stdout | 2 + .../btest/Baseline/bifs.from_json-3/.stderr | 2 + .../btest/Baseline/bifs.from_json-3/.stdout | 2 + .../btest/Baseline/bifs.from_json-4/.stderr | 2 + .../btest/Baseline/bifs.from_json-4/.stdout | 2 + .../btest/Baseline/bifs.from_json-5/.stderr | 2 + .../btest/Baseline/bifs.from_json-5/.stdout | 2 + .../btest/Baseline/bifs.from_json-6/.stderr | 2 + .../btest/Baseline/bifs.from_json-6/.stdout | 2 + .../btest/Baseline/bifs.from_json-7/.stderr | 3 + .../btest/Baseline/bifs.from_json-7/.stdout | 3 + .../btest/Baseline/bifs.from_json-8/.stderr | 3 + .../btest/Baseline/bifs.from_json-8/.stdout | 2 + .../btest/Baseline/bifs.from_json-9/.stderr | 2 + .../btest/Baseline/bifs.from_json-9/.stdout | 2 + testing/btest/Baseline/bifs.from_json/.stderr | 1 + testing/btest/Baseline/bifs.from_json/.stdout | 8 + testing/btest/bifs/from_json.zeek | 120 +++++++ 27 files changed, 531 insertions(+), 1 deletion(-) create mode 100644 testing/btest/Baseline/bifs.from_json-10/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-10/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-11/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-11/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-2/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-2/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-3/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-3/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-4/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-4/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-5/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-5/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-6/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-6/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-7/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-7/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-8/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-8/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json-9/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json-9/.stdout create mode 100644 testing/btest/Baseline/bifs.from_json/.stderr create mode 100644 testing/btest/Baseline/bifs.from_json/.stdout create mode 100644 testing/btest/bifs/from_json.zeek diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index f3239c11a3..eab534764c 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -1093,6 +1093,14 @@ type entropy_test_result: record { serial_correlation: double; ##< Serial correlation coefficient. }; +## Return type for from_json BIF. +## +## .. zeek:see:: from_json +type from_json_result: record { + v: any &optional; ##< Parsed value. + valid: bool; ##< True if parsing was successful. +}; + # TCP values for :zeek:see:`endpoint` *state* field. # todo:: these should go into an enum to make them autodoc'able. const TCP_INACTIVE = 0; ##< Endpoint is still inactive. diff --git a/src/Val.cc b/src/Val.cc index 28c2dcbad7..b8e46ae37c 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -6,6 +6,8 @@ #include #include +#include +#include #include #include #include @@ -1061,6 +1063,305 @@ StringValPtr StringVal::Replace(RE_Matcher* re, const String& repl, bool do_all) return make_intrusive(new String(true, result, r - result)); } +static std::variant BuildVal(const rapidjson::Value& j, const TypePtr& t) + { + if ( j.IsNull() ) + return Val::nil; + + switch ( t->Tag() ) + { + case TYPE_BOOL: + { + if ( ! j.IsBool() ) + goto mismatch_err; + + return val_mgr->Bool(j.GetBool()); + } + + case TYPE_INT: + { + if ( ! j.IsInt64() ) + goto mismatch_err; + + return val_mgr->Int(j.GetInt64()); + } + + case TYPE_COUNT: + { + if ( ! j.IsUint64() ) + goto mismatch_err; + + return val_mgr->Count(j.GetUint64()); + } + + case TYPE_TIME: + { + if ( ! j.IsNumber() ) + goto mismatch_err; + + return make_intrusive(j.GetDouble()); + } + + case TYPE_DOUBLE: + { + if ( ! j.IsNumber() ) + goto mismatch_err; + + return make_intrusive(j.GetDouble()); + } + + case TYPE_INTERVAL: + { + if ( ! j.IsNumber() ) + goto mismatch_err; + + return make_intrusive(j.GetDouble()); + } + + case TYPE_PORT: + { + if ( ! j.IsString() ) + goto mismatch_err; + + int port = 0; + if ( j.GetStringLength() > 0 && j.GetStringLength() < 10 ) + { + char* slash; + errno = 0; + port = strtol(j.GetString(), &slash, 10); + if ( ! errno ) + { + ++slash; + if ( util::streq(slash, "tcp") ) + return val_mgr->Port(port, TRANSPORT_TCP); + else if ( util::streq(slash, "udp") ) + return val_mgr->Port(port, TRANSPORT_UDP); + else if ( util::streq(slash, "icmp") ) + return val_mgr->Port(port, TRANSPORT_ICMP); + else if ( util::streq(slash, "unknown") ) + return val_mgr->Port(port, TRANSPORT_UNKNOWN); + } + } + + return "wrong port format, must be /[0-9]{1,5}\\/(tcp|udp|icmp|unknown)/"; + } + + case TYPE_PATTERN: + { + if ( ! j.IsString() ) + goto mismatch_err; + + std::string candidate(j.GetString(), j.GetStringLength()); + if ( candidate.size() > 2 && candidate.front() == candidate.back() && + candidate.back() == '/' ) + { + // Remove the '/'s + candidate.erase(0, 1); + candidate.erase(candidate.size() - 1); + } + + auto re = std::make_unique(candidate.c_str()); + if ( ! re->Compile() ) + return "error compiling pattern"; + + return make_intrusive(re.release()); + } + + case TYPE_ADDR: + case TYPE_SUBNET: + { + if ( ! j.IsString() ) + goto mismatch_err; + + int width = 0; + std::string candidate; + + if ( t->Tag() == TYPE_ADDR ) + candidate = std::string(j.GetString(), j.GetStringLength()); + else + { + std::string_view subnet_sv(j.GetString(), j.GetStringLength()); + auto pos = subnet_sv.find('/'); + if ( pos == subnet_sv.npos ) + return util::fmt("Invalid value for subnet: %s", j.GetString()); + + candidate = std::string(j.GetString(), pos); + + errno = 0; + char* end; + width = strtol(subnet_sv.data() + pos + 1, &end, 10); + if ( subnet_sv.data() + pos + 1 == end || errno ) + return util::fmt("Invalid value for subnet: %s", j.GetString()); + } + + if ( candidate.front() == '[' ) + candidate.erase(0, 1); + if ( candidate.back() == ']' ) + candidate.erase(candidate.size() - 1); + + if ( t->Tag() == TYPE_ADDR ) + return make_intrusive(candidate); + else + return make_intrusive(candidate.c_str(), width); + } + + case TYPE_ENUM: + { + if ( ! j.IsString() ) + goto mismatch_err; + + auto et = t->AsEnumType(); + auto intval = et->Lookup({j.GetString(), j.GetStringLength()}); + + if ( intval < 0 ) + return util::fmt("'%s' is not a valid enum for '%s'.", j.GetString(), + et->GetName().c_str()); + + return et->GetEnumVal(intval); + } + + case TYPE_STRING: + { + if ( ! j.IsString() ) + goto mismatch_err; + + return make_intrusive(j.GetStringLength(), j.GetString()); + } + + case TYPE_TABLE: + { + if ( ! j.IsArray() ) + goto mismatch_err; + + if ( ! t->IsSet() ) + goto unsupport_err; + + auto tt = t->AsSetType(); + auto tl = tt->GetIndices(); + auto tv = make_intrusive(IntrusivePtr{NewRef{}, tt}); + + for ( const auto& item : j.GetArray() ) + { + std::variant v; + + if ( tl->GetTypes().size() == 1 ) + v = BuildVal(item, tl->GetPureType()); + else + v = BuildVal(item, tl); + + if ( ! get_if(&v) ) + return v; + + if ( ! std::get(v) ) + continue; + + tv->Assign(std::move(std::get(v)), nullptr); + } + + return tv; + } + + case TYPE_RECORD: + { + if ( ! j.IsObject() ) + goto mismatch_err; + + auto rt = t->AsRecordType(); + auto rv = make_intrusive(IntrusivePtr{NewRef{}, rt}); + for ( int i = 0; i < rt->NumFields(); ++i ) + { + auto td_i = rt->FieldDecl(i); + auto m_it = j.FindMember(td_i->id); + bool has_member = m_it != j.MemberEnd(); + bool member_is_null = has_member ? m_it->value.IsNull() : true; + + if ( ! has_member || member_is_null ) + { + if ( ! td_i->GetAttr(detail::ATTR_OPTIONAL) && + ! td_i->GetAttr(detail::ATTR_DEFAULT) ) + return util::fmt("Record '%s' field '%s' is null or missing", + t->GetName().c_str(), td_i->id); + + continue; + } + + auto v = BuildVal(m_it->value, td_i->type); + if ( ! get_if(&v) ) + return v; + + rv->Assign(i, std::move(std::get(v))); + } + + return rv; + } + + case TYPE_LIST: + { + if ( ! j.IsArray() ) + goto mismatch_err; + + auto lt = t->AsTypeList(); + + if ( j.GetArray().Size() < lt->GetTypes().size() ) + return "index type doesn't match"; + + auto lv = make_intrusive(TYPE_ANY); + + for ( size_t i = 0; i < lt->GetTypes().size(); i++ ) + { + auto v = BuildVal(j.GetArray()[i], lt->GetTypes()[i]); + if ( ! get_if(&v) ) + return v; + + lv->Append(std::move(std::get(v))); + } + + return lv; + } + + case TYPE_VECTOR: + { + if ( ! j.IsArray() ) + goto mismatch_err; + + auto vt = t->AsVectorType(); + auto vv = make_intrusive(IntrusivePtr{NewRef{}, vt}); + for ( const auto& item : j.GetArray() ) + { + auto v = BuildVal(item, vt->Yield()); + if ( ! get_if(&v) ) + return v; + + if ( ! std::get(v) ) + continue; + + vv->Assign(vv->Size(), std::move(std::get(v))); + } + + return vv; + } + + default: + unsupport_err: + return util::fmt("type '%s' unsupport", type_name(t->Tag())); + } + +mismatch_err: + return util::fmt("type '%s' mismatch", type_name(t->Tag())); + } + +std::variant ValFromJSON(std::string_view json_str, const TypePtr& t) + { + rapidjson::Document doc; + rapidjson::ParseResult ok = doc.Parse(json_str.data(), json_str.length()); + + if ( ! ok ) + return util::fmt("JSON parse error: %s Offset: %lu", rapidjson::GetParseError_En(ok.Code()), + ok.Offset()); + + return BuildVal(doc, t); + } + ValPtr StringVal::DoClone(CloneState* state) { // We could likely treat this type as immutable and return a reference diff --git a/src/Val.h b/src/Val.h index e73536f127..82827a1428 100644 --- a/src/Val.h +++ b/src/Val.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "zeek/IntrusivePtr.h" @@ -1760,4 +1761,9 @@ extern bool can_cast_value_to_type(const Val* v, Type* t); // specific instance later. extern bool can_cast_value_to_type(const Type* s, Type* t); +// Parses a JSON string into arbitrary Zeek data using std::variant to simulate functional exception +// handling. Returns a ValPtr if parsing was successful, or a std::string containing an error +// message if an error occurred. +extern std::variant ValFromJSON(std::string_view json_str, const TypePtr& t); + } // namespace zeek diff --git a/src/zeek.bif b/src/zeek.bif index 5684d7fac5..1dd6397c9c 100644 --- a/src/zeek.bif +++ b/src/zeek.bif @@ -5576,12 +5576,52 @@ function anonymize_addr%(a: addr, cl: IPAddrAnonymizationClass%): addr ## ## returns: a JSON formatted string. ## -## .. zeek:see:: fmt cat cat_sep string_cat print_raw +## .. zeek:see:: fmt cat cat_sep string_cat print_raw from_json function to_json%(val: any, only_loggable: bool &default=F, field_escape_pattern: pattern &default=/^_/%): string %{ return val->ToJSON(only_loggable, field_escape_pattern); %} +## A function to convert a JSON string into arbitrary Zeek data. +## +## json_str: The JSON string. +## +## t: Type of zeek data. +## +## returns: A value of type t. +## +## .. zeek:see:: to_json +function from_json%(json_str: string, t: any%): from_json_result + %{ + static auto result_type = zeek::id::find_type("from_json_result"); + static auto v_idx = result_type->FieldOffset("v"); + static auto valid_idx = result_type->FieldOffset("valid"); + + auto rval = zeek::make_intrusive(result_type); + + if ( t->GetType()->Tag() != zeek::TYPE_TYPE ) + { + rval->Assign(valid_idx, false); + zeek::emit_builtin_error("from_json() requires a type argument"); + return rval; + } + + auto res = zeek::ValFromJSON(json_str->ToStdStringView(), t->AsType()->AsTypeType()->GetType()); + + if ( auto val = std::get_if(&res) ) + { + rval->Assign(v_idx, *val); + rval->Assign(valid_idx, true); + } + else + { + rval->Assign(valid_idx, false); + zeek::emit_builtin_error(std::get(res).c_str()); + } + + return rval; + %} + ## Compresses a given path by removing '..'s and the parent directory it ## references and also removing dual '/'s and extraneous '/./'s. ## diff --git a/testing/btest/Baseline/bifs.from_json-10/.stderr b/testing/btest/Baseline/bifs.from_json-10/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-10/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/bifs.from_json-10/.stdout b/testing/btest/Baseline/bifs.from_json-10/.stdout new file mode 100644 index 0000000000..c7202a240c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-10/.stdout @@ -0,0 +1,6 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v={ +fe80::/64, +192.168.0.0/16 +}, valid=T] +[v=[1, 3, 4], valid=T] diff --git a/testing/btest/Baseline/bifs.from_json-11/.stderr b/testing/btest/Baseline/bifs.from_json-11/.stderr new file mode 100644 index 0000000000..26a7b9aed1 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-11/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 8: Record 'Foo' field 'hello' is null or missing (from_json({"t":null}, to_any_coerceFoo)) diff --git a/testing/btest/Baseline/bifs.from_json-11/.stdout b/testing/btest/Baseline/bifs.from_json-11/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-11/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-2/.stderr b/testing/btest/Baseline/bifs.from_json-2/.stderr new file mode 100644 index 0000000000..1ce3c885b8 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-2/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: from_json() requires a type argument (from_json([], to_any_coerce10)) diff --git a/testing/btest/Baseline/bifs.from_json-2/.stdout b/testing/btest/Baseline/bifs.from_json-2/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-2/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-3/.stderr b/testing/btest/Baseline/bifs.from_json-3/.stderr new file mode 100644 index 0000000000..cd9437efcb --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-3/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: JSON parse error: Missing a closing quotation mark in string. Offset: 5 (from_json({"hel, to_any_coercestring_vec)) diff --git a/testing/btest/Baseline/bifs.from_json-3/.stdout b/testing/btest/Baseline/bifs.from_json-3/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-3/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-4/.stderr b/testing/btest/Baseline/bifs.from_json-4/.stderr new file mode 100644 index 0000000000..b75901361f --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-4/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 5: type 'bool' mismatch (from_json([], to_any_coercebool_t)) diff --git a/testing/btest/Baseline/bifs.from_json-4/.stdout b/testing/btest/Baseline/bifs.from_json-4/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-4/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-5/.stderr b/testing/btest/Baseline/bifs.from_json-5/.stderr new file mode 100644 index 0000000000..237b16da3e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-5/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 4: type 'table' unsupport (from_json([], to_any_coercetable_string_of_string)) diff --git a/testing/btest/Baseline/bifs.from_json-5/.stdout b/testing/btest/Baseline/bifs.from_json-5/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-5/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-6/.stderr b/testing/btest/Baseline/bifs.from_json-6/.stderr new file mode 100644 index 0000000000..fa015b8031 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-6/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 5: wrong port format, must be <...>/(tcp|udp|icmp|unknown)/ (from_json("80", to_any_coerceport_t)) diff --git a/testing/btest/Baseline/bifs.from_json-6/.stdout b/testing/btest/Baseline/bifs.from_json-6/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-6/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-7/.stderr b/testing/btest/Baseline/bifs.from_json-7/.stderr new file mode 100644 index 0000000000..796ee2c489 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-7/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 5: index type doesn't match (from_json([[1, false], [2]], to_any_coerceset_t)) +error in <...>/from_json.zeek, line 6: type 'bool' mismatch (from_json([[1, false], [2, 1]], to_any_coerceset_t)) diff --git a/testing/btest/Baseline/bifs.from_json-7/.stdout b/testing/btest/Baseline/bifs.from_json-7/.stdout new file mode 100644 index 0000000000..d288024480 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-7/.stdout @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-8/.stderr b/testing/btest/Baseline/bifs.from_json-8/.stderr new file mode 100644 index 0000000000..18bb4fa2eb --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-8/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error: error compiling pattern /^?(.|\n)*(([[:print:]]{-}[[:alnum:]]foo))/ +error in <...>/from_json.zeek, line 5: error compiling pattern (from_json("/([[:print:]]{-}[[:alnum:]]foo)/", to_any_coercepattern_t)) diff --git a/testing/btest/Baseline/bifs.from_json-8/.stdout b/testing/btest/Baseline/bifs.from_json-8/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-8/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json-9/.stderr b/testing/btest/Baseline/bifs.from_json-9/.stderr new file mode 100644 index 0000000000..60cbecd370 --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-9/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/from_json.zeek, line 7: 'Yellow' is not a valid enum for 'Color'. (from_json("Yellow", to_any_coerceColor)) diff --git a/testing/btest/Baseline/bifs.from_json-9/.stdout b/testing/btest/Baseline/bifs.from_json-9/.stdout new file mode 100644 index 0000000000..aee95c8a8e --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json-9/.stdout @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=, valid=F] diff --git a/testing/btest/Baseline/bifs.from_json/.stderr b/testing/btest/Baseline/bifs.from_json/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/bifs.from_json/.stdout b/testing/btest/Baseline/bifs.from_json/.stdout new file mode 100644 index 0000000000..d461779aac --- /dev/null +++ b/testing/btest/Baseline/bifs.from_json/.stdout @@ -0,0 +1,8 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[v=[hello=world, t=T, f=F, n=, def=123, i=123, pi=3.1416, a=[1, 2, 3, 4], c1=A::Blue, p=1500/tcp, ti=XXXXXXXXXX.XXXXXX, it=1.0 hr 23.0 mins 20.0 secs, ad=127.0.0.1, s=::1/128, re=/^?(a)$?/, su={ +aa:bb::/32, +192.168.0.0/16 +}, se={ +[192.168.0.1, 80/tcp] , +[2001:db8::1, 8080/udp] +}], valid=T] diff --git a/testing/btest/bifs/from_json.zeek b/testing/btest/bifs/from_json.zeek new file mode 100644 index 0000000000..53bde23dc5 --- /dev/null +++ b/testing/btest/bifs/from_json.zeek @@ -0,0 +1,120 @@ +# @TEST-EXEC: ASAN_OPTIONS="$ASAN_OPTIONS,detect_leaks=0" zeek -b %INPUT +# @TEST-EXEC: btest-diff .stdout +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr + +module A; + +type Color: enum { + Red = 10, + White = 20, + Blue = 30 +}; + +type Foo: record { + hello: string; + t: bool; + f: bool; + n: count &optional; + def: count &default = 123; + i: int; + pi: double; + a: string_vec; + c1: Color; + p: port; + ti: time; + it: interval; + ad: addr; + s: subnet; + re: pattern; + su: subnet_set; + se: set[addr, port]; +}; + +event zeek_init() + { + local json = "{\"hello\":\"world\",\"t\":true,\"f\":false,\"se\":[[\"192.168.0.1\", \"80/tcp\"], [\"2001:db8::1\", \"8080/udp\"]],\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[\"1\",\"2\",\"3\",\"4\"],\"su\":[\"[aa:bb::0]/32\",\"192.168.0.0/16\"],\"c1\":\"A::Blue\",\"p\":\"1500/tcp\",\"it\":5000,\"ad\":\"127.0.0.1\",\"s\":\"[::1/128]\",\"re\":\"/a/\",\"ti\":1681652265.042767}"; + print from_json(json, Foo); + } + +@TEST-START-NEXT +# argument type mismatch +event zeek_init() + { + print from_json("[]", 10); + } + +@TEST-START-NEXT +# JSON parse error +event zeek_init() + { + print from_json("{\"hel", string_vec); + } + +@TEST-START-NEXT +type bool_t: bool; +# type mismatch error +event zeek_init() + { + print from_json("[]", bool_t); + } + +@TEST-START-NEXT +# type unsupport error +event zeek_init() + { + print from_json("[]", table_string_of_string); + } + +@TEST-START-NEXT +type port_t: port; +# wrong port format +event zeek_init() + { + print from_json("\"80\"", port_t); + } + +@TEST-START-NEXT +type set_t: set[int, bool]; +# index type doesn't match +event zeek_init() + { + print from_json("[[1, false], [2]]", set_t); + print from_json("[[1, false], [2, 1]]", set_t); + } + +@TEST-START-NEXT +type pattern_t: pattern; +# pattern compile error +event zeek_init() + { + print from_json("\"/([[:print:]]{-}[[:alnum:]]foo)/\"", pattern_t); + } + +@TEST-START-NEXT +type Color: enum { + Red = 10 +}; +# enum error +event zeek_init() + { + print from_json("\"Yellow\"", Color); + } + +@TEST-START-NEXT +# container null +event zeek_init() + { + print from_json("[\"fe80::/64\",null,\"192.168.0.0/16\"]", subnet_set); + print from_json("[\"1\",null,\"3\",\"4\"]", string_vec); + } + +@TEST-START-NEXT +type Foo: record { + hello: string; + t: bool; +}; +# record field null or missing +event zeek_init() + { + print from_json("{\"t\":null}", Foo); + } From 1facc34e09e1c2c52e099c49d077f193bd481c48 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Tue, 9 May 2023 10:57:14 +0200 Subject: [PATCH 30/35] Fixup Val.h/Val.cc: Actually move ValFromJSON into zeek::detail Lost during merge.. --- CHANGES | 4 ++++ VERSION | 2 +- src/Val.cc | 2 +- src/Val.h | 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index e4b699d482..2a3d4662f0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +6.0.0-dev.519 | 2023-05-09 11:03:32 +0200 + + * Fixup Val.h/Val.cc: Actually move ValFromJSON into zeek::detail (Arne Welzel, Corelight) + 6.0.0-dev.518 | 2023-05-09 10:19:46 +0200 * Implement from_json bif (Fupeng Zhao) diff --git a/VERSION b/VERSION index 303a1e609d..07052b4a23 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.0-dev.518 +6.0.0-dev.519 diff --git a/src/Val.cc b/src/Val.cc index 816e583a30..a6d6fbfed5 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -1379,7 +1379,7 @@ static std::variant BuildVal(const rapidjson::Value& j, con } } -std::variant ValFromJSON(std::string_view json_str, const TypePtr& t) +std::variant detail::ValFromJSON(std::string_view json_str, const TypePtr& t) { rapidjson::Document doc; rapidjson::ParseResult ok = doc.Parse(json_str.data(), json_str.length()); diff --git a/src/Val.h b/src/Val.h index 0cd9dc3eb6..629dbe624e 100644 --- a/src/Val.h +++ b/src/Val.h @@ -1795,9 +1795,12 @@ extern bool can_cast_value_to_type(const Val* v, Type* t); // specific instance later. extern bool can_cast_value_to_type(const Type* s, Type* t); +namespace detail + { // Parses a JSON string into arbitrary Zeek data using std::variant to simulate functional exception // handling. Returns a ValPtr if parsing was successful, or a std::string containing an error // message if an error occurred. extern std::variant ValFromJSON(std::string_view json_str, const TypePtr& t); + } } // namespace zeek From fd72d81badbb7363dd7ea4914b7307f161f0c955 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Thu, 4 May 2023 11:30:33 -0700 Subject: [PATCH 31/35] Update cmake submodule after reformat --- cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake b/cmake index 70c6180afc..a90d691796 160000 --- a/cmake +++ b/cmake @@ -1 +1 @@ -Subproject commit 70c6180afcc06767d0ab031d7c36cb0dd6503094 +Subproject commit a90d69179607c5083158f926be6d37f3db18f110 From 84e3f414a75d3c06e7a6d70243a4794306cc71a2 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Mon, 8 May 2023 10:19:26 -0700 Subject: [PATCH 32/35] Use the same rules as cmake submodule to reformat Zeek --- .cmake-format.json | 80 ++ .pre-commit-config.yaml | 6 + CMakeLists.txt | 984 +++++++++--------- man/CMakeLists.txt | 10 +- scripts/CMakeLists.txt | 30 +- src/CMakeLists.txt | 491 ++++----- src/analyzer/CMakeLists.txt | 14 +- .../protocol/bittorrent/CMakeLists.txt | 15 +- .../protocol/conn-size/CMakeLists.txt | 9 +- src/analyzer/protocol/dce-rpc/CMakeLists.txt | 23 +- src/analyzer/protocol/dhcp/CMakeLists.txt | 17 +- src/analyzer/protocol/dnp3/CMakeLists.txt | 15 +- src/analyzer/protocol/dns/CMakeLists.txt | 7 +- src/analyzer/protocol/file/CMakeLists.txt | 7 +- src/analyzer/protocol/finger/CMakeLists.txt | 9 +- .../protocol/finger/legacy/CMakeLists.txt | 7 +- src/analyzer/protocol/ftp/CMakeLists.txt | 9 +- src/analyzer/protocol/gnutella/CMakeLists.txt | 7 +- src/analyzer/protocol/gssapi/CMakeLists.txt | 15 +- src/analyzer/protocol/http/CMakeLists.txt | 9 +- src/analyzer/protocol/ident/CMakeLists.txt | 7 +- src/analyzer/protocol/imap/CMakeLists.txt | 13 +- src/analyzer/protocol/irc/CMakeLists.txt | 7 +- src/analyzer/protocol/krb/CMakeLists.txt | 43 +- src/analyzer/protocol/login/CMakeLists.txt | 17 +- src/analyzer/protocol/mime/CMakeLists.txt | 7 +- src/analyzer/protocol/modbus/CMakeLists.txt | 13 +- src/analyzer/protocol/mqtt/CMakeLists.txt | 41 +- src/analyzer/protocol/mysql/CMakeLists.txt | 13 +- src/analyzer/protocol/ncp/CMakeLists.txt | 11 +- src/analyzer/protocol/netbios/CMakeLists.txt | 9 +- src/analyzer/protocol/ntlm/CMakeLists.txt | 15 +- src/analyzer/protocol/ntp/CMakeLists.txt | 17 +- src/analyzer/protocol/pia/CMakeLists.txt | 8 +- src/analyzer/protocol/pop3/CMakeLists.txt | 7 +- src/analyzer/protocol/radius/CMakeLists.txt | 13 +- src/analyzer/protocol/rdp/CMakeLists.txt | 25 +- src/analyzer/protocol/rfb/CMakeLists.txt | 13 +- src/analyzer/protocol/rpc/CMakeLists.txt | 15 +- src/analyzer/protocol/sip/CMakeLists.txt | 21 +- src/analyzer/protocol/smb/CMakeLists.txt | 165 ++- src/analyzer/protocol/smtp/CMakeLists.txt | 9 +- src/analyzer/protocol/snmp/CMakeLists.txt | 17 +- src/analyzer/protocol/socks/CMakeLists.txt | 13 +- src/analyzer/protocol/ssh/CMakeLists.txt | 17 +- src/analyzer/protocol/ssl/CMakeLists.txt | 53 +- src/analyzer/protocol/syslog/CMakeLists.txt | 9 +- .../protocol/syslog/legacy/CMakeLists.txt | 13 +- src/analyzer/protocol/tcp/CMakeLists.txt | 17 +- src/analyzer/protocol/xmpp/CMakeLists.txt | 13 +- src/analyzer/protocol/zip/CMakeLists.txt | 8 +- src/broker/CMakeLists.txt | 19 +- src/file_analysis/CMakeLists.txt | 21 +- .../analyzer/data_event/CMakeLists.txt | 7 +- .../analyzer/entropy/CMakeLists.txt | 7 +- .../analyzer/extract/CMakeLists.txt | 9 +- .../analyzer/hash/CMakeLists.txt | 7 +- src/file_analysis/analyzer/pe/CMakeLists.txt | 19 +- .../analyzer/x509/CMakeLists.txt | 21 +- src/fuzzers/CMakeLists.txt | 83 +- src/input/CMakeLists.txt | 11 +- src/input/readers/CMakeLists.txt | 3 +- src/input/readers/ascii/CMakeLists.txt | 7 +- src/input/readers/benchmark/CMakeLists.txt | 7 +- src/input/readers/binary/CMakeLists.txt | 7 +- src/input/readers/config/CMakeLists.txt | 7 +- src/input/readers/raw/CMakeLists.txt | 7 +- src/input/readers/sqlite/CMakeLists.txt | 7 +- src/iosource/CMakeLists.txt | 13 +- src/iosource/pcap/CMakeLists.txt | 9 +- src/logging/CMakeLists.txt | 11 +- src/logging/writers/CMakeLists.txt | 3 +- src/logging/writers/ascii/CMakeLists.txt | 9 +- src/logging/writers/none/CMakeLists.txt | 7 +- src/logging/writers/sqlite/CMakeLists.txt | 7 +- src/packet_analysis/CMakeLists.txt | 13 +- .../protocol/arp/CMakeLists.txt | 7 +- .../protocol/ayiya/CMakeLists.txt | 8 +- .../protocol/ethernet/CMakeLists.txt | 8 +- .../protocol/fddi/CMakeLists.txt | 8 +- .../protocol/geneve/CMakeLists.txt | 7 +- .../protocol/gre/CMakeLists.txt | 8 +- .../protocol/gtpv1/CMakeLists.txt | 15 +- .../protocol/icmp/CMakeLists.txt | 9 +- .../protocol/ieee802_11/CMakeLists.txt | 8 +- .../protocol/ieee802_11_radio/CMakeLists.txt | 8 +- .../protocol/ip/CMakeLists.txt | 9 +- .../protocol/iptunnel/CMakeLists.txt | 8 +- .../protocol/linux_sll/CMakeLists.txt | 8 +- .../protocol/linux_sll2/CMakeLists.txt | 8 +- .../protocol/llc/CMakeLists.txt | 8 +- .../protocol/mpls/CMakeLists.txt | 8 +- .../protocol/nflog/CMakeLists.txt | 8 +- .../protocol/novell_802_3/CMakeLists.txt | 8 +- .../protocol/null/CMakeLists.txt | 8 +- .../protocol/pbb/CMakeLists.txt | 1 - .../protocol/ppp_serial/CMakeLists.txt | 8 +- .../protocol/pppoe/CMakeLists.txt | 8 +- .../protocol/root/CMakeLists.txt | 8 +- .../protocol/skip/CMakeLists.txt | 8 +- .../protocol/snap/CMakeLists.txt | 8 +- .../protocol/tcp/CMakeLists.txt | 9 +- .../protocol/teredo/CMakeLists.txt | 9 +- .../protocol/udp/CMakeLists.txt | 9 +- .../protocol/vlan/CMakeLists.txt | 8 +- .../protocol/vntag/CMakeLists.txt | 8 +- .../protocol/vxlan/CMakeLists.txt | 7 +- .../protocol/wrapper/CMakeLists.txt | 8 +- src/probabilistic/CMakeLists.txt | 19 +- src/session/CMakeLists.txt | 8 +- src/telemetry/CMakeLists.txt | 8 +- src/zeekygen/CMakeLists.txt | 19 +- testing/CMakeLists.txt | 10 +- .../CMakeLists.txt | 3 +- .../plugins/conflict-plugin/CMakeLists.txt | 3 +- .../btest/plugins/file-plugin/CMakeLists.txt | 3 +- .../packet-protocol-plugin/CMakeLists.txt | 3 +- .../plugins/pktdumper-plugin/CMakeLists.txt | 3 +- .../plugins/pktsrc-plugin/CMakeLists.txt | 3 +- .../plugins/protocol-plugin/CMakeLists.txt | 3 +- .../plugins/reader-plugin/CMakeLists.txt | 3 +- .../plugins/writer-plugin/CMakeLists.txt | 3 +- .../Files/protocol-plugin/CMakeLists.txt | 3 +- .../Files/py-lib-plugin/CMakeLists.txt | 4 +- .../Files/zeek-version-plugin/CMakeLists.txt | 3 +- 125 files changed, 1423 insertions(+), 1670 deletions(-) create mode 100644 .cmake-format.json diff --git a/.cmake-format.json b/.cmake-format.json new file mode 100644 index 0000000000..ff553dbbe2 --- /dev/null +++ b/.cmake-format.json @@ -0,0 +1,80 @@ +{ + "parse": { + "additional_commands": { + "CheckIPProto": { + "kwargs": { + "_proto": "*" + } + }, + "CheckType": { + "kwargs": { + "_type": "*", + "_alt_type": "*", + "_var": "*" + } + }, + "SetPackageVersion": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageFileName": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageInstallScripts": { + "kwargs": { + "VERSION": "*" + } + }, + "ConfigurePackaging": { + "kwargs": { + "_version": "*" + } + }, + "SetPackageGenerators": {}, + "SetPackageMetadata": {}, + "FindRequiredPackage": { + "kwargs": { + "packageName": "*" + } + }, + "InstallClobberImmune": { + "kwargs": { + "_srcfile": "*", + "_dstfile": "*" + } + }, + "InstallPackageConfigFile": { + "kwargs": { + "_srcfile": "*", + "_dstdir": "*", + "_dstfilename": "*" + } + }, + "InstallShellScript": { + "kwargs": { + "_srcfile": "*", + "_dstfile": "*" + } + }, + "InstallSymLink": { + "kwargs": { + "_filepath": "*", + "_sympath": "*" + } + } + } + }, + "format": { + "line_width": 100, + "tab_size": 4, + "separate_ctrl_name_with_space": true, + "max_subgroups_hwrap": 3, + "line_ending": "unix" + }, + "markup": { + "enable_markup": false + } +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 50844cf58b..4315bdfbb9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,3 +17,9 @@ repos: rev: v0.31.0 hooks: - id: yapf + +- repo: https://github.com/cheshirekow/cmake-format-precommit + rev: v0.6.13 + hooks: + - id: cmake-format + exclude: '^auxil/.*$' diff --git a/CMakeLists.txt b/CMakeLists.txt index 43952dc00d..858fd31ddd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,30 +2,29 @@ # auxil/zeek-aux/plugin-support/skeleton/CMakeLists.txt cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR) -if ( WIN32 ) +if (WIN32) # Enable usage of CMAKE_MSVC_RUNTIME_LIBRARY variable cmake_policy(SET CMP0091 NEW) -endif() +endif () project(Zeek C CXX) - # We want to set ENABLE_DEBUG to ON by default if the build type is Debug. set(ENABLE_DEBUG_DEFAULT OFF) -if ( NOT GENERATOR_IS_MULTI_CONFIG ) - string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) - if ( build_type_lower STREQUAL "debug" ) - set(ENABLE_DEBUG_DEFAULT ON) - endif () - unset(build_type_lower) +if (NOT GENERATOR_IS_MULTI_CONFIG) + string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) + if (build_type_lower STREQUAL "debug") + set(ENABLE_DEBUG_DEFAULT ON) + endif () + unset(build_type_lower) endif () # On UNIX, install additional Zeek tools by default and build shared objects. -if ( NOT WIN32 ) - set(ZEEK_INSTALL_TOOLS_DEFAULT ON) - option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) +if (NOT WIN32) + set(ZEEK_INSTALL_TOOLS_DEFAULT ON) + option(BUILD_SHARED_LIBS "Build targets as shared libraries." ON) else () - set(ZEEK_INSTALL_TOOLS_DEFAULT OFF) + set(ZEEK_INSTALL_TOOLS_DEFAULT OFF) endif () # CMake options (Boolean flags). @@ -44,8 +43,8 @@ option(PREALLOCATE_PORT_ARRAY "Pre-allocate all ports for zeek::Val." ON) option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON) # Non-boolean options. -if ( NOT WIN32 ) - if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) +if (NOT WIN32) + if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "/usr/local/zeek" CACHE PATH "Install directory used by install()." FORCE) endif () @@ -59,8 +58,8 @@ set(ZEEK_SCRIPT_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/share/zeek" set(ZEEK_ETC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc" CACHE PATH "Install directory for Zeek configuration files.") -set(CMAKE_EXPORT_COMPILE_COMMANDS ON - CACHE INTERNAL "Whether to write a JSON compile commands database") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL + "Whether to write a JSON compile commands database") set(ZEEK_CXX_STD cxx_std_17 CACHE STRING "The C++ standard to use.") @@ -75,7 +74,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) # Windows: Configure runtime and dependencies -if ( MSVC ) +if (MSVC) # Remove existing runtime flags set(CompilerFlags CMAKE_CXX_FLAGS @@ -85,9 +84,8 @@ if ( MSVC ) CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - ) - foreach(CompilerFlag ${CompilerFlags}) + CMAKE_C_FLAGS_RELWITHDEBINFO) + foreach (CompilerFlag ${CompilerFlags}) string(REGEX REPLACE "[/|-]MDd" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]MD" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]MTd" "" ${CompilerFlag} "${${CompilerFlag}}") @@ -95,15 +93,13 @@ if ( MSVC ) string(REGEX REPLACE "[/|-]Zi" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]W3" "" ${CompilerFlag} "${${CompilerFlag}}") string(REGEX REPLACE "[/|-]W4" "" ${CompilerFlag} "${${CompilerFlag}}") - endforeach() + endforeach () # Set compilation flags for Windows - add_compile_options( - /guard:cf # required by CheckCFlags - /Z7) # required by CheckCFlags + add_compile_options(/guard:cf # required by CheckCFlags + /Z7) # required by CheckCFlags - add_link_options( - /debug:full # required by CheckCFlags + add_link_options(/debug:full # required by CheckCFlags ) # Set always to static runtime @@ -120,22 +116,21 @@ if ( MSVC ) set(OPENSSL_USE_STATIC_LIBS true) set(OPENSSL_MSVC_STATIC_RT true) - if ( ZEEK_STANDALONE ) + if (ZEEK_STANDALONE) include(${CMAKE_SOURCE_DIR}/cmake/conan.cmake) conan_cmake_autodetect(settings) # Install packages from conanfile conan_cmake_install(PATH_OR_REFERENCE ${CMAKE_SOURCE_DIR}/ci/windows/conanfile_windows.txt - BUILD missing - SETTINGS ${settings}) - endif() + BUILD missing SETTINGS ${settings}) + endif () # Set LibPCAP to point to libpcap binaries. - if ( NOT PCAP_ROOT_DIR ) + if (NOT PCAP_ROOT_DIR) find_package(libpcap) set(PCAP_ROOT_DIR "${libpcap_LIB_DIRS}/../") set(PCAP_INCLUDE_DIR ${libpcap_INCLUDES}) set(PCAP_LIBRARY ${libpcap_LIBS}) - endif() + endif () set(LIBPCAP_PCAP_COMPILE_NOPCAP_HAS_ERROR_PARAMETER false) @@ -151,7 +146,8 @@ if ( MSVC ) add_definitions(-DCARES_STATICLIB) add_subdirectory(auxil/libunistd) - set(UNISTD_INCLUDES ${CMAKE_SOURCE_DIR}/auxil/libunistd/unistd ${CMAKE_SOURCE_DIR}/auxil/libunistd/regex) + set(UNISTD_INCLUDES ${CMAKE_SOURCE_DIR}/auxil/libunistd/unistd + ${CMAKE_SOURCE_DIR}/auxil/libunistd/regex) include_directories(BEFORE ${UNISTD_INCLUDES}) # Required for `check_include_files` to operate correctly list(APPEND CMAKE_REQUIRED_INCLUDES ${UNISTD_INCLUDES}) @@ -173,8 +169,8 @@ include(cmake/CommonCMakeConfig.cmake) include(cmake/FindClangTidy.cmake) include(cmake/CheckCompilerArch.cmake) -######################################################################## -## Main targets and utilities. +# ############################################################################## +# Main targets and utilities. # Variable for referring back to Zeek's top-level source dir. Used for plugins # to tell them where to find the Zeek headers. @@ -184,8 +180,8 @@ set(ZEEK_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") # zeek-plugin-create-package.sh. Needed by ZeekPluginConfig.cmake.in. set(ZEEK_PLUGIN_SCRIPTS_PATH "${PROJECT_SOURCE_DIR}/cmake") -# Our C++17 base target for propagating compiler and linker flags. -# Note: for now, we only use it for passing library dependencies around. +# Our C++17 base target for propagating compiler and linker flags. Note: for +# now, we only use it for passing library dependencies around. add_library(zeek_internal INTERFACE) add_library(Zeek::Internal ALIAS zeek_internal) set_target_properties(zeek_internal PROPERTIES EXPORT_NAME Internal) @@ -204,11 +200,11 @@ if (ZEEK_STANDALONE) set_target_properties(zeek_exe PROPERTIES RUNTIME_OUTPUT_NAME zeek) if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set_target_properties(zeek_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY src) - endif() + endif () install(TARGETS zeek_exe RUNTIME DESTINATION bin) # Export symbols from zeek executable for use by plugins set_target_properties(zeek_exe PROPERTIES ENABLE_EXPORTS ON) - if ( MSVC ) + if (MSVC) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) endif () # Tell zeek_target_link_libraries to add library dependencies as PRIVATE. @@ -219,7 +215,7 @@ if (ZEEK_STANDALONE) endif () else () add_library(zeek_lib STATIC) -endif() +endif () if (TARGET zeek_lib) target_link_libraries(zeek_lib PRIVATE $) @@ -227,15 +223,15 @@ if (TARGET zeek_lib) set_target_properties(zeek_lib PROPERTIES RUNTIME_OUTPUT_NAME libzeek) if (NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) set_target_properties(zeek_lie PROPERTIES LIBRARY_OUTPUT_DIRECTORY src) - endif() + endif () install(TARGETS zeek_lib LIBRARY DESTINATION lib) # Tell zeek_target_link_libraries to add library dependencies as PRIVATE. set(zeek_lib_access PRIVATE) -endif() +endif () # When building our fuzzers, we also need one extra top-level target that # bundles all of our object libraries and other dependencies. -if ( ZEEK_ENABLE_FUZZERS ) +if (ZEEK_ENABLE_FUZZERS) add_library(zeek_fuzzer_shared SHARED) target_link_libraries(zeek_fuzzer_shared PUBLIC $) # Tell zeek_target_link_libraries to add library dependencies as PUBLIC. @@ -243,15 +239,15 @@ if ( ZEEK_ENABLE_FUZZERS ) endif () # Convenience function for adding library dependencies to the main target(s). -function(zeek_target_link_libraries lib_target) +function (zeek_target_link_libraries lib_target) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) target_link_libraries(${name} ${${name}_access} ${lib_target}) endif () - endforeach() -endfunction() + endforeach () +endfunction () -function(zeek_include_directories) +function (zeek_include_directories) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) target_include_directories(${name} ${${name}_access} ${ARGN}) @@ -260,53 +256,40 @@ function(zeek_include_directories) endfunction () # Convenience function for adding a dependency to the main target(s). -function(zeek_add_dependencies dep) +function (zeek_add_dependencies dep) foreach (name zeek_exe zeek_lib zeek_fuzzer_shared) if (TARGET ${name}) add_dependencies(${name} ${dep}) endif () - endforeach() -endfunction() + endforeach () +endfunction () # Interface library for propagating extra flags and include paths to dynamically # loaded plugins. Also propagates include paths and C++17 mode on the install # interface. add_library(zeek_dynamic_plugin_base INTERFACE) -target_link_libraries(zeek_dynamic_plugin_base - INTERFACE - $) -target_include_directories(zeek_dynamic_plugin_base - INTERFACE - $ - $ - $) +target_link_libraries(zeek_dynamic_plugin_base INTERFACE $) +target_include_directories( + zeek_dynamic_plugin_base + INTERFACE $ $ + $) target_compile_features(zeek_dynamic_plugin_base INTERFACE ${ZEEK_CXX_STD}) add_library(Zeek::DynamicPluginBase ALIAS zeek_dynamic_plugin_base) -set_target_properties( - zeek_dynamic_plugin_base PROPERTIES - EXPORT_NAME DynamicPluginBase) +set_target_properties(zeek_dynamic_plugin_base PROPERTIES EXPORT_NAME DynamicPluginBase) install(TARGETS zeek_dynamic_plugin_base EXPORT ZeekTargets) # On macOS, we need to tell the linker that the modules are allowed to have # undefined symbols. if (CMAKE_SYSTEM_NAME MATCHES "Darwin") - target_link_options( - zeek_dynamic_plugin_base - INTERFACE - -undefined - dynamic_lookup - -Wl,-bind_at_load) + target_link_options(zeek_dynamic_plugin_base INTERFACE -undefined dynamic_lookup + -Wl,-bind_at_load) endif () -function(add_zeek_dynamic_plugin_build_interface_include_directories) - foreach ( path ${ARGV} ) - target_include_directories( - zeek_dynamic_plugin_base - INTERFACE - $ - ) +function (add_zeek_dynamic_plugin_build_interface_include_directories) + foreach (path ${ARGV}) + target_include_directories(zeek_dynamic_plugin_base INTERFACE $) endforeach () -endfunction() +endfunction () add_zeek_dynamic_plugin_build_interface_include_directories( ${PROJECT_SOURCE_DIR}/src/include @@ -317,28 +300,20 @@ add_zeek_dynamic_plugin_build_interface_include_directories( ${CMAKE_BINARY_DIR}/src ${CMAKE_BINARY_DIR}/src/include ${CMAKE_BINARY_DIR}/auxil/binpac/lib - ${CMAKE_BINARY_DIR}/auxil/broker/include -) + ${CMAKE_BINARY_DIR}/auxil/broker/include) # Convenience function for adding an OBJECT library that feeds directly into the # main target(s). # -# Usage: -# zeek_add_subdir_library( -# -# SOURCES ... -# [INCLUDE_DIRS ...] -# [DEPENDENCIES ...] -# [INTERNAL_DEPENDENCIES ...] -# [BIFS ...] -# ) -function(zeek_add_subdir_library name) +# Usage: zeek_add_subdir_library( SOURCES ... [INCLUDE_DIRS ...] +# [DEPENDENCIES ...] [INTERNAL_DEPENDENCIES ...] [BIFS ...] ) +function (zeek_add_subdir_library name) # Parse arguments. set(fn_varargs INCLUDE_DIRS DEPENDENCIES INTERNAL_DEPENDENCIES SOURCES BIFS) cmake_parse_arguments(FN_ARGS "" "" "${fn_varargs}" ${ARGN}) if (NOT FN_ARGS_SOURCES) message(FATAL_ERROR "zeek_add_subdir_library called without any SOURCES") - endif() + endif () # Create target and add the sources. set(target_name "zeek_${name}_obj") @@ -349,82 +324,68 @@ function(zeek_add_subdir_library name) # Take care of compiling BIFs. if (FN_ARGS_BIFS) - foreach ( bif ${FN_ARGS_BIFS} ) - # Generate the target and add the extra dependency. - bif_target(${bif}) + foreach (bif ${FN_ARGS_BIFS}) + # Generate the target and add the extra dependency. + bif_target(${bif}) endforeach () - endif() + endif () # Optionally add include directories and extra dependencies. - if ( FN_ARGS_INCLUDE_DIRS ) - target_include_directories( - ${target_name} - BEFORE - PRIVATE - ${FN_ARGS_INCLUDE_DIRS}) + if (FN_ARGS_INCLUDE_DIRS) + target_include_directories(${target_name} BEFORE PRIVATE ${FN_ARGS_INCLUDE_DIRS}) endif () - if ( FN_ARGS_DEPENDENCIES ) + if (FN_ARGS_DEPENDENCIES) target_link_libraries(${target_name} PRIVATE ${FN_ARGS_DEPENDENCIES}) endif () - if ( FN_ARGS_INTERNAL_DEPENDENCIES ) - add_dependencies(${target_name} ${FN_ARGS_INTERNAL_DEPENDENCIES}) + if (FN_ARGS_INTERNAL_DEPENDENCIES) + add_dependencies(${target_name} ${FN_ARGS_INTERNAL_DEPENDENCIES}) endif () # Feed into the main Zeek target(s). zeek_target_link_libraries(${target_name}) -endfunction() +endfunction () -######################################################################## -## Utility function for forcing CMake to re-run if files change on disk. +# ############################################################################## +# Utility function for forcing CMake to re-run if files change on disk. -function(zeek_watch_files) - set_property( - DIRECTORY - APPEND - PROPERTY CMAKE_CONFIGURE_DEPENDS ${ARGN} - ) -endfunction() +function (zeek_watch_files) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ARGN}) +endfunction () -######################################################################## -## Create empty __load__.zeek stubs (override pre-existing ones). +# ############################################################################## +# Create empty __load__.zeek stubs (override pre-existing ones). -function(zeek_create_load_script_stubs) +function (zeek_create_load_script_stubs) set(file_comment "# Warning, this is an autogenerated file!\n") - foreach ( fpath ${ARGN} ) + foreach (fpath ${ARGN}) file(WRITE "${CMAKE_BINARY_DIR}/${fpath}" "${file_comment}") zeek_watch_files("${CMAKE_BINARY_DIR}/${fpath}") endforeach () endfunction () # Note: these files are filled from BifCl.cmake via `file(APPEND ...)` -zeek_create_load_script_stubs( - scripts/builtin-plugins/__load__.zeek - scripts/base/bif/plugins/__load__.zeek - scripts/base/bif/__load__.zeek -) +zeek_create_load_script_stubs(scripts/builtin-plugins/__load__.zeek + scripts/base/bif/plugins/__load__.zeek scripts/base/bif/__load__.zeek) -######################################################################## -## Create empty __all__*.cc stubs (override pre-existing ones). +# ############################################################################## +# Create empty __all__*.cc stubs (override pre-existing ones). -function(zeek_create_bif_autogen_stubs) +function (zeek_create_bif_autogen_stubs) set(file_comment "// Warning, this is an autogenerated file!\n") - foreach ( fpath ${ARGN} ) + foreach (fpath ${ARGN}) file(WRITE "${CMAKE_BINARY_DIR}/${fpath}" "${file_comment}") zeek_watch_files("${CMAKE_BINARY_DIR}/${fpath}") endforeach () endfunction () # Note: these files are filled from BifCl.cmake via `file(APPEND ...)`. -zeek_create_bif_autogen_stubs( - src/__all__.bif.cc - src/__all__.bif.init.cc - src/__all__.bif.register.cc -) +zeek_create_bif_autogen_stubs(src/__all__.bif.cc src/__all__.bif.init.cc + src/__all__.bif.register.cc) -######################################################################## -## Project/Build Configuration +# ############################################################################## +# Project/Build Configuration -if ( ZEEK_ENABLE_FUZZERS ) +if (ZEEK_ENABLE_FUZZERS) # Fuzzers use shared lib to save disk space, so need -fPIC on everything set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif () @@ -436,15 +397,15 @@ else () add_definitions(-DDOCTEST_CONFIG_DISABLE) endif () -if ( ENABLE_CCACHE ) +if (ENABLE_CCACHE) find_program(CCACHE_PROGRAM ccache) - if ( NOT CCACHE_PROGRAM ) + if (NOT CCACHE_PROGRAM) message(FATAL_ERROR "ccache not found") endif () message(STATUS "Using ccache: ${CCACHE_PROGRAM}") - set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) endif () @@ -459,57 +420,59 @@ if (NOT ZEEK_MAN_INSTALL_PATH) set(ZEEK_MAN_INSTALL_PATH ${ZEEK_ROOT_DIR}/share/man) endif () -# sanitize the Zeek script install directory into an absolute path -# (CMake is confused by ~ as a representation of home directory) -get_filename_component(ZEEK_SCRIPT_INSTALL_PATH ${ZEEK_SCRIPT_INSTALL_PATH} - ABSOLUTE) +# sanitize the Zeek script install directory into an absolute path (CMake is +# confused by ~ as a representation of home directory) +get_filename_component(ZEEK_SCRIPT_INSTALL_PATH ${ZEEK_SCRIPT_INSTALL_PATH} ABSOLUTE) -# A folder for library-like Zeek-specific things: Python modules, Zeek -# plugins, etc. +# A folder for library-like Zeek-specific things: Python modules, Zeek plugins, +# etc. set(ZEEK_LIBDIR_PATH ${CMAKE_INSTALL_FULL_LIBDIR}/zeek) if (NOT ZEEK_PLUGIN_DIR) - set(ZEEK_PLUGIN_DIR ${ZEEK_LIBDIR_PATH}/plugins - CACHE STRING "Installation path for plugins" FORCE) -endif() + set(ZEEK_PLUGIN_DIR ${ZEEK_LIBDIR_PATH}/plugins CACHE STRING "Installation path for plugins" + FORCE) +endif () set(cmake_binary_dir "${CMAKE_BINARY_DIR}") set(cmake_current_binary_dir "${CMAKE_CURRENT_BINARY_DIR}") set(cmake_install_prefix "${CMAKE_INSTALL_PREFIX}") set(cmake_source_dir "${CMAKE_SOURCE_DIR}") set(zeek_script_install_path "${ZEEK_SCRIPT_INSTALL_PATH}") -if ( MSVC ) - # This has to happen before we modify the paths below so that - # the pure Windows paths are stored in the output file. +if (MSVC) + # This has to happen before we modify the paths below so that the pure Windows + # paths are stored in the output file. configure_file(zeek-path-dev.bat.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.bat) string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_binary_dir "${cmake_binary_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_current_binary_dir "${cmake_current_binary_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_install_prefix "${cmake_install_prefix}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_current_binary_dir + "${cmake_current_binary_dir}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_install_prefix + "${cmake_install_prefix}") string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_source_dir "${cmake_source_dir}") - string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" zeek_script_install_path "${zeek_script_install_path}") + string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" zeek_script_install_path + "${zeek_script_install_path}") endif () # Set the path where we install the ZeekConfig.cmake file and related files. set(ZEEK_CMAKE_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/zeek/cmake") -if ( NOT ZEEK_ETC_INSTALL_DIR ) +if (NOT ZEEK_ETC_INSTALL_DIR) set(ZEEK_ETC_INSTALL_DIR ${ZEEK_ROOT_DIR}/etc) endif () -if ( NOT ZEEK_STATE_DIR ) +if (NOT ZEEK_STATE_DIR) set(ZEEK_STATE_DIR ${ZEEK_ROOT_DIR}/var/lib) endif () -if ( NOT ZEEK_SPOOL_DIR ) +if (NOT ZEEK_SPOOL_DIR) set(ZEEK_SPOOL_DIR ${ZEEK_ROOT_DIR}/spool) endif () -if ( NOT ZEEK_LOG_DIR ) +if (NOT ZEEK_LOG_DIR) set(ZEEK_LOG_DIR ${ZEEK_ROOT_DIR}/logs) endif () -if ( NOT MSVC ) +if (NOT MSVC) set(HAVE_SUPERVISOR true) endif () @@ -520,25 +483,28 @@ install(DIRECTORY DESTINATION ${ZEEK_LOG_DIR}) configure_file(zeek-path-dev.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.sh - "export ZEEKPATH=`${cmake_binary_dir}/zeek-path-dev`\n" - "export ZEEK_PLUGIN_PATH=\"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" - "export PATH=\"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" - "export SPICY_PATH=`${cmake_binary_dir}/spicy-path`\n" - "export HILTI_CXX_INCLUDE_DIRS=`${cmake_binary_dir}/hilti-cxx-include-dirs`\n") +file( + WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.sh + "export ZEEKPATH=`${cmake_binary_dir}/zeek-path-dev`\n" + "export ZEEK_PLUGIN_PATH=\"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" + "export PATH=\"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" + "export SPICY_PATH=`${cmake_binary_dir}/spicy-path`\n" + "export HILTI_CXX_INCLUDE_DIRS=`${cmake_binary_dir}/hilti-cxx-include-dirs`\n") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.csh - "setenv ZEEKPATH `${cmake_binary_dir}/zeek-path-dev`\n" - "setenv ZEEK_PLUGIN_PATH \"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" - "setenv PATH \"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" - "setenv SPICY_PATH \"`${cmake_binary_dir}/spicy-path`\"\n" - "setenv HILTI_CXX_INCLUDE_DIRS \"`${cmake_binary_dir}/hilti-cxx-include-dirs`\"\n") +file( + WRITE ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev.csh + "setenv ZEEKPATH `${cmake_binary_dir}/zeek-path-dev`\n" + "setenv ZEEK_PLUGIN_PATH \"${cmake_binary_dir}/src\":$\{ZEEK_PLUGIN_PATH\}\n" + "setenv PATH \"${cmake_binary_dir}\":\"${cmake_binary_dir}/src\":\"${cmake_binary_dir}/auxil/spicy/spicy/bin\":\"${cmake_binary_dir}/src/builtin-plugins/spicy-plugin/bin\":$\{PATH\}\n" + "setenv SPICY_PATH \"`${cmake_binary_dir}/spicy-path`\"\n" + "setenv HILTI_CXX_INCLUDE_DIRS \"`${cmake_binary_dir}/hilti-cxx-include-dirs`\"\n") file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION LIMIT_COUNT 1) -execute_process(COMMAND grep "^constexpr int PLUGIN_API_VERSION" - INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/Plugin.h - OUTPUT_VARIABLE API_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process( + COMMAND grep "^constexpr int PLUGIN_API_VERSION" + INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/Plugin.h + OUTPUT_VARIABLE API_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "^constexpr int PLUGIN_API_VERSION = ([0-9]+);" API_VERSION "${API_VERSION}") set(API_VERSION "${CMAKE_MATCH_1}") @@ -556,15 +522,16 @@ set(VERSION_C_IDENT "${VERSION}_plugin_${API_VERSION}") string(REGEX REPLACE "-[0-9]*$" "_git" VERSION_C_IDENT "${VERSION_C_IDENT}") string(REGEX REPLACE "[^a-zA-Z0-9_\$]" "_" VERSION_C_IDENT "${VERSION_C_IDENT}") -if(ENABLE_DEBUG) +if (ENABLE_DEBUG) set(VERSION_C_IDENT "${VERSION_C_IDENT}_debug") target_compile_definitions(zeek_internal INTERFACE DEBUG) target_compile_definitions(zeek_dynamic_plugin_base INTERFACE DEBUG) -endif() +endif () -if ( NOT BINARY_PACKAGING_MODE ) - macro(_make_install_dir_symlink _target _link) - install(CODE " +if (NOT BINARY_PACKAGING_MODE) + macro (_make_install_dir_symlink _target _link) + install( + CODE " if ( \"\$ENV{DESTDIR}\" STREQUAL \"\" ) if ( EXISTS \"${_target}\" AND NOT EXISTS \"${_link}\" ) message(STATUS \"WARNING: installed ${_link} as symlink to ${_target}\") @@ -573,84 +540,91 @@ if ( NOT BINARY_PACKAGING_MODE ) endif () endif () ") - endmacro() + endmacro () - if ( "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local/zeek" ) - # If we're installing into the default prefix, check if the - # old default prefix already exists and symlink to it. - # This is done to help keep custom user configuration/installation - # if they're upgrading from a version before Zeek 3.0. + if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local/zeek") + # If we're installing into the default prefix, check if the old default + # prefix already exists and symlink to it. This is done to help keep custom + # user configuration/installation if they're upgrading from a version before + # Zeek 3.0. _make_install_dir_symlink("/usr/local/bro" "/usr/local/zeek") endif () - # Check whether we need to symlink directories used by versions - # before Zeek 3.0. - _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/include/bro" "${CMAKE_INSTALL_PREFIX}/include/zeek") - _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/share/bro" "${CMAKE_INSTALL_PREFIX}/share/zeek") + # Check whether we need to symlink directories used by versions before Zeek + # 3.0. + _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/include/bro" + "${CMAKE_INSTALL_PREFIX}/include/zeek") + _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/share/bro" + "${CMAKE_INSTALL_PREFIX}/share/zeek") _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/lib/bro" "${CMAKE_INSTALL_FULL_LIBDIR}/zeek") endif () -if ( ZEEK_SANITIZERS ) +if (ZEEK_SANITIZERS) # Check the thread library info early as setting compiler flags seems to - # interfere with the detection and cause CMAKE_THREAD_LIBS_INIT to not - # include -lpthread when it should. + # interfere with the detection and cause CMAKE_THREAD_LIBS_INIT to not include + # -lpthread when it should. find_package(Threads) string(REPLACE "," " " _sanitizer_args "${ZEEK_SANITIZERS}") separate_arguments(_sanitizer_args) set(ZEEK_SANITIZERS "") - foreach ( _sanitizer ${_sanitizer_args} ) - if ( ZEEK_SANITIZERS ) + foreach (_sanitizer ${_sanitizer_args}) + if (ZEEK_SANITIZERS) set(ZEEK_SANITIZERS "${ZEEK_SANITIZERS},") endif () - if ( _sanitizer STREQUAL "thread" ) + if (_sanitizer STREQUAL "thread") set(ZEEK_TSAN true) endif () - if ( NOT _sanitizer STREQUAL "undefined" ) + if (NOT _sanitizer STREQUAL "undefined") set(ZEEK_SANITIZERS "${ZEEK_SANITIZERS}${_sanitizer}") continue() endif () - if ( NOT DEFINED ZEEK_SANITIZER_UB_CHECKS ) - if ( DEFINED ENV{ZEEK_TAILORED_UB_CHECKS} ) + if (NOT DEFINED ZEEK_SANITIZER_UB_CHECKS) + if (DEFINED ENV{ZEEK_TAILORED_UB_CHECKS}) # list(APPEND _check_list "alignment") # TODO: fix associated errors list(APPEND _check_list "bool") # list(APPEND _check_list "builtin") # Not implemented in older GCCs - list(APPEND _check_list "bounds") # Covers both array/local bounds options below + list(APPEND _check_list "bounds") # Covers both array/local bounds + # options below # list(APPEND _check_list "array-bounds") # Not implemented by GCC - # list(APPEND _check_list "local-bounds") # Not normally part of "undefined" + # list(APPEND _check_list "local-bounds") # Not normally part of + # "undefined" list(APPEND _check_list "enum") list(APPEND _check_list "float-cast-overflow") list(APPEND _check_list "float-divide-by-zero") # list(APPEND _check_list "function") # Not implemented by GCC - # list(APPEND _check_list "implicit-unsigned-integer-truncation") # Not truly UB - # list(APPEND _check_list "implicit-signed-integer-truncation") # Not truly UB - # list(APPEND _check_list "implicit-integer-sign-change") # Not truly UB + # list(APPEND _check_list "implicit-unsigned-integer-truncation") # Not + # truly UB list(APPEND _check_list "implicit-signed-integer-truncation") + # # Not truly UB list(APPEND _check_list "implicit-integer-sign-change") + # # Not truly UB list(APPEND _check_list "integer-divide-by-zero") list(APPEND _check_list "nonnull-attribute") list(APPEND _check_list "null") - # list(APPEND _check_list "nullability-arg") # Not normally part of "undefined" - # list(APPEND _check_list "nullability-assign") # Not normally part of "undefined" - # list(APPEND _check_list "nullability-return") # Not normally part of "undefined" - # list(APPEND _check_list "objc-cast") # Not truly UB - # list(APPEND _check_list "pointer-overflow") # Not implemented in older GCCs + # list(APPEND _check_list "nullability-arg") # Not normally part of + # "undefined" list(APPEND _check_list "nullability-assign") # Not + # normally part of "undefined" list(APPEND _check_list + # "nullability-return") # Not normally part of "undefined" list(APPEND + # _check_list "objc-cast") # Not truly UB list(APPEND _check_list + # "pointer-overflow") # Not implemented in older GCCs list(APPEND _check_list "return") list(APPEND _check_list "returns-nonnull-attribute") list(APPEND _check_list "shift") - # list(APPEND _check_list "unsigned-shift-base") # Not implemented by GCC + # list(APPEND _check_list "unsigned-shift-base") # Not implemented by + # GCC list(APPEND _check_list "signed-integer-overflow") list(APPEND _check_list "unreachable") # list(APPEND _check_list "unsigned-integer-overflow") # Not truly UB list(APPEND _check_list "vla-bound") list(APPEND _check_list "vptr") - # Clang complains if this one is defined and the optimizer is set to -O0. We - # only set that optimization level if NO_OPTIMIZATIONS is passed, so disable - # the option if that's set. - if ( NOT DEFINED ENV{NO_OPTIMIZATIONS} ) + # Clang complains if this one is defined and the optimizer is set to + # -O0. We only set that optimization level if NO_OPTIMIZATIONS is + # passed, so disable the option if that's set. + if (NOT DEFINED ENV{NO_OPTIMIZATIONS}) list(APPEND _check_list "object-size") endif () @@ -666,52 +640,54 @@ if ( ZEEK_SANITIZERS ) set(_sanitizer_flags "-fsanitize=${ZEEK_SANITIZERS}") - # The linker command used by check_cxx_compiler_flag requires you to also pass the sanitizer to - # it or it fails. The best way to do this is to set CMAKE_REQUIRED_LINK_OPTIONS, but save off a - # copy of it so it can be reset back to what it was previously afterwards. + # The linker command used by check_cxx_compiler_flag requires you to also pass + # the sanitizer to it or it fails. The best way to do this is to set + # CMAKE_REQUIRED_LINK_OPTIONS, but save off a copy of it so it can be reset + # back to what it was previously afterwards. set(_temp_link_options ${CMAKE_REQUIRED_LINK_OPTIONS}) list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${_sanitizer_flags}) include(CheckCXXCompilerFlag) check_cxx_compiler_flag(${_sanitizer_flags} COMPILER_SUPPORTS_SANITIZERS) - if ( NOT COMPILER_SUPPORTS_SANITIZERS ) - message(FATAL_ERROR "Invalid sanitizer compiler flags: ${_sanitizer_flags}") - endif() + if (NOT COMPILER_SUPPORTS_SANITIZERS) + message(FATAL_ERROR "Invalid sanitizer compiler flags: ${_sanitizer_flags}") + endif () set(CMAKE_REQUIRED_LINK_OPTIONS ${_temp_link_options}) - if ( ZEEK_SANITIZER_UB_CHECKS ) - set(_sanitizer_flags "${_sanitizer_flags} -fno-sanitize-recover=${ZEEK_SANITIZER_UB_CHECKS}") + if (ZEEK_SANITIZER_UB_CHECKS) + set(_sanitizer_flags + "${_sanitizer_flags} -fno-sanitize-recover=${ZEEK_SANITIZER_UB_CHECKS}") endif () set(_sanitizer_flags "${_sanitizer_flags} -fno-omit-frame-pointer") set(_sanitizer_flags "${_sanitizer_flags} -fno-optimize-sibling-calls") - if ( NOT DEFINED ZEEK_SANITIZER_OPTIMIZATIONS ) - if ( DEFINED ENV{NO_OPTIMIZATIONS} ) + if (NOT DEFINED ZEEK_SANITIZER_OPTIMIZATIONS) + if (DEFINED ENV{NO_OPTIMIZATIONS}) # Using -O1 is generally the suggestion to get more reasonable - # performance. The one downside is it that the compiler may - # optimize out code that otherwise generates an error/leak in a -O0 - # build, but that should be rare and users mostly will not be - # running unoptimized builds in production anyway. + # performance. The one downside is it that the compiler may optimize out + # code that otherwise generates an error/leak in a -O0 build, but that + # should be rare and users mostly will not be running unoptimized builds + # in production anyway. set(ZEEK_SANITIZER_OPTIMIZATIONS false CACHE INTERNAL "" FORCE) else () set(ZEEK_SANITIZER_OPTIMIZATIONS true CACHE INTERNAL "" FORCE) endif () endif () - if ( ZEEK_SANITIZER_OPTIMIZATIONS ) + if (ZEEK_SANITIZER_OPTIMIZATIONS) set(_sanitizer_flags "${_sanitizer_flags} -O1") endif () - # Technically, the we also need to use the compiler to drive linking and - # give the sanitizer flags there, too. However, CMake, by default, uses - # the compiler for linking and so the automatically flags get used. See + # Technically, the we also need to use the compiler to drive linking and give + # the sanitizer flags there, too. However, CMake, by default, uses the + # compiler for linking and so the automatically flags get used. See # https://cmake.org/pipermail/cmake/2014-August/058268.html set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_sanitizer_flags}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_sanitizer_flags}") -endif() +endif () -######################################################################## -## Dependency Configuration +# ############################################################################## +# Dependency Configuration include(FindRequiredPackage) @@ -731,14 +707,14 @@ FindRequiredPackage(FLEX) FindRequiredPackage(BISON) FindRequiredPackage(PCAP) FindRequiredPackage(OpenSSL) -if ( NOT MSVC ) +if (NOT MSVC) FindRequiredPackage(BIND) endif () FindRequiredPackage(ZLIB) # Forward user-defined hint for OpenSSL to the plugins. Use a cache variable to -# make sure this variable survives CMake re-runs. -# Note: This variable is picked up in ZeekPluginConfig.cmake.in. +# make sure this variable survives CMake re-runs. Note: This variable is picked +# up in ZeekPluginConfig.cmake.in. if (OPENSSL_ROOT_DIR) set(ZeekOpenSSLHint "${OPENSSL_ROOT_DIR}" CACHE INTERNAL "" FORCE) elseif (DEFINED ENV{OPENSSL_ROOT_DIR}) @@ -746,18 +722,17 @@ elseif (DEFINED ENV{OPENSSL_ROOT_DIR}) endif () # Forward PKG_CONFIG_PATH to the plugins. Use a cache variable to make sure this -# variable survives CMake re-runs. -# Note: This variable is picked up in ZeekPluginConfig.cmake.in. +# variable survives CMake re-runs. Note: This variable is picked up in +# ZeekPluginConfig.cmake.in. if (DEFINED ENV{PKG_CONFIG_PATH}) set(ZeekPkgConfigPath "$ENV{PKG_CONFIG_PATH}" CACHE INTERNAL "" FORCE) endif () -# Installation directory for the distribution's Python modules. An -# override via configure's --python-dir wins, specifying a directory -# explicitly. Next is --python-prefix, which includes a versioned -# Python folder as the --prefix option in distutils does. Next -# consider a distutils --home style override via --python-home, and -# finally default to "zeek/python" in our libdir. +# Installation directory for the distribution's Python modules. An override via +# configure's --python-dir wins, specifying a directory explicitly. Next is +# --python-prefix, which includes a versioned Python folder as the --prefix +# option in distutils does. Next consider a distutils --home style override via +# --python-home, and finally default to "zeek/python" in our libdir. if (ZEEK_PYTHON_DIR) set(py_mod_install_dir ${ZEEK_PYTHON_DIR}) elseif (ZEEK_PYTHON_PREFIX) @@ -768,25 +743,25 @@ elseif (ZEEK_PYTHON_HOME) else () set(py_mod_install_dir ${ZEEK_LIBDIR_PATH}/python) endif () -set(PY_MOD_INSTALL_DIR ${py_mod_install_dir} - CACHE STRING "Installation path for Python modules" FORCE) +set(PY_MOD_INSTALL_DIR ${py_mod_install_dir} CACHE STRING "Installation path for Python modules" + FORCE) if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/auxil/binpac/CMakeLists.txt) set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) - if ( MSVC ) + if (MSVC) set(BUILD_STATIC_BINPAC true) - endif() + endif () - if ( BUILD_STATIC_BINPAC ) - set(ENABLE_STATIC_ONLY true) - endif() + if (BUILD_STATIC_BINPAC) + set(ENABLE_STATIC_ONLY true) + endif () add_subdirectory(auxil/binpac) set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) - # FIXME: avoid hard-coding a path for multi-config generator support. - # See the TODO in ZeekPluginConfig.cmake.in. + # FIXME: avoid hard-coding a path for multi-config generator support. See the + # TODO in ZeekPluginConfig.cmake.in. set(BINPAC_EXE_PATH "${CMAKE_BINARY_DIR}/auxil/binpac/src/binpac${CMAKE_EXECUTABLE_SUFFIX}") endif () FindRequiredPackage(BinPAC) @@ -794,22 +769,21 @@ FindRequiredPackage(BinPAC) # Add an alias (used by our plugin setup). add_executable(Zeek::BinPAC ALIAS binpac) -if ( NOT BIFCL_EXE_PATH ) +if (NOT BIFCL_EXE_PATH) add_subdirectory(auxil/bifcl) add_executable(Zeek::BifCl ALIAS bifcl) - # FIXME: avoid hard-coding a path for multi-config generator support. - # See the TODO in ZeekPluginConfig.cmake.in. + # FIXME: avoid hard-coding a path for multi-config generator support. See the + # TODO in ZeekPluginConfig.cmake.in. set(BIFCL_EXE_PATH "${CMAKE_BINARY_DIR}/auxil/bifcl/bifcl${CMAKE_EXECUTABLE_SUFFIX}") set(_bifcl_exe_path "included") -else ( ) +else () add_executable(Zeek::BifCl IMPORTED) - set_property(TARGET Zeek::BifCl PROPERTY - IMPORTED_LOCATION "${BIFCL_EXE_PATH}") + set_property(TARGET Zeek::BifCl PROPERTY IMPORTED_LOCATION "${BIFCL_EXE_PATH}") set(_bifcl_exe_path "BIFCL_EXE_PATH") endif () -if ( NOT GEN_ZAM_EXE_PATH ) - add_subdirectory(auxil/gen-zam) +if (NOT GEN_ZAM_EXE_PATH) + add_subdirectory(auxil/gen-zam) endif () if (ENABLE_JEMALLOC) @@ -817,20 +791,20 @@ if (ENABLE_JEMALLOC) if (DEFINED JEMALLOC_ROOT_DIR) # Look for jemalloc at a specific path find_package(JeMalloc) - else() + else () # jemalloc is in the base system set(JEMALLOC_FOUND true) - endif() - else() + endif () + else () find_package(JeMalloc) - endif() + endif () if (NOT JEMALLOC_FOUND) message(FATAL_ERROR "Could not find requested JeMalloc") - endif() + endif () endif () -if ( BISON_VERSION AND BISON_VERSION VERSION_LESS 2.5 ) +if (BISON_VERSION AND BISON_VERSION VERSION_LESS 2.5) set(MISSING_PREREQS true) list(APPEND MISSING_PREREQ_DESCS " Could not find prerequisite package Bison >= 2.5, found: ${BISON_VERSION}") @@ -845,12 +819,12 @@ endif () set(ZEEK_PYTHON_MIN 3.5.0) -if ( PYTHON_VERSION_STRING VERSION_LESS ${ZEEK_PYTHON_MIN} ) +if (PYTHON_VERSION_STRING VERSION_LESS ${ZEEK_PYTHON_MIN}) message(FATAL_ERROR "Python ${ZEEK_PYTHON_MIN} or greater is required.") endif () add_subdirectory(auxil/paraglob) -if ( MSVC ) +if (MSVC) cmake_policy(SET CMP0079 NEW) target_link_libraries(paraglob shlwapi) set(BROKER_DISABLE_TOOLS true) @@ -858,56 +832,54 @@ endif () set(zeekdeps ${zeekdeps} paraglob) # Note: Broker gets some special attention in ZeekConfig.cmake.in. -if ( Broker_ROOT ) - find_package(Broker REQUIRED CONFIG) - list(APPEND zeekdeps ${BROKER_LIBRARY}) - set(broker_includes ${BROKER_INCLUDE_DIR}) - set(ZEEK_HAS_EXTERNAL_BROKER ON) - set(ZEEK_HAS_STATIC_BROKER OFF) -else () - if ( ZEEK_SANITIZERS ) - set(BROKER_SANITIZERS ${ZEEK_SANITIZERS}) - endif () - - set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) - if ( MSVC ) - set(BUILD_STATIC_BROKER true) - endif() - - if ( BUILD_STATIC_BROKER ) - set(ENABLE_STATIC_ONLY true) - endif() - - add_subdirectory(auxil/broker) - set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) - - if ( BUILD_STATIC_BROKER ) - list(APPEND zeekdeps broker_static) - else() - list(APPEND zeekdeps broker) - endif() - - set( - broker_includes - ${CMAKE_CURRENT_SOURCE_DIR}/auxil/broker/include - ${CMAKE_CURRENT_BINARY_DIR}/auxil/broker/include) - - if (BUILD_STATIC_BROKER) - set(ZEEK_HAS_STATIC_BROKER ON) - else () +if (Broker_ROOT) + find_package(Broker REQUIRED CONFIG) + list(APPEND zeekdeps ${BROKER_LIBRARY}) + set(broker_includes ${BROKER_INCLUDE_DIR}) + set(ZEEK_HAS_EXTERNAL_BROKER ON) set(ZEEK_HAS_STATIC_BROKER OFF) - endif () - set(ZEEK_HAS_EXTERNAL_BROKER OFF) +else () + if (ZEEK_SANITIZERS) + set(BROKER_SANITIZERS ${ZEEK_SANITIZERS}) + endif () - # Tell plugins where to find the Broker CMake package in the source tree. - # This variable is picked up in ZeekPluginConfig.cmake.in. - set(ZEEK_PLUGIN_BROKER_PATH "${CMAKE_CURRENT_BINARY_DIR}/auxil/broker") + set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) + if (MSVC) + set(BUILD_STATIC_BROKER true) + endif () + + if (BUILD_STATIC_BROKER) + set(ENABLE_STATIC_ONLY true) + endif () + + add_subdirectory(auxil/broker) + set(ENABLE_STATIC_ONLY ${ENABLE_STATIC_ONLY_SAVED}) + + if (BUILD_STATIC_BROKER) + list(APPEND zeekdeps broker_static) + else () + list(APPEND zeekdeps broker) + endif () + + set(broker_includes ${CMAKE_CURRENT_SOURCE_DIR}/auxil/broker/include + ${CMAKE_CURRENT_BINARY_DIR}/auxil/broker/include) + + if (BUILD_STATIC_BROKER) + set(ZEEK_HAS_STATIC_BROKER ON) + else () + set(ZEEK_HAS_STATIC_BROKER OFF) + endif () + set(ZEEK_HAS_EXTERNAL_BROKER OFF) + + # Tell plugins where to find the Broker CMake package in the source tree. This + # variable is picked up in ZeekPluginConfig.cmake.in. + set(ZEEK_PLUGIN_BROKER_PATH "${CMAKE_CURRENT_BINARY_DIR}/auxil/broker") endif () -if ( NOT DISABLE_SPICY ) +if (NOT DISABLE_SPICY) set(USE_SPICY_ANALYZERS yes) - if ( NOT SPICY_ROOT_DIR ) + if (NOT SPICY_ROOT_DIR) set(HAVE_SPICY yes) # evaluated by Spicy plugin build add_subdirectory(auxil/spicy) @@ -931,26 +903,19 @@ if ( NOT DISABLE_SPICY ) set(SPICY_LIBRARY_RT_DEBUG spicy-rt-debug) # Needed only for logging from CMake configure phase. + get_directory_property(SPICY_VERSION DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION SPICY_VERSION) get_directory_property( - SPICY_VERSION - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION SPICY_VERSION) - get_directory_property( - SPICY_VERSION_NUMBER - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION SPICY_VERSION_NUMBER) - get_directory_property( - SPICY_PREFIX - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION CMAKE_INSTALL_PREFIX) - get_directory_property( - SPICY_BUILD_MODE - DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy - DEFINITION CMAKE_BUILD_TYPE) + SPICY_VERSION_NUMBER DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy DEFINITION + SPICY_VERSION_NUMBER) + get_directory_property(SPICY_PREFIX DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION CMAKE_INSTALL_PREFIX) + get_directory_property(SPICY_BUILD_MODE DIRECTORY ${PROJECT_SOURCE_DIR}/auxil/spicy/spicy + DEFINITION CMAKE_BUILD_TYPE) set(SPICYC "") endif () - if ( NOT SPICY_PLUGIN_PATH ) + if (NOT SPICY_PLUGIN_PATH) set(_spicy_plugin "included") set(SPICY_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/spicy-plugin) endif () @@ -965,13 +930,8 @@ endif () set(USE_SPICY_ANALYZERS "${USE_SPICY_ANALYZERS}" CACHE BOOL "Use built-in Spicy analyzers") include(BuiltInSpicyAnalyzer) -include_directories(BEFORE - ${PCAP_INCLUDE_DIR} - ${BIND_INCLUDE_DIR} - ${BinPAC_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIR} - ${JEMALLOC_INCLUDE_DIR} -) +include_directories(BEFORE ${PCAP_INCLUDE_DIR} ${BIND_INCLUDE_DIR} ${BinPAC_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIR} ${JEMALLOC_INCLUDE_DIR}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/auxil/rapidjson/include/rapidjson DESTINATION include/zeek/3rdparty/rapidjson/include) @@ -982,10 +942,12 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc # Create 3rdparty/ghc within the build directory so that the include for # "zeek/3rdparty/ghc/filesystem.hpp" works within the build tree. execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - "${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc" - "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/ghc") + "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/") +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink + "${CMAKE_CURRENT_SOURCE_DIR}/auxil/filesystem/include/ghc" + "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/ghc") # Optional Dependencies @@ -998,23 +960,23 @@ if (LIBMMDB_FOUND) endif () set(USE_KRB5 false) -if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) - find_package(LibKrb5) - if (LIBKRB5_FOUND) - set(USE_KRB5 true) - include_directories(BEFORE ${LibKrb5_INCLUDE_DIR}) - list(APPEND OPTLIBS ${LibKrb5_LIBRARY}) - endif () +if (${CMAKE_SYSTEM_NAME} MATCHES Linux) + find_package(LibKrb5) + if (LIBKRB5_FOUND) + set(USE_KRB5 true) + include_directories(BEFORE ${LibKrb5_INCLUDE_DIR}) + list(APPEND OPTLIBS ${LibKrb5_LIBRARY}) + endif () endif () set(HAVE_PERFTOOLS false) set(USE_PERFTOOLS_DEBUG false) set(USE_PERFTOOLS_TCMALLOC false) -if ( ENABLE_PERFTOOLS ) - find_package(GooglePerftools) +if (ENABLE_PERFTOOLS) + find_package(GooglePerftools) - if ( GOOGLEPERFTOOLS_FOUND OR TCMALLOC_FOUND ) + if (GOOGLEPERFTOOLS_FOUND OR TCMALLOC_FOUND) set(HAVE_PERFTOOLS true) set(USE_PERFTOOLS_TCMALLOC true) @@ -1027,44 +989,44 @@ if ( ENABLE_PERFTOOLS ) # Link in tcmalloc. list(APPEND OPTLIBS ${GooglePerftools_LIBRARIES}) endif () - else() + else () message(FATAL_ERROR "Could not find requested Google Perftools.") endif () endif () -# Making sure any non-standard OpenSSL includes get searched earlier -# than other dependencies which tend to be in standard system locations -# and thus cause the system OpenSSL headers to still be picked up even -# if one specifies --with-openssl (which may be common). +# Making sure any non-standard OpenSSL includes get searched earlier than other +# dependencies which tend to be in standard system locations and thus cause the +# system OpenSSL headers to still be picked up even if one specifies +# --with-openssl (which may be common). include_directories(BEFORE ${OPENSSL_INCLUDE_DIR}) # Determine if libfts is external to libc, i.e. musl find_package(FTS) -if ( FTS_FOUND ) +if (FTS_FOUND) list(APPEND OPTLIBS ${FTS_LIBRARY}) include_directories(BEFORE ${FTS_INCLUDE_DIR}) endif () -# Any headers that are possibly bundled in the Zeek source-tree and that are supposed -# to have priority over any preexisting/system-wide headers need to appear early in -# compiler search path. +# Any headers that are possibly bundled in the Zeek source-tree and that are +# supposed to have priority over any preexisting/system-wide headers need to +# appear early in compiler search path. include_directories(BEFORE ${broker_includes}) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/highwayhash) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/paraglob/include) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/auxil/rapidjson/include) -set(zeekdeps ${zeekdeps} +set(zeekdeps + ${zeekdeps} ${BinPAC_LIBRARY} ${PCAP_LIBRARY} ${OPENSSL_LIBRARIES} ${BIND_LIBRARY} ${ZLIB_LIBRARY} ${JEMALLOC_LIBRARIES} - ${OPTLIBS} -) + ${OPTLIBS}) -######################################################################## -## System Introspection +# ############################################################################## +# System Introspection include(TestBigEndian) test_big_endian(WORDS_BIGENDIAN) @@ -1085,19 +1047,19 @@ include(FindKqueue) include(FindCAres) include_directories(BEFORE "auxil/out_ptr/include") -if ( (OPENSSL_VERSION VERSION_EQUAL "1.1.0") OR (OPENSSL_VERSION VERSION_GREATER "1.1.0") ) - set(ZEEK_HAVE_OPENSSL_1_1 true CACHE INTERNAL "" FORCE) -endif() -if ( (OPENSSL_VERSION VERSION_EQUAL "3.0.0") OR (OPENSSL_VERSION VERSION_GREATER "3.0.0") ) - set(ZEEK_HAVE_OPENSSL_3_0 true CACHE INTERNAL "" FORCE) -endif() +if ((OPENSSL_VERSION VERSION_EQUAL "1.1.0") OR (OPENSSL_VERSION VERSION_GREATER "1.1.0")) + set(ZEEK_HAVE_OPENSSL_1_1 true CACHE INTERNAL "" FORCE) +endif () +if ((OPENSSL_VERSION VERSION_EQUAL "3.0.0") OR (OPENSSL_VERSION VERSION_GREATER "3.0.0")) + set(ZEEK_HAVE_OPENSSL_3_0 true CACHE INTERNAL "" FORCE) +endif () # Tell the plugin code that we're building as part of the main tree. set(ZEEK_PLUGIN_INTERNAL_BUILD true CACHE INTERNAL "" FORCE) -if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) - if ( NOT DISABLE_AF_PACKET ) - if ( NOT AF_PACKET_PLUGIN_PATH ) +if (${CMAKE_SYSTEM_NAME} MATCHES Linux) + if (NOT DISABLE_AF_PACKET) + if (NOT AF_PACKET_PLUGIN_PATH) set(AF_PACKET_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/zeek-af_packet-plugin) endif () @@ -1105,13 +1067,16 @@ if ( ${CMAKE_SYSTEM_NAME} MATCHES Linux ) endif () endif () -if ( NOT DISABLE_JAVASCRIPT ) +if (NOT DISABLE_JAVASCRIPT) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/auxil/zeekjs/cmake) find_package(Nodejs) - if ( NODEJS_FOUND ) - if ( ${NODEJS_VERSION} VERSION_LESS "16.13.0" ) - message(STATUS "Node.js version ${NODEJS_VERSION} is too old, need 16.13 or later. Not enabling JavaScript support.") + if (NODEJS_FOUND) + if (${NODEJS_VERSION} VERSION_LESS "16.13.0") + message( + STATUS + "Node.js version ${NODEJS_VERSION} is too old, need 16.13 or later. Not enabling JavaScript support." + ) set(ZEEK_HAVE_JAVASCRIPT no) else () set(ZEEKJS_PLUGIN_PATH ${CMAKE_SOURCE_DIR}/auxil/zeekjs) @@ -1125,14 +1090,16 @@ endif () set(ZEEK_HAVE_JAVASCRIPT ${ZEEK_HAVE_JAVASCRIPT} CACHE INTERNAL "Zeek has JavaScript support") -set(DEFAULT_ZEEKPATH_PATHS . ${ZEEK_SCRIPT_INSTALL_PATH} ${ZEEK_SCRIPT_INSTALL_PATH}/policy ${ZEEK_SCRIPT_INSTALL_PATH}/site ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins) -if ( MSVC ) +set(DEFAULT_ZEEKPATH_PATHS + . ${ZEEK_SCRIPT_INSTALL_PATH} ${ZEEK_SCRIPT_INSTALL_PATH}/policy + ${ZEEK_SCRIPT_INSTALL_PATH}/site ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins) +if (MSVC) list(JOIN DEFAULT_ZEEKPATH_PATHS ";" DEFAULT_ZEEKPATH) else () list(JOIN DEFAULT_ZEEKPATH_PATHS ":" DEFAULT_ZEEKPATH) endif () -if ( NOT BINARY_PACKAGING_MODE ) +if (NOT BINARY_PACKAGING_MODE) set(ZEEK_DIST ${PROJECT_SOURCE_DIR}) endif () @@ -1144,131 +1111,134 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-config.h) include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zeek-config.h DESTINATION include/zeek) -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - "." - "${CMAKE_CURRENT_BINARY_DIR}/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "." "${CMAKE_CURRENT_BINARY_DIR}/zeek") -if ( BinPAC_ROOT_DIR ) - set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${BinPAC_ROOT_DIR}) +if (BinPAC_ROOT_DIR) + set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${BinPAC_ROOT_DIR}) else () - set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${ZEEK_ROOT_DIR}) + set(ZEEK_CONFIG_BINPAC_ROOT_DIR ${ZEEK_ROOT_DIR}) endif () -if ( BROKER_ROOT_DIR ) - set(ZEEK_CONFIG_BROKER_ROOT_DIR ${BROKER_ROOT_DIR}) +if (BROKER_ROOT_DIR) + set(ZEEK_CONFIG_BROKER_ROOT_DIR ${BROKER_ROOT_DIR}) else () - set(ZEEK_CONFIG_BROKER_ROOT_DIR ${ZEEK_ROOT_DIR}) + set(ZEEK_CONFIG_BROKER_ROOT_DIR ${ZEEK_ROOT_DIR}) endif () -if ( PCAP_INCLUDE_DIR ) +if (PCAP_INCLUDE_DIR) set(ZEEK_CONFIG_PCAP_INCLUDE_DIR ${PCAP_INCLUDE_DIR}) endif () -if ( ZLIB_INCLUDE_DIR ) +if (ZLIB_INCLUDE_DIR) set(ZEEK_CONFIG_ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR}) endif () -if ( OPENSSL_INCLUDE_DIR ) +if (OPENSSL_INCLUDE_DIR) set(ZEEK_CONFIG_OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}) endif () -if ( LibKrb5_INCLUDE_DIR ) +if (LibKrb5_INCLUDE_DIR) set(ZEEK_CONFIG_LibKrb5_INCLUDE_DIR ${LibKrb5_INCLUDE_DIR}) endif () -if ( GooglePerftools_INCLUDE_DIR ) +if (GooglePerftools_INCLUDE_DIR) set(ZEEK_CONFIG_GooglePerftools_INCLUDE_DIR ${GooglePerftools_INCLUDE_DIR}) endif () set(ZEEK_CONFIG_BTEST_TOOLS_DIR ${ZEEK_ROOT_DIR}/share/btest) install(DIRECTORY DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.in - ${CMAKE_CURRENT_BINARY_DIR}/zeek-config @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zeek-config.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-config + @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/zeek-config DESTINATION bin) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake DESTINATION share/zeek - USE_SOURCE_PERMISSIONS - PATTERN ".git" EXCLUDE) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake + DESTINATION share/zeek + USE_SOURCE_PERMISSIONS + PATTERN ".git" EXCLUDE) -if ( NOT MSVC ) - # Install wrapper script for Bro-to-Zeek renaming. - include(InstallShellScript) - include(InstallSymlink) +if (NOT MSVC) + # Install wrapper script for Bro-to-Zeek renaming. + include(InstallShellScript) + include(InstallSymlink) endif () -######################################################################## -## zkg configuration +# ############################################################################## +# zkg configuration -if ( INSTALL_ZKG ) - # An etc/zkg directory for zkg's config file simplifies zkg's - # config file code. +if (INSTALL_ZKG) + # An etc/zkg directory for zkg's config file simplifies zkg's config file + # code. set(ZEEK_ZKG_CONFIG_DIR "${ZEEK_ETC_INSTALL_DIR}/zkg") set(ZEEK_ZKG_STATE_DIR "${ZEEK_STATE_DIR}/zkg") - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/zkg-config.in - ${CMAKE_CURRENT_BINARY_DIR}/zkg-config @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zkg-config.in ${CMAKE_CURRENT_BINARY_DIR}/zkg-config + @ONLY) install(DIRECTORY DESTINATION var/lib/zkg) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zkg-config - DESTINATION ${ZEEK_ZKG_CONFIG_DIR} RENAME config) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zkg-config DESTINATION ${ZEEK_ZKG_CONFIG_DIR} + RENAME config) endif () -######################################################################## -## Look for external plugins to build in +# ############################################################################## +# Look for external plugins to build in string(REPLACE "," " " _build_in_plugins "${ZEEK_INCLUDE_PLUGINS}") separate_arguments(_build_in_plugins) -foreach(plugin_dir ${_build_in_plugins}) - if ( NOT IS_ABSOLUTE "${plugin_dir}/CMakeLists.txt" ) - message(FATAL_ERROR "Plugins to build in need to be defined with absolute path! ${plugin_dir}") - endif() +foreach (plugin_dir ${_build_in_plugins}) + if (NOT IS_ABSOLUTE "${plugin_dir}/CMakeLists.txt") + message( + FATAL_ERROR "Plugins to build in need to be defined with absolute path! ${plugin_dir}") + endif () - if ( NOT EXISTS "${plugin_dir}/CMakeLists.txt" ) - message(FATAL_ERROR "No plugin found at ${plugin_dir}!") - endif() + if (NOT EXISTS "${plugin_dir}/CMakeLists.txt") + message(FATAL_ERROR "No plugin found at ${plugin_dir}!") + endif () get_filename_component(plugin_name ${plugin_dir} NAME) - # Create a list of plugin directories that will then be added in the src/CMakeLists.txt + # Create a list of plugin directories that will then be added in the + # src/CMakeLists.txt list(APPEND BUILTIN_PLUGIN_LIST ${plugin_dir}) message(STATUS " Building in plugin: ${plugin_name} (${plugin_dir})") - if ( "${ZEEK_BUILTIN_PLUGINS}" STREQUAL "" ) + if ("${ZEEK_BUILTIN_PLUGINS}" STREQUAL "") set(ZEEK_BUILTIN_PLUGINS ${plugin_name}) else () set(ZEEK_BUILTIN_PLUGINS "${ZEEK_BUILTIN_PLUGINS}, ${plugin_name}") endif () -endforeach() +endforeach () -######################################################################## -## Populate the ZEEK_BUILD_INFO for use in src/version.c.in +# ############################################################################## +# Populate the ZEEK_BUILD_INFO for use in src/version.c.in -if ( WIN32 ) - # Windows installs Python to C:\Python311\python, but doesn't create a version - # or symlink to python3. Call python with the script directly since the shebang - # in the script won't work here. - execute_process(COMMAND "python" "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_VARIABLE ZEEK_BUILD_INFO - RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT - OUTPUT_STRIP_TRAILING_WHITESPACE) -else() - execute_process(COMMAND "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_VARIABLE ZEEK_BUILD_INFO - RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() +if (WIN32) + # Windows installs Python to C:\Python311\python, but doesn't create a version + # or symlink to python3. Call python with the script directly since the + # shebang in the script won't work here. + execute_process( + COMMAND "python" "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE ZEEK_BUILD_INFO + RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +else () + execute_process( + COMMAND "${PROJECT_SOURCE_DIR}/ci/collect-repo-info.py" "${ZEEK_INCLUDE_PLUGINS}" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE ZEEK_BUILD_INFO + RESULT_VARIABLE ZEEK_BUILD_INFO_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif () -if ( NOT ZEEK_BUILD_INFO_RESULT EQUAL "0" ) - message(FATAL_ERROR "Could not collect repository info") +if (NOT ZEEK_BUILD_INFO_RESULT EQUAL "0") + message(FATAL_ERROR "Could not collect repository info") endif () # string(JSON ... ) requires CMake 3.19, but then we could do something like: -# string(JSON ZEEK_BUILD_INFO SET "${ZEEK_BUILD_INFO}" -# compile_options cxx_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BuildType}}") +# string(JSON ZEEK_BUILD_INFO SET "${ZEEK_BUILD_INFO}" compile_options cxx_flags +# "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BuildType}}") -######################################################################## -## Recurse on sub-directories +# ############################################################################## +# Recurse on sub-directories add_subdirectory(src) add_subdirectory(scripts) @@ -1277,30 +1247,30 @@ add_subdirectory(testing) include(CheckOptionalBuildSources) -CheckOptionalBuildSources(auxil/btest BTest INSTALL_BTEST) -CheckOptionalBuildSources(auxil/package-manager ZKG INSTALL_ZKG) -CheckOptionalBuildSources(auxil/zeekctl ZeekControl INSTALL_ZEEKCTL) -CheckOptionalBuildSources(auxil/zeek-aux Zeek-Aux INSTALL_AUX_TOOLS) -CheckOptionalBuildSources(auxil/zeek-archiver ZeekArchiver INSTALL_ZEEK_ARCHIVER) -CheckOptionalBuildSources(auxil/zeek-client ZeekClient INSTALL_ZEEK_CLIENT) +checkoptionalbuildsources(auxil/btest BTest INSTALL_BTEST) +checkoptionalbuildsources(auxil/package-manager ZKG INSTALL_ZKG) +checkoptionalbuildsources(auxil/zeekctl ZeekControl INSTALL_ZEEKCTL) +checkoptionalbuildsources(auxil/zeek-aux Zeek-Aux INSTALL_AUX_TOOLS) +checkoptionalbuildsources(auxil/zeek-archiver ZeekArchiver INSTALL_ZEEK_ARCHIVER) +checkoptionalbuildsources(auxil/zeek-client ZeekClient INSTALL_ZEEK_CLIENT) -if ( NOT DISABLE_SPICY ) - # The `zeek` binary implicitly depends on the driver object file built - # as part of `spicy`; make that dependency explicit. +if (NOT DISABLE_SPICY) + # The `zeek` binary implicitly depends on the driver object file built as part + # of `spicy`; make that dependency explicit. zeek_add_dependencies(spicyz) - if ( NOT SPICY_ROOT_DIR ) + if (NOT SPICY_ROOT_DIR) # Make sure we build targets of spicy-plugin after the `spicy` target. add_dependencies(plugin-Zeek-Spicy spicy) add_dependencies(spicyz spicy) - # Also install spicy-plugin's CMake files into Zeek's global `cmake/` folder. + # Also install spicy-plugin's CMake files into Zeek's global `cmake/` + # folder. # # NOTE: We do not install spicy-plugin's `FindZeek.cmake` since another # version of this file is already provided by Zeek. install(FILES auxil/spicy-plugin/cmake/ZeekSpicyAnalyzerSupport.cmake - auxil/spicy-plugin/cmake/FindSpicy.cmake - DESTINATION share/zeek/cmake) + auxil/spicy-plugin/cmake/FindSpicy.cmake DESTINATION share/zeek/cmake) endif () endif () @@ -1308,28 +1278,28 @@ endif () # scripts work in any build configuration. If we do not include Spicy these # files have no actual effect. # -# Spicy JIT relies on the path of the current executable to figure out -# whether it is run from a build or an install tree. This assumption -# gets broken for e.g., `spicyz` when running from the build tree -# (probably fixable), and also when JIT'ing directly from a `zeek` -# invocation (much harder to fix). Instead we generate shell -# definitions to support running and using Spicy or spicy-plugin -# functionality in the build tree, including JIT'ing directly from +# Spicy JIT relies on the path of the current executable to figure out whether +# it is run from a build or an install tree. This assumption gets broken for +# e.g., `spicyz` when running from the build tree (probably fixable), and also +# when JIT'ing directly from a `zeek` invocation (much harder to fix). Instead +# we generate shell definitions to support running and using Spicy or +# spicy-plugin functionality in the build tree, including JIT'ing directly from # Zeek. configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/spicy-path.in ${CMAKE_BINARY_DIR}/spicy-path @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/hilti-cxx-include-dirs.in ${CMAKE_BINARY_DIR}/hilti-cxx-include-dirs @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/auxil/spicy/hilti-cxx-include-dirs.in + ${CMAKE_BINARY_DIR}/hilti-cxx-include-dirs @ONLY) -######################################################################## -## Packaging Setup +# ############################################################################## +# Packaging Setup -if ( INSTALL_ZEEKCTL OR INSTALL_ZKG OR INSTALL_ZEEK_CLIENT ) +if (INSTALL_ZEEKCTL OR INSTALL_ZKG OR INSTALL_ZEEK_CLIENT) # CPack RPM Generator may not automatically detect this set(CPACK_RPM_PACKAGE_REQUIRES "python >= ${ZEEK_PYTHON_MIN}") endif () -# If this CMake project is a sub-project of another, we will not -# configure the generic packaging because CPack will fail in the case -# that the parent project has already configured packaging +# If this CMake project is a sub-project of another, we will not configure the +# generic packaging because CPack will fail in the case that the parent project +# has already configured packaging if ("${PROJECT_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") include(ConfigurePackaging) ConfigurePackaging(${VERSION}) @@ -1338,22 +1308,18 @@ endif () # Refers back to the "distribution prefix". This is the source tree when # referring to Zeek from the build directory and the "share" directory under the # install preifx otherwise. -set(ZEEK_DIST_PREFIX - $ - $) +set(ZEEK_DIST_PREFIX $ + $) # Generate extra config file for the dynamic plugins. configure_file(src/ZeekPluginConfig.cmake.in ZeekPluginConfig.cmake @ONLY) # Write the CMake package and version files. configure_package_config_file( - "${CMAKE_CURRENT_SOURCE_DIR}/src/ZeekConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" - INSTALL_DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" - VERSION ${ZEEK_VERSION_NUMBER} - COMPATIBILITY ExactVersion) + "${CMAKE_CURRENT_SOURCE_DIR}/src/ZeekConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" INSTALL_DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") +write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" + VERSION ${ZEEK_VERSION_NUMBER} COMPATIBILITY ExactVersion) # Write the CMake targets file. export(EXPORT ZeekTargets FILE ZeekTargets.cmake NAMESPACE Zeek::) @@ -1363,66 +1329,63 @@ configure_file(src/ZeekPluginBootstrap.cmake.in ZeekPluginBootstrap.cmake @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZeekPluginBootstrap.cmake" DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" - DESTINATION - "${ZEEK_CMAKE_CONFIG_DIR}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake" + DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}") -install( - EXPORT ZeekTargets - DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}" - NAMESPACE Zeek::) +install(EXPORT ZeekTargets DESTINATION "${ZEEK_CMAKE_CONFIG_DIR}" NAMESPACE Zeek::) -######################################################################## -## Build Summary +# ############################################################################## +# Build Summary if (CMAKE_BUILD_TYPE) string(TOUPPER ${CMAKE_BUILD_TYPE} BuildType) endif () -if ( INSTALL_BTEST_PCAPS ) +if (INSTALL_BTEST_PCAPS) set(_install_btest_tools_msg "all") else () set(_install_btest_tools_msg "no pcaps") endif () set(_binpac_exe_path "included") -if ( BINPAC_EXE_PATH ) +if (BINPAC_EXE_PATH) set(_binpac_exe_path ${BINPAC_EXE_PATH}) endif () set(_gen_zam_exe_path "included") -if ( GEN_ZAM_EXE_PATH ) +if (GEN_ZAM_EXE_PATH) set(_gen_zam_exe_path ${GEN_ZAM_EXE_PATH}) endif () set(_spicy "included") -if ( DISABLE_SPICY ) +if (DISABLE_SPICY) set(_spicy "disabled") -elseif ( SPICY_ROOT_DIR ) +elseif (SPICY_ROOT_DIR) set(_spicy "external (${SPICY_ROOT_DIR})") endif () -if ( DISABLE_SPICY ) +if (DISABLE_SPICY) set(_spicy_plugin "disabled") -elseif ( "${_spicy_plugin}" STREQUAL "" ) +elseif ("${_spicy_plugin}" STREQUAL "") set(_spicy_plugin "external (${SPICY_PLUGIN_PATH})") endif () -if ( ZEEK_LEGACY_ANALYZERS ) +if (ZEEK_LEGACY_ANALYZERS) list(JOIN ZEEK_LEGACY_ANALYZERS ", " _legacy_analyzers) - set(_legacy_analyzers "\n - Using unmaintained legacy analyzers for: ${_legacy_analyzers}") + set(_legacy_analyzers + "\n - Using unmaintained legacy analyzers for: ${_legacy_analyzers}") endif () -if ( ZEEK_SKIPPED_ANALYZERS ) +if (ZEEK_SKIPPED_ANALYZERS) list(JOIN ZEEK_SKIPPED_ANALYZERS ", " _skipped_analyzers) set(_skipped_analyzers "\n - Skipping analyzers: ${_skipped_analyzers}") endif () -if ( ZEEK_LEGACY_ANALYZERS OR ZEEK_SKIPPED_ANALYZERS ) - set(_analyzer_warning "\n\n[Warning] Some analyzers are not available due to lack of built-in Spicy support:${_legacy_analyzers}${_skipped_analyzers}") +if (ZEEK_LEGACY_ANALYZERS OR ZEEK_SKIPPED_ANALYZERS) + set(_analyzer_warning + "\n\n[Warning] Some analyzers are not available due to lack of built-in Spicy support:${_legacy_analyzers}${_skipped_analyzers}" + ) endif () message( @@ -1475,7 +1438,6 @@ message( "\nFuzz Engine: ${ZEEK_FUZZING_ENGINE}" "${_analyzer_warning}" "\n" - "\n================================================================\n" -) + "\n================================================================\n") include(UserChangedWarning) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 6a8a3d1bd9..48caa17846 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,5 +1,5 @@ - -install(DIRECTORY . DESTINATION ${ZEEK_MAN_INSTALL_PATH}/man8 FILES_MATCHING - PATTERN "*.8" -) - +install( + DIRECTORY . + DESTINATION ${ZEEK_MAN_INSTALL_PATH}/man8 + FILES_MATCHING + PATTERN "*.8") diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 168eba704b..313877f6e1 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,22 +1,22 @@ include(InstallPackageConfigFile) -install(DIRECTORY ./ DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH} FILES_MATCHING - PATTERN "site/local*" EXCLUDE - PATTERN "*.zeek" - PATTERN "*.sig" - PATTERN "*.fp" -) +install( + DIRECTORY ./ + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH} + FILES_MATCHING + PATTERN "site/local*" EXCLUDE + PATTERN "*.zeek" + PATTERN "*.sig" + PATTERN "*.fp") -# Install local script as a config file since it's meant to be modified directly. -InstallPackageConfigFile( - ${CMAKE_CURRENT_SOURCE_DIR}/site/local.zeek - ${ZEEK_SCRIPT_INSTALL_PATH}/site - local.zeek) +# Install local script as a config file since it's meant to be modified +# directly. +InstallPackageConfigFile(${CMAKE_CURRENT_SOURCE_DIR}/site/local.zeek + ${ZEEK_SCRIPT_INSTALL_PATH}/site local.zeek) # Substitute values in templated script files, and install them. -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/base/misc/installation.zeek.in - ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/base/misc/installation.zeek.in + ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/base/misc/installation.zeek - DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base/misc) + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base/misc) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3a9621cc18..e76d0f6703 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,24 +1,16 @@ -include_directories(BEFORE - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/include -) +include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include) # Force creation of includes symlink. This can't just be in the src directory # because MSVC will end up with an include loop. -execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_SOURCE_DIR}/include") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - ".." - "${CMAKE_CURRENT_SOURCE_DIR}/include/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/include") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink ".." + "${CMAKE_CURRENT_SOURCE_DIR}/include/zeek") # Allows header file inclusion via zeek/ within the build tree -execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory - "${CMAKE_CURRENT_BINARY_DIR}/include") -execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink - ".." - "${CMAKE_CURRENT_BINARY_DIR}/include/zeek") +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/include") +execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink ".." + "${CMAKE_CURRENT_BINARY_DIR}/include/zeek") # Poor man's JSON escaping as this is rendered into a C string. string(REPLACE "\"" "\\\"" ZEEK_BUILD_INFO_ESCAPED "${ZEEK_BUILD_INFO}") @@ -26,96 +18,85 @@ string(REPLACE "\n" "\\n" ZEEK_BUILD_INFO_ESCAPED "${ZEEK_BUILD_INFO_ESCAPED}") configure_file(version.c.in ${CMAKE_CURRENT_BINARY_DIR}/version.c) configure_file(util-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/util-config.h) -# This creates a custom command to transform a bison output file (inFile) -# into outFile in order to avoid symbol conflicts: -# - replaces instances of 'yylex' in inFile with yylexPrefix -# - replaces instances of 'yy' in inFile with yyPrefix -# - deletes instances of 'extern char.*getenv' in inFile -# - writes results to outFile and adds it to list TRANSFORMED_BISON_OUTPUTS -macro(REPLACE_YY_PREFIX_TARGET inFile outFile yylexPrefix yyPrefix) +# This creates a custom command to transform a bison output file (inFile) into +# outFile in order to avoid symbol conflicts: - replaces instances of 'yylex' in +# inFile with yylexPrefix - replaces instances of 'yy' in inFile with yyPrefix - +# deletes instances of 'extern char.*getenv' in inFile - writes results to +# outFile and adds it to list TRANSFORMED_BISON_OUTPUTS +macro (REPLACE_YY_PREFIX_TARGET inFile outFile yylexPrefix yyPrefix) set(args "\"/extern char.*getenv/d") set(args "${args}\;s/yylex/${yylexPrefix}lex/") set(args "${args}\;s/yy/${yyPrefix}/g\"" < ${inFile} > ${outFile}) - add_custom_command(OUTPUT ${outFile} - COMMAND ${SED_EXE} - ARGS ${args} - DEPENDS ${inFile} - COMMENT "[sed] replacing stuff in ${inFile}" - ) + add_custom_command( + OUTPUT ${outFile} + COMMAND ${SED_EXE} ARGS ${args} + DEPENDS ${inFile} + COMMENT "[sed] replacing stuff in ${inFile}") list(APPEND TRANSFORMED_BISON_OUTPUTS ${outFile}) -endmacro(REPLACE_YY_PREFIX_TARGET) +endmacro (REPLACE_YY_PREFIX_TARGET) -######################################################################## -## Create targets to generate parser and scanner code +# ############################################################################## +# Create targets to generate parser and scanner code set(BISON_FLAGS "--debug") -if ( MSVC ) +if (MSVC) set(SIGN_COMPARE_FLAG "/wd4018") -else() +else () set(SIGN_COMPARE_FLAG "-Wno-sign-compare") -endif() +endif () # Rule parser/scanner -bison_target(RuleParser rule-parse.y - ${CMAKE_CURRENT_BINARY_DIR}/rup.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/rup.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/rule_parse.output - COMPILE_FLAGS "${BISON_FLAGS}") +bison_target( + RuleParser rule-parse.y ${CMAKE_CURRENT_BINARY_DIR}/rup.cc HEADER + ${CMAKE_CURRENT_BINARY_DIR}/rup.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/rule_parse.output + COMPILE_FLAGS "${BISON_FLAGS}") replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc - rules_ rules_) -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.h - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc rules_ rules_) +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rup.h ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h rules_ rules_) flex_target(RuleScanner rule-scan.l ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc COMPILE_FLAGS "-Prules_") set_property(SOURCE rule-scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # RE parser/scanner -bison_target(REParser re-parse.y - ${CMAKE_CURRENT_BINARY_DIR}/rep.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/re_parse.output - COMPILE_FLAGS "${BISON_FLAGS}") -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rep.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc +bison_target( + REParser re-parse.y ${CMAKE_CURRENT_BINARY_DIR}/rep.cc HEADER + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/re_parse.output + COMPILE_FLAGS "${BISON_FLAGS}") +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/rep.cc ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc re_ RE_) -flex_target(REScanner re-scan.l ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc - COMPILE_FLAGS "-Pre_") +flex_target(REScanner re-scan.l ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc COMPILE_FLAGS "-Pre_") add_flex_bison_dependency(REScanner REParser) set_property(SOURCE re-scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # Parser/Scanner -bison_target(Parser parse.y - ${CMAKE_CURRENT_BINARY_DIR}/p.cc - HEADER ${CMAKE_CURRENT_BINARY_DIR}/zeekparse.h - #VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/parse.output - COMPILE_FLAGS "${BISON_FLAGS}") -replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/p.cc - ${CMAKE_CURRENT_BINARY_DIR}/parse.cc - zeek yy) -flex_target(Scanner scan.l ${CMAKE_CURRENT_BINARY_DIR}/scan.cc - COMPILE_FLAGS "-Pzeek") +bison_target( + Parser parse.y ${CMAKE_CURRENT_BINARY_DIR}/p.cc HEADER ${CMAKE_CURRENT_BINARY_DIR}/zeekparse.h + # VERBOSE ${CMAKE_CURRENT_BINARY_DIR}/parse.output + COMPILE_FLAGS "${BISON_FLAGS}") +replace_yy_prefix_target(${CMAKE_CURRENT_BINARY_DIR}/p.cc ${CMAKE_CURRENT_BINARY_DIR}/parse.cc zeek + yy) +flex_target(Scanner scan.l ${CMAKE_CURRENT_BINARY_DIR}/scan.cc COMPILE_FLAGS "-Pzeek") set_property(SOURCE scan.cc APPEND_STRING PROPERTY COMPILE_FLAGS "${SIGN_COMPARE_FLAG}") # Add a dependency for the generated files to zeek_autogen_files. add_custom_target( zeek_bison_outputs - DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h - ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc - ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h - ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc - ${CMAKE_CURRENT_BINARY_DIR}/scan.cc -) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/re-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/re-scan.cc + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.cc + ${CMAKE_CURRENT_BINARY_DIR}/rule-parse.h + ${CMAKE_CURRENT_BINARY_DIR}/rule-scan.cc + ${CMAKE_CURRENT_BINARY_DIR}/scan.cc) add_dependencies(zeek_autogen_files zeek_bison_outputs) -######################################################################## -## bifcl-dependent targets +# ############################################################################## +# bifcl-dependent targets include(BifCl) @@ -131,34 +112,30 @@ set(BIF_SRCS strings.bif reporter.bif option.bif - # Note: the supervisor BIF file is treated like other top-level BIFs - # instead of contained in its own subdirectory CMake logic because - # subdirectory BIFs are treated differently and don't support being called - # *during* parsing (e.g. within an @if directive). + # Note: the supervisor BIF file is treated like other top-level BIFs instead + # of contained in its own subdirectory CMake logic because subdirectory BIFs + # are treated differently and don't support being called *during* parsing + # (e.g. within an @if directive). supervisor/supervisor.bif - # The packet analysis BIF is treated like other top-level BIFs because - # it's needed before parsing the packet protocol scripts, which happen - # very near to the start of parsing. + # The packet analysis BIF is treated like other top-level BIFs because it's + # needed before parsing the packet protocol scripts, which happen very near + # to the start of parsing. packet_analysis/packet_analysis.bif - # The C++ loading BIF is treated like other top-level BIFs to give - # us flexibility regarding when it's called. - script_opt/CPP/CPP-load.bif -) + # The C++ loading BIF is treated like other top-level BIFs to give us + # flexibility regarding when it's called. + script_opt/CPP/CPP-load.bif) foreach (bift ${BIF_SRCS}) bif_target(${bift} "standard") endforeach () -######################################################################## -## BinPAC-dependent targets +# ############################################################################## +# BinPAC-dependent targets include(BinPAC) -set(BINPAC_AUXSRC - ${CMAKE_CURRENT_SOURCE_DIR}/binpac.pac - ${CMAKE_CURRENT_SOURCE_DIR}/zeek.pac - ${CMAKE_CURRENT_SOURCE_DIR}/binpac_zeek.h -) +set(BINPAC_AUXSRC ${CMAKE_CURRENT_SOURCE_DIR}/binpac.pac ${CMAKE_CURRENT_SOURCE_DIR}/zeek.pac + ${CMAKE_CURRENT_SOURCE_DIR}/binpac_zeek.h) set(BINPAC_OUTPUTS "") @@ -168,8 +145,8 @@ list(APPEND BINPAC_OUTPUTS "${BINPAC_OUTPUT_CC}") binpac_target(binpac_zeek-lib.pac) list(APPEND BINPAC_OUTPUTS "${BINPAC_OUTPUT_CC}") -######################################################################## -## Gen-ZAM setup +# ############################################################################## +# Gen-ZAM setup include(Gen-ZAM) @@ -177,9 +154,9 @@ set(GEN_ZAM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/script_opt/ZAM/Ops.in) gen_zam_target(${GEN_ZAM_SRC}) -######################################################################## -## Including subdirectories. -######################################################################## +# ############################################################################## +# Including subdirectories. +# ############################################################################## option(USE_SQLITE "Should Zeek use SQLite?" ON) @@ -195,8 +172,8 @@ add_subdirectory(logging) add_subdirectory(probabilistic) add_subdirectory(session) -######################################################################## -## Build in the discovered external plugins and create the autogenerated scripts. +# ############################################################################## +# Build in the discovered external plugins and create the autogenerated scripts. set(PRELOAD_SCRIPT ${PROJECT_BINARY_DIR}/scripts/builtin-plugins/__preload__.zeek) file(WRITE ${PRELOAD_SCRIPT} "# Warning, this is an autogenerated file!\n") @@ -204,14 +181,14 @@ set(LOAD_SCRIPT ${PROJECT_BINARY_DIR}/scripts/builtin-plugins/__load__.zeek) file(WRITE ${LOAD_SCRIPT} "# Warning, this is an autogenerated file!\n") # TODO: this really should be a function to make sure we have an isolated scope. -# However, for historic reasons, we're not doing that yet. Some plugin -# modify global state such as `zeekdeps`. -macro(add_extra_builtin_plugin plugin_dir) +# However, for historic reasons, we're not doing that yet. Some plugin modify +# global state such as `zeekdeps`. +macro (add_extra_builtin_plugin plugin_dir) get_filename_component(plugin_name "${plugin_dir}" NAME) - if(IS_DIRECTORY "${plugin_dir}/cmake") + if (IS_DIRECTORY "${plugin_dir}/cmake") list(APPEND CMAKE_MODULE_PATH "${plugin_dir}/cmake") - endif() + endif () # Set this flag so that ZeekPluginStatic.cmake knows that this plugin is not # from our source tree but from an external source (or git submodule). This @@ -222,36 +199,36 @@ macro(add_extra_builtin_plugin plugin_dir) # TODO: drop once we turn this into a function. set(ZEEK_BUILDING_EXTRA_PLUGINS OFF) -endmacro() +endmacro () foreach (plugin_dir ${BUILTIN_PLUGIN_LIST}) add_extra_builtin_plugin("${plugin_dir}") -endforeach() +endforeach () install(FILES ${PRELOAD_SCRIPT} DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins/) install(FILES ${LOAD_SCRIPT} DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/builtin-plugins/) -######################################################################## -## This has to happen after the parts for builtin plugins, or else -## symbols are missing when it goes to link the fuzzer binaries. +# ############################################################################## +# This has to happen after the parts for builtin plugins, or else symbols are +# missing when it goes to link the fuzzer binaries. add_subdirectory(fuzzers) -######################################################################## -## zeek target +# ############################################################################## +# zeek target -find_package (Threads) +find_package(Threads) # Avoid CMake warning about "3rdparty" looking like a number. cmake_policy(PUSH) if (POLICY CMP0012) -cmake_policy(SET CMP0012 NEW) + cmake_policy(SET CMP0012 NEW) endif () -# This macro stores associated headers for any C/C++ source files given -# as arguments (past _var) as a list in the CMake variable named "_var". -macro(COLLECT_HEADERS _var) +# This macro stores associated headers for any C/C++ source files given as +# arguments (past _var) as a list in the CMake variable named "_var". +macro (COLLECT_HEADERS _var) foreach (src ${ARGN}) get_filename_component(ext ${src} EXT) if ("${ext}" STREQUAL ".cc" OR "${ext}" STREQUAL ".c") @@ -266,39 +243,34 @@ macro(COLLECT_HEADERS _var) endif () endif () endforeach () -endmacro(COLLECT_HEADERS _var) +endmacro (COLLECT_HEADERS _var) cmake_policy(POP) -# define a command that's used to run the make_dbg_constants.py script -# building the zeek binary depends on the outputs of this script -add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc - COMMAND ${PYTHON_EXECUTABLE} - ARGS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py - ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py - ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in - COMMENT "[Python] Processing debug commands" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -) +# define a command that's used to run the make_dbg_constants.py script building +# the zeek binary depends on the outputs of this script +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h + ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc + COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py + ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_dbg_constants.py + ${CMAKE_CURRENT_SOURCE_DIR}/DebugCmdInfoConstants.in + COMMENT "[Python] Processing debug commands" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -add_custom_target( - zeek_debugcmd_gen - DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h - ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc -) +add_custom_target(zeek_debugcmd_gen DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdConstants.h + ${CMAKE_CURRENT_BINARY_DIR}/DebugCmdInfoConstants.cc) add_dependencies(zeek_autogen_files zeek_debugcmd_gen) set(_gen_zeek_script_cpp ${CMAKE_CURRENT_BINARY_DIR}/../CPP-gen.cc) -add_custom_command(OUTPUT ${_gen_zeek_script_cpp} - COMMAND ${CMAKE_COMMAND} -E touch ${_gen_zeek_script_cpp}) +add_custom_command(OUTPUT ${_gen_zeek_script_cpp} COMMAND ${CMAKE_COMMAND} -E touch + ${_gen_zeek_script_cpp}) if (!MSVC) set_source_files_properties(legacy-netvar-init.cc PROPERTIES COMPILE_FLAGS - -Wno-deprecated-declarations) -endif() + -Wno-deprecated-declarations) +endif () set(MAIN_SRCS digest.cc @@ -386,9 +358,7 @@ set(MAIN_SRCS ZeekArgs.cc ZeekString.cc ZVal.cc - ${SUPERVISOR_SRCS} - threading/BasicThread.cc threading/Formatter.cc threading/Manager.cc @@ -396,12 +366,10 @@ set(MAIN_SRCS threading/SerialTypes.cc threading/formatters/Ascii.cc threading/formatters/JSON.cc - plugin/Component.cc plugin/ComponentManager.h plugin/Manager.cc plugin/Plugin.cc - script_opt/CPP/Attrs.cc script_opt/CPP/Consts.cc script_opt/CPP/DeclFunc.cc @@ -421,9 +389,7 @@ set(MAIN_SRCS script_opt/CPP/Types.cc script_opt/CPP/Util.cc script_opt/CPP/Vars.cc - ${_gen_zeek_script_cpp} - script_opt/Expr.cc script_opt/GenIDDefs.cc script_opt/IDOptInfo.cc @@ -435,7 +401,6 @@ set(MAIN_SRCS script_opt/TempVar.cc script_opt/UsageAnalyzer.cc script_opt/UseDefs.cc - script_opt/ZAM/AM-Opt.cc script_opt/ZAM/Branches.cc script_opt/ZAM/BuiltIn.cc @@ -450,9 +415,7 @@ set(MAIN_SRCS script_opt/ZAM/ZBody.cc script_opt/ZAM/ZInst.cc script_opt/ZAM/ZOp.cc - - digest.h -) + digest.h) set(THIRD_PARTY_SRCS 3rdparty/bro_inet_ntop.c # Remove in v6.1. @@ -464,69 +427,58 @@ set(THIRD_PARTY_SRCS 3rdparty/patricia.c 3rdparty/setsignal.c $<$:3rdparty/sqlite3.c> - 3rdparty/strsep.c -) + 3rdparty/strsep.c) -# Highwayhash. Highwayhash is a bit special since it has architecture dependent code... +# Highwayhash. Highwayhash is a bit special since it has architecture dependent +# code... set(hhash_dir ${PROJECT_SOURCE_DIR}/auxil/highwayhash/highwayhash) zeek_add_subdir_library( hhash SOURCES - ${hhash_dir}/sip_hash.cc - ${hhash_dir}/sip_tree_hash.cc - ${hhash_dir}/scalar_sip_tree_hash.cc - ${hhash_dir}/arch_specific.cc - ${hhash_dir}/instruction_sets.cc - ${hhash_dir}/nanobenchmark.cc - ${hhash_dir}/os_specific.cc - ${hhash_dir}/hh_portable.cc -) + ${hhash_dir}/sip_hash.cc + ${hhash_dir}/sip_tree_hash.cc + ${hhash_dir}/scalar_sip_tree_hash.cc + ${hhash_dir}/arch_specific.cc + ${hhash_dir}/instruction_sets.cc + ${hhash_dir}/nanobenchmark.cc + ${hhash_dir}/os_specific.cc + ${hhash_dir}/hh_portable.cc) if (${COMPILER_ARCHITECTURE} STREQUAL "arm") - check_c_source_compiles(" + check_c_source_compiles( + " #if defined(__ARM_NEON__) || defined(__ARM_NEON) int main() { return 0; } #else #error #endif - " test_arm_neon) + " + test_arm_neon) - if (test_arm_neon) - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) - endif () + if (test_arm_neon) + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) + endif () - target_compile_options( - zeek_hhash_obj - PRIVATE - -mfloat-abi=hard - -march=armv7-a - -mfpu=neon - ) + target_compile_options(zeek_hhash_obj PRIVATE -mfloat-abi=hard -march=armv7-a -mfpu=neon) elseif (${COMPILER_ARCHITECTURE} STREQUAL "aarch64") - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_neon.cc) elseif (${COMPILER_ARCHITECTURE} STREQUAL "power") - target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_vsx.cc) - set_source_files_properties(${hhash_dir}/hh_vsx.cc PROPERTIES COMPILE_FLAGS - -mvsx) -elseif(${COMPILER_ARCHITECTURE} STREQUAL "x86_64") - target_sources( - zeek_hhash_obj - PRIVATE - ${hhash_dir}/hh_avx2.cc - ${hhash_dir}/hh_sse41.cc) - if (MSVC) - set(_avx_flag /arch:AVX2) - # Using an undocumentd compiler flag: https://stackoverflow.com/questions/64053597/how-do-i-enable-sse4-1-and-sse3-but-not-avx-in-msvc/69328426#69328426 - set(_sse_flag /d2archSSE42) - else() - set(_avx_flag -mavx2) - set(_sse_flag -msse4.1) - endif() + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_vsx.cc) + set_source_files_properties(${hhash_dir}/hh_vsx.cc PROPERTIES COMPILE_FLAGS -mvsx) +elseif (${COMPILER_ARCHITECTURE} STREQUAL "x86_64") + target_sources(zeek_hhash_obj PRIVATE ${hhash_dir}/hh_avx2.cc ${hhash_dir}/hh_sse41.cc) + if (MSVC) + set(_avx_flag /arch:AVX2) + # Using an undocumentd compiler flag: + # https://stackoverflow.com/questions/64053597/how-do-i-enable-sse4-1-and-sse3-but-not-avx-in-msvc/69328426#69328426 + set(_sse_flag /d2archSSE42) + else () + set(_avx_flag -mavx2) + set(_sse_flag -msse4.1) + endif () - set_source_files_properties(${hhash_dir}/hh_avx2.cc PROPERTIES COMPILE_FLAGS - ${_avx_flag}) - set_source_files_properties(${hhash_dir}/hh_sse41.cc PROPERTIES COMPILE_FLAGS - ${_sse_flag}) + set_source_files_properties(${hhash_dir}/hh_avx2.cc PROPERTIES COMPILE_FLAGS ${_avx_flag}) + set_source_files_properties(${hhash_dir}/hh_sse41.cc PROPERTIES COMPILE_FLAGS ${_sse_flag}) endif () set(zeek_SRCS @@ -550,8 +502,7 @@ set(zeek_SRCS ${CMAKE_CURRENT_BINARY_DIR}/ZAM-MethodDecls.h ${THIRD_PARTY_SRCS} ${HH_SRCS} - ${MAIN_SRCS} -) + ${MAIN_SRCS}) collect_headers(zeek_HEADERS ${zeek_SRCS}) @@ -564,35 +515,31 @@ zeek_target_link_libraries(zeek_objs) if (TARGET zeek_exe) target_sources(zeek_exe PRIVATE main.cc ${zeek_HEADERS}) - # npcap/winpcap need to be loaded in delayed mode so that we can set the load path - # correctly at runtime. See https://npcap.com/guide/npcap-devguide.html#npcap-feature-native - # for why this is necessary. - if ( MSVC AND HAVE_WPCAP ) + # npcap/winpcap need to be loaded in delayed mode so that we can set the load + # path correctly at runtime. See + # https://npcap.com/guide/npcap-devguide.html#npcap-feature-native for why + # this is necessary. + if (MSVC AND HAVE_WPCAP) set(zeekdeps ${zeekdeps} delayimp.lib) set_target_properties(zeek_exe PROPERTIES LINK_FLAGS "/DELAYLOAD:wpcap.dll") - endif() + endif () target_link_libraries(zeek_exe PRIVATE ${zeekdeps} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) # Export symbols from zeek executable for use by plugins set_target_properties(zeek_exe PROPERTIES ENABLE_EXPORTS TRUE) - if ( MSVC ) + if (MSVC) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) endif () -endif() +endif () if (TARGET zeek_lib) target_sources(zeek_lib PRIVATE ${zeek_HEADERS}) - target_link_libraries( - zeek_lib - PUBLIC - ${zeekdeps} - ${CMAKE_THREAD_LIBS_INIT} - ${CMAKE_DL_LIBS}) -endif() + target_link_libraries(zeek_lib PUBLIC ${zeekdeps} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +endif () zeek_include_directories( ${CMAKE_BINARY_DIR} @@ -601,21 +548,23 @@ zeek_include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zeek/src - ${CMAKE_SOURCE_DIR}/zeek/src/include -) + ${CMAKE_SOURCE_DIR}/zeek/src/include) # Install *.bif.zeek. -install(DIRECTORY ${PROJECT_BINARY_DIR}/scripts/base/bif DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base) +install(DIRECTORY ${PROJECT_BINARY_DIR}/scripts/base/bif + DESTINATION ${ZEEK_SCRIPT_INSTALL_PATH}/base) # Create plugin directory at install time. install(DIRECTORY DESTINATION ${ZEEK_PLUGIN_DIR}) # Make clean removes the bif directory. -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PROJECT_BINARY_DIR}/scripts/base/bif) +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES + ${PROJECT_BINARY_DIR}/scripts/base/bif) -# Remove some stale files and scripts that previous Zeek versions put in -# place, yet make confuse us now. This makes upgrading easier. -install(CODE " +# Remove some stale files and scripts that previous Zeek versions put in place, +# yet make confuse us now. This makes upgrading easier. +install( + CODE " file(REMOVE_RECURSE ${ZEEK_SCRIPT_INSTALL_PATH}/base/frameworks/logging/writers/dataseries.bro ${ZEEK_SCRIPT_INSTALL_PATH}/base/frameworks/logging/writers/elasticsearch.bro @@ -623,60 +572,59 @@ install(CODE " ) ") -# Make sure to escape a bunch of special characters in the path before trying to use it as a -# regular expression below. -string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" escaped_include_path "${CMAKE_CURRENT_SOURCE_DIR}/include/*") +# Make sure to escape a bunch of special characters in the path before trying to +# use it as a regular expression below. +string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" escaped_include_path + "${CMAKE_CURRENT_SOURCE_DIR}/include/*") if (WIN32) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/windows/usr.include/ - DESTINATION include/ - FILES_MATCHING - PATTERN "*.h" - ) -endif() - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ - DESTINATION include/zeek + install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/windows/usr.include/ + DESTINATION include/ FILES_MATCHING - PATTERN "*.h" - PATTERN "*.pac" - PATTERN "3rdparty/*" EXCLUDE - # The "zeek -> ." symlink isn't needed in the install-tree - REGEX "${escaped_include_path}$" EXCLUDE + PATTERN "*.h") +endif () - # FILES_MATCHING creates empty directories: - # https://gitlab.kitware.com/cmake/cmake/-/issues/17122 - # Exclude the ones that this affects explicitly. - PATTERN "script_opt/CPP/maint" EXCLUDE - PATTERN "fuzzers/corpora" EXCLUDE -) +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ + DESTINATION include/zeek + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.pac" + PATTERN "3rdparty/*" EXCLUDE + # The "zeek -> ." symlink isn't needed in the install-tree + REGEX "${escaped_include_path}$" EXCLUDE + # FILES_MATCHING creates empty directories: + # https://gitlab.kitware.com/cmake/cmake/-/issues/17122 Exclude the ones that + # this affects explicitly. + PATTERN "script_opt/CPP/maint" EXCLUDE + PATTERN "fuzzers/corpora" EXCLUDE) -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ - DESTINATION include/zeek - FILES_MATCHING - PATTERN "*.bif.func_h" - PATTERN "*.bif.netvar_h" - PATTERN "*.bif.h" - PATTERN "CMakeFiles" EXCLUDE - # The "include/zeek -> .." symlink isn't needed in the install-tree - REGEX "${escaped_include_path}$" EXCLUDE -) +install( + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ + DESTINATION include/zeek + FILES_MATCHING + PATTERN "*.bif.func_h" + PATTERN "*.bif.netvar_h" + PATTERN "*.bif.h" + PATTERN "CMakeFiles" EXCLUDE + # The "include/zeek -> .." symlink isn't needed in the install-tree + REGEX "${escaped_include_path}$" EXCLUDE) -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ConvertUTF.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bro_inet_ntop.h # Remove in v6.1 - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zeek_inet_ntop.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bsd-getopt-long.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/modp_numtoa.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/patricia.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/setsignal.h - $<$:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/sqlite3.h> - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/doctest.h - DESTINATION include/zeek/3rdparty -) +install( + FILES ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ConvertUTF.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bro_inet_ntop.h # Remove in v6.1 + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zeek_inet_ntop.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bsd-getopt-long.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/modp_numtoa.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/patricia.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/setsignal.h + $<$:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/sqlite3.h> + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/doctest.h + DESTINATION include/zeek/3rdparty) -######################################################################## -## Clang-tidy target now that we have all of the sources +# ############################################################################## +# Clang-tidy target now that we have all of the sources add_clang_tidy_files(${MAIN_SRCS}) @@ -685,23 +633,22 @@ add_clang_tidy_files(${MAIN_SRCS}) # *.bif.register.cc) create_clang_tidy_target() -######################################################################## -## CTest setup. +# ############################################################################## +# CTest setup. # Scan all .cc files for TEST_CASE macros and generate CTest targets. if (ENABLE_ZEEK_UNIT_TESTS) set(test_cases "") foreach (cc_file ${TIDY_SRCS}) - file (STRINGS ${cc_file} test_case_lines REGEX "TEST_CASE") + file(STRINGS ${cc_file} test_case_lines REGEX "TEST_CASE") foreach (line ${test_case_lines}) string(REGEX REPLACE "TEST_CASE\\(\"(.+)\"\\)" "\\1" test_case "${line}") list(APPEND test_cases "${test_case}") endforeach () endforeach () list(LENGTH test_cases num_test_cases) - MESSAGE(STATUS "-- Found ${num_test_cases} test cases for CTest") + message(STATUS "-- Found ${num_test_cases} test cases for CTest") foreach (test_case ${test_cases}) - add_test(NAME "\"${test_case}\"" - COMMAND zeek --test "--test-case=${test_case}") + add_test(NAME "\"${test_case}\"" COMMAND zeek --test "--test-case=${test_case}") endforeach () endif () diff --git a/src/analyzer/CMakeLists.txt b/src/analyzer/CMakeLists.txt index 496de66d32..ca901c3771 100644 --- a/src/analyzer/CMakeLists.txt +++ b/src/analyzer/CMakeLists.txt @@ -1,12 +1,14 @@ zeek_add_subdir_library( analyzer - INTERNAL_DEPENDENCIES ${BIF_BUILD_TARGET} - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INTERNAL_DEPENDENCIES + ${BIF_BUILD_TARGET} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Analyzer.cc - Component.cc - Manager.cc -) + Analyzer.cc + Component.cc + Manager.cc) # Treat BIFs as builtin (alternative mode). bif_target(analyzer.bif) diff --git a/src/analyzer/protocol/bittorrent/CMakeLists.txt b/src/analyzer/protocol/bittorrent/CMakeLists.txt index 2881d8339f..9c663bc3d0 100644 --- a/src/analyzer/protocol/bittorrent/CMakeLists.txt +++ b/src/analyzer/protocol/bittorrent/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek BitTorrent SOURCES - BitTorrent.cc - BitTorrentTracker.cc - Plugin.cc + BitTorrent.cc + BitTorrentTracker.cc + Plugin.cc BIFS - events.bif + events.bif PAC - bittorrent.pac - bittorrent-analyzer.pac - bittorrent-protocol.pac -) + bittorrent.pac + bittorrent-analyzer.pac + bittorrent-protocol.pac) diff --git a/src/analyzer/protocol/conn-size/CMakeLists.txt b/src/analyzer/protocol/conn-size/CMakeLists.txt index 5ed096d5c3..6780316ab5 100644 --- a/src/analyzer/protocol/conn-size/CMakeLists.txt +++ b/src/analyzer/protocol/conn-size/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek ConnSize SOURCES - ConnSize.cc - Plugin.cc + ConnSize.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/dce-rpc/CMakeLists.txt b/src/analyzer/protocol/dce-rpc/CMakeLists.txt index 39cb498b6e..34b3f95ba8 100644 --- a/src/analyzer/protocol/dce-rpc/CMakeLists.txt +++ b/src/analyzer/protocol/dce-rpc/CMakeLists.txt @@ -2,17 +2,16 @@ zeek_add_plugin( Zeek DCE_RPC SOURCES - DCE_RPC.cc - Plugin.cc + DCE_RPC.cc + Plugin.cc BIFS - consts.bif - types.bif - events.bif + consts.bif + types.bif + events.bif PAC - dce_rpc.pac - dce_rpc-protocol.pac - dce_rpc-analyzer.pac - dce_rpc-auth.pac - endpoint-atsvc.pac - endpoint-epmapper.pac -) + dce_rpc.pac + dce_rpc-protocol.pac + dce_rpc-analyzer.pac + dce_rpc-auth.pac + endpoint-atsvc.pac + endpoint-epmapper.pac) diff --git a/src/analyzer/protocol/dhcp/CMakeLists.txt b/src/analyzer/protocol/dhcp/CMakeLists.txt index 2964060d82..c6623b56f0 100644 --- a/src/analyzer/protocol/dhcp/CMakeLists.txt +++ b/src/analyzer/protocol/dhcp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek DHCP SOURCES - DHCP.cc - Plugin.cc + DHCP.cc + Plugin.cc BIFS - events.bif - types.bif + events.bif + types.bif PAC - dhcp.pac - dhcp-protocol.pac - dhcp-analyzer.pac - dhcp-options.pac -) + dhcp.pac + dhcp-protocol.pac + dhcp-analyzer.pac + dhcp-options.pac) diff --git a/src/analyzer/protocol/dnp3/CMakeLists.txt b/src/analyzer/protocol/dnp3/CMakeLists.txt index be084cf874..dd647498f8 100644 --- a/src/analyzer/protocol/dnp3/CMakeLists.txt +++ b/src/analyzer/protocol/dnp3/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek DNP3 SOURCES - DNP3.cc - Plugin.cc + DNP3.cc + Plugin.cc BIFS - events.bif + events.bif PAC - dnp3.pac - dnp3-analyzer.pac - dnp3-protocol.pac - dnp3-objects.pac -) + dnp3.pac + dnp3-analyzer.pac + dnp3-protocol.pac + dnp3-objects.pac) diff --git a/src/analyzer/protocol/dns/CMakeLists.txt b/src/analyzer/protocol/dns/CMakeLists.txt index 8e6a9c8a93..7fbeec5e1e 100644 --- a/src/analyzer/protocol/dns/CMakeLists.txt +++ b/src/analyzer/protocol/dns/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek DNS SOURCES - DNS.cc - Plugin.cc + DNS.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/file/CMakeLists.txt b/src/analyzer/protocol/file/CMakeLists.txt index 5408b1851c..ae574880cf 100644 --- a/src/analyzer/protocol/file/CMakeLists.txt +++ b/src/analyzer/protocol/file/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek File SOURCES - File.cc - Plugin.cc + File.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/finger/CMakeLists.txt b/src/analyzer/protocol/finger/CMakeLists.txt index 056a5f93e2..39174c03c5 100644 --- a/src/analyzer/protocol/finger/CMakeLists.txt +++ b/src/analyzer/protocol/finger/CMakeLists.txt @@ -1,9 +1,8 @@ spicy_add_analyzer( - NAME + NAME Finger - SOURCES + SOURCES finger.spicy finger.evt - LEGACY - legacy -) + LEGACY + legacy) diff --git a/src/analyzer/protocol/finger/legacy/CMakeLists.txt b/src/analyzer/protocol/finger/legacy/CMakeLists.txt index 6f006489bd..3ad97bd66b 100644 --- a/src/analyzer/protocol/finger/legacy/CMakeLists.txt +++ b/src/analyzer/protocol/finger/legacy/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Finger SOURCES - Finger.cc - Plugin.cc + Finger.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/ftp/CMakeLists.txt b/src/analyzer/protocol/ftp/CMakeLists.txt index 3420c4eb5f..728c5ddc65 100644 --- a/src/analyzer/protocol/ftp/CMakeLists.txt +++ b/src/analyzer/protocol/ftp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek FTP SOURCES - FTP.cc - Plugin.cc + FTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/gnutella/CMakeLists.txt b/src/analyzer/protocol/gnutella/CMakeLists.txt index 7177f2bb4b..58d28c5a37 100644 --- a/src/analyzer/protocol/gnutella/CMakeLists.txt +++ b/src/analyzer/protocol/gnutella/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Gnutella SOURCES - Gnutella.cc - Plugin.cc + Gnutella.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/gssapi/CMakeLists.txt b/src/analyzer/protocol/gssapi/CMakeLists.txt index c35ae4187b..454b45c5a2 100644 --- a/src/analyzer/protocol/gssapi/CMakeLists.txt +++ b/src/analyzer/protocol/gssapi/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek GSSAPI SOURCES - GSSAPI.cc - Plugin.cc + GSSAPI.cc + Plugin.cc BIFS - events.bif + events.bif PAC - gssapi.pac - gssapi-protocol.pac - gssapi-analyzer.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + gssapi.pac + gssapi-protocol.pac + gssapi-analyzer.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/http/CMakeLists.txt b/src/analyzer/protocol/http/CMakeLists.txt index eb1f66e9f0..a0088de732 100644 --- a/src/analyzer/protocol/http/CMakeLists.txt +++ b/src/analyzer/protocol/http/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek HTTP SOURCES - HTTP.cc - Plugin.cc + HTTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/ident/CMakeLists.txt b/src/analyzer/protocol/ident/CMakeLists.txt index 549073420d..82c32491ee 100644 --- a/src/analyzer/protocol/ident/CMakeLists.txt +++ b/src/analyzer/protocol/ident/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Ident SOURCES - Ident.cc - Plugin.cc + Ident.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/imap/CMakeLists.txt b/src/analyzer/protocol/imap/CMakeLists.txt index 33f340b54f..257b1bf0bc 100644 --- a/src/analyzer/protocol/imap/CMakeLists.txt +++ b/src/analyzer/protocol/imap/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek IMAP SOURCES - Plugin.cc - IMAP.cc + Plugin.cc + IMAP.cc BIFS - events.bif + events.bif PAC - imap.pac - imap-analyzer.pac - imap-protocol.pac -) + imap.pac + imap-analyzer.pac + imap-protocol.pac) diff --git a/src/analyzer/protocol/irc/CMakeLists.txt b/src/analyzer/protocol/irc/CMakeLists.txt index a99f0a5b72..0791a61c79 100644 --- a/src/analyzer/protocol/irc/CMakeLists.txt +++ b/src/analyzer/protocol/irc/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek IRC SOURCES - IRC.cc - Plugin.cc + IRC.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/krb/CMakeLists.txt b/src/analyzer/protocol/krb/CMakeLists.txt index 192b9cf2bc..a9ac783095 100644 --- a/src/analyzer/protocol/krb/CMakeLists.txt +++ b/src/analyzer/protocol/krb/CMakeLists.txt @@ -2,28 +2,27 @@ zeek_add_plugin( Zeek KRB SOURCES - Plugin.cc - KRB.cc - KRB_TCP.cc + Plugin.cc + KRB.cc + KRB_TCP.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - krb.pac - krb-protocol.pac - krb-analyzer.pac - krb-asn1.pac - krb-defs.pac - krb-types.pac - krb-padata.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac + krb.pac + krb-protocol.pac + krb-analyzer.pac + krb-asn1.pac + krb-defs.pac + krb-types.pac + krb-padata.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac PAC - krb_TCP.pac - krb-protocol.pac - krb-analyzer.pac - krb-asn1.pac - krb-defs.pac - krb-types.pac - krb-padata.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + krb_TCP.pac + krb-protocol.pac + krb-analyzer.pac + krb-asn1.pac + krb-defs.pac + krb-types.pac + krb-padata.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/login/CMakeLists.txt b/src/analyzer/protocol/login/CMakeLists.txt index 215d17dbd6..d2e78bd7ac 100644 --- a/src/analyzer/protocol/login/CMakeLists.txt +++ b/src/analyzer/protocol/login/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek Login SOURCES - Login.cc - RSH.cc - Telnet.cc - Rlogin.cc - NVT.cc - Plugin.cc + Login.cc + RSH.cc + Telnet.cc + Rlogin.cc + NVT.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/mime/CMakeLists.txt b/src/analyzer/protocol/mime/CMakeLists.txt index 6936945852..774766d2d8 100644 --- a/src/analyzer/protocol/mime/CMakeLists.txt +++ b/src/analyzer/protocol/mime/CMakeLists.txt @@ -7,8 +7,7 @@ zeek_add_plugin( Zeek MIME SOURCES - MIME.cc - Plugin.cc + MIME.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/modbus/CMakeLists.txt b/src/analyzer/protocol/modbus/CMakeLists.txt index edb22e4727..1c2f078760 100644 --- a/src/analyzer/protocol/modbus/CMakeLists.txt +++ b/src/analyzer/protocol/modbus/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek Modbus SOURCES - Modbus.cc - Plugin.cc + Modbus.cc + Plugin.cc BIFS - events.bif + events.bif PAC - modbus.pac - modbus-analyzer.pac - modbus-protocol.pac -) + modbus.pac + modbus-analyzer.pac + modbus-protocol.pac) diff --git a/src/analyzer/protocol/mqtt/CMakeLists.txt b/src/analyzer/protocol/mqtt/CMakeLists.txt index 471be968bb..7c55d984d2 100644 --- a/src/analyzer/protocol/mqtt/CMakeLists.txt +++ b/src/analyzer/protocol/mqtt/CMakeLists.txt @@ -2,26 +2,25 @@ zeek_add_plugin( Zeek MQTT SOURCES - MQTT.cc - Plugin.cc + MQTT.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - mqtt.pac - mqtt-protocol.pac - commands/connect.pac - commands/connack.pac - commands/publish.pac - commands/puback.pac - commands/pubrec.pac - commands/pubrel.pac - commands/pubcomp.pac - commands/subscribe.pac - commands/suback.pac - commands/unsuback.pac - commands/unsubscribe.pac - commands/disconnect.pac - commands/pingreq.pac - commands/pingresp.pac -) + mqtt.pac + mqtt-protocol.pac + commands/connect.pac + commands/connack.pac + commands/publish.pac + commands/puback.pac + commands/pubrec.pac + commands/pubrel.pac + commands/pubcomp.pac + commands/subscribe.pac + commands/suback.pac + commands/unsuback.pac + commands/unsubscribe.pac + commands/disconnect.pac + commands/pingreq.pac + commands/pingresp.pac) diff --git a/src/analyzer/protocol/mysql/CMakeLists.txt b/src/analyzer/protocol/mysql/CMakeLists.txt index deb369a18b..8dcecf637d 100644 --- a/src/analyzer/protocol/mysql/CMakeLists.txt +++ b/src/analyzer/protocol/mysql/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek MySQL SOURCES - MySQL.cc - Plugin.cc + MySQL.cc + Plugin.cc BIFS - events.bif + events.bif PAC - mysql.pac - mysql-analyzer.pac - mysql-protocol.pac -) + mysql.pac + mysql-analyzer.pac + mysql-protocol.pac) diff --git a/src/analyzer/protocol/ncp/CMakeLists.txt b/src/analyzer/protocol/ncp/CMakeLists.txt index 55805782b4..dd217f9977 100644 --- a/src/analyzer/protocol/ncp/CMakeLists.txt +++ b/src/analyzer/protocol/ncp/CMakeLists.txt @@ -2,11 +2,10 @@ zeek_add_plugin( Zeek NCP SOURCES - NCP.cc - Plugin.cc + NCP.cc + Plugin.cc BIFS - events.bif - consts.bif + events.bif + consts.bif PAC - ncp.pac -) + ncp.pac) diff --git a/src/analyzer/protocol/netbios/CMakeLists.txt b/src/analyzer/protocol/netbios/CMakeLists.txt index e000eee6e5..ef2b863c4d 100644 --- a/src/analyzer/protocol/netbios/CMakeLists.txt +++ b/src/analyzer/protocol/netbios/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek NetBIOS SOURCES - NetbiosSSN.cc - Plugin.cc + NetbiosSSN.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/ntlm/CMakeLists.txt b/src/analyzer/protocol/ntlm/CMakeLists.txt index 340551d9ba..f5cf25b1fd 100644 --- a/src/analyzer/protocol/ntlm/CMakeLists.txt +++ b/src/analyzer/protocol/ntlm/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek NTLM SOURCES - NTLM.cc - Plugin.cc + NTLM.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ntlm.pac - ntlm-protocol.pac - ntlm-analyzer.pac -) + ntlm.pac + ntlm-protocol.pac + ntlm-analyzer.pac) diff --git a/src/analyzer/protocol/ntp/CMakeLists.txt b/src/analyzer/protocol/ntp/CMakeLists.txt index 3f38c34b8b..1a062716bd 100644 --- a/src/analyzer/protocol/ntp/CMakeLists.txt +++ b/src/analyzer/protocol/ntp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek NTP SOURCES - NTP.cc - Plugin.cc + NTP.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ntp.pac - ntp-analyzer.pac - ntp-mode7.pac - ntp-protocol.pac -) + ntp.pac + ntp-analyzer.pac + ntp-mode7.pac + ntp-protocol.pac) diff --git a/src/analyzer/protocol/pia/CMakeLists.txt b/src/analyzer/protocol/pia/CMakeLists.txt index ad7fdc8a55..e8ee99dd46 100644 --- a/src/analyzer/protocol/pia/CMakeLists.txt +++ b/src/analyzer/protocol/pia/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - PIA - SOURCES - PIA.cc - Plugin.cc -) +zeek_add_plugin(Zeek PIA SOURCES PIA.cc Plugin.cc) diff --git a/src/analyzer/protocol/pop3/CMakeLists.txt b/src/analyzer/protocol/pop3/CMakeLists.txt index 3de7ae5289..f5283b17e4 100644 --- a/src/analyzer/protocol/pop3/CMakeLists.txt +++ b/src/analyzer/protocol/pop3/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek POP3 SOURCES - POP3.cc - Plugin.cc + POP3.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/radius/CMakeLists.txt b/src/analyzer/protocol/radius/CMakeLists.txt index 62c541fa58..3239bc71c7 100644 --- a/src/analyzer/protocol/radius/CMakeLists.txt +++ b/src/analyzer/protocol/radius/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RADIUS SOURCES - RADIUS.cc - Plugin.cc + RADIUS.cc + Plugin.cc BIFS - events.bif + events.bif PAC - radius.pac - radius-analyzer.pac - radius-protocol.pac -) + radius.pac + radius-analyzer.pac + radius-protocol.pac) diff --git a/src/analyzer/protocol/rdp/CMakeLists.txt b/src/analyzer/protocol/rdp/CMakeLists.txt index 836dc45ca8..2cc96a0768 100644 --- a/src/analyzer/protocol/rdp/CMakeLists.txt +++ b/src/analyzer/protocol/rdp/CMakeLists.txt @@ -2,19 +2,18 @@ zeek_add_plugin( Zeek RDP SOURCES - RDPEUDP.cc - RDP.cc - Plugin.cc + RDPEUDP.cc + RDP.cc + Plugin.cc BIFS - events.bif - types.bif + events.bif + types.bif PAC - rdp.pac - rdp-analyzer.pac - rdp-protocol.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac + rdp.pac + rdp-analyzer.pac + rdp-protocol.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac PAC - rdpeudp.pac - rdpeudp-analyzer.pac - rdpeudp-protocol.pac -) + rdpeudp.pac + rdpeudp-analyzer.pac + rdpeudp-protocol.pac) diff --git a/src/analyzer/protocol/rfb/CMakeLists.txt b/src/analyzer/protocol/rfb/CMakeLists.txt index 0d902b55d7..ee23af1e88 100644 --- a/src/analyzer/protocol/rfb/CMakeLists.txt +++ b/src/analyzer/protocol/rfb/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RFB SOURCES - RFB.cc - Plugin.cc + RFB.cc + Plugin.cc BIFS - events.bif + events.bif PAC - rfb.pac - rfb-analyzer.pac - rfb-protocol.pac -) + rfb.pac + rfb-analyzer.pac + rfb-protocol.pac) diff --git a/src/analyzer/protocol/rpc/CMakeLists.txt b/src/analyzer/protocol/rpc/CMakeLists.txt index e871ec1956..fcb3547b04 100644 --- a/src/analyzer/protocol/rpc/CMakeLists.txt +++ b/src/analyzer/protocol/rpc/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek RPC SOURCES - RPC.cc - NFS.cc - MOUNT.cc - Portmap.cc - XDR.cc - Plugin.cc + RPC.cc + NFS.cc + MOUNT.cc + Portmap.cc + XDR.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/analyzer/protocol/sip/CMakeLists.txt b/src/analyzer/protocol/sip/CMakeLists.txt index 1fb64bf0af..1d3d9a7d8d 100644 --- a/src/analyzer/protocol/sip/CMakeLists.txt +++ b/src/analyzer/protocol/sip/CMakeLists.txt @@ -2,17 +2,16 @@ zeek_add_plugin( Zeek SIP SOURCES - Plugin.cc - SIP.cc - SIP_TCP.cc + Plugin.cc + SIP.cc + SIP_TCP.cc BIFS - events.bif + events.bif PAC - sip.pac - sip-analyzer.pac - sip-protocol.pac + sip.pac + sip-analyzer.pac + sip-protocol.pac PAC - sip_TCP.pac - sip-protocol.pac - sip-analyzer.pac -) + sip_TCP.pac + sip-protocol.pac + sip-analyzer.pac) diff --git a/src/analyzer/protocol/smb/CMakeLists.txt b/src/analyzer/protocol/smb/CMakeLists.txt index 7466dbd263..4bd7cf1eee 100644 --- a/src/analyzer/protocol/smb/CMakeLists.txt +++ b/src/analyzer/protocol/smb/CMakeLists.txt @@ -2,88 +2,87 @@ zeek_add_plugin( Zeek SMB SOURCES - SMB.cc - Plugin.cc + SMB.cc + Plugin.cc BIFS - # SMB 1. - smb1_com_check_directory.bif - smb1_com_close.bif - smb1_com_create_directory.bif - smb1_com_echo.bif - smb1_com_logoff_andx.bif - smb1_com_negotiate.bif - smb1_com_nt_create_andx.bif - smb1_com_nt_cancel.bif - smb1_com_query_information.bif - smb1_com_read_andx.bif - smb1_com_session_setup_andx.bif - smb1_com_transaction.bif - smb1_com_transaction_secondary.bif - smb1_com_transaction2.bif - smb1_com_transaction2_secondary.bif - smb1_com_tree_connect_andx.bif - smb1_com_tree_disconnect.bif - smb1_com_write_andx.bif - smb1_events.bif - # SMB 2. - smb2_com_close.bif - smb2_com_create.bif - smb2_com_negotiate.bif - smb2_com_read.bif - smb2_com_session_setup.bif - smb2_com_set_info.bif - smb2_com_tree_connect.bif - smb2_com_tree_disconnect.bif - smb2_com_write.bif - smb2_com_transform_header.bif - smb2_events.bif - # Common boilerplate. - events.bif - consts.bif - types.bif + # SMB 1. + smb1_com_check_directory.bif + smb1_com_close.bif + smb1_com_create_directory.bif + smb1_com_echo.bif + smb1_com_logoff_andx.bif + smb1_com_negotiate.bif + smb1_com_nt_create_andx.bif + smb1_com_nt_cancel.bif + smb1_com_query_information.bif + smb1_com_read_andx.bif + smb1_com_session_setup_andx.bif + smb1_com_transaction.bif + smb1_com_transaction_secondary.bif + smb1_com_transaction2.bif + smb1_com_transaction2_secondary.bif + smb1_com_tree_connect_andx.bif + smb1_com_tree_disconnect.bif + smb1_com_write_andx.bif + smb1_events.bif + # SMB 2. + smb2_com_close.bif + smb2_com_create.bif + smb2_com_negotiate.bif + smb2_com_read.bif + smb2_com_session_setup.bif + smb2_com_set_info.bif + smb2_com_tree_connect.bif + smb2_com_tree_disconnect.bif + smb2_com_write.bif + smb2_com_transform_header.bif + smb2_events.bif + # Common boilerplate. + events.bif + consts.bif + types.bif PAC - # Common boilerplate. - smb.pac - smb-common.pac - smb-strings.pac - smb-time.pac - smb-pipe.pac - smb-gssapi.pac - smb-mailslot.pac - # SMB 1. - smb1-protocol.pac - smb1-com-check-directory.pac - smb1-com-close.pac - smb1-com-create-directory.pac - smb1-com-echo.pac - smb1-com-locking-andx.pac - smb1-com-logoff-andx.pac - smb1-com-negotiate.pac - smb1-com-nt-cancel.pac - smb1-com-nt-create-andx.pac - smb1-com-nt-transact.pac - smb1-com-query-information.pac - smb1-com-read-andx.pac - smb1-com-session-setup-andx.pac - smb1-com-transaction-secondary.pac - smb1-com-transaction.pac - smb1-com-transaction2.pac - smb1-com-transaction2-secondary.pac - smb1-com-tree-connect-andx.pac - smb1-com-tree-disconnect.pac - smb1-com-write-andx.pac - # SMB 2. - smb2-protocol.pac - smb2-com-close.pac - smb2-com-create.pac - smb2-com-ioctl.pac - smb2-com-lock.pac - smb2-com-negotiate.pac - smb2-com-read.pac - smb2-com-session-setup.pac - smb2-com-set-info.pac - smb2-com-tree-connect.pac - smb2-com-tree-disconnect.pac - smb2-com-write.pac - smb2-com-transform-header.pac -) + # Common boilerplate. + smb.pac + smb-common.pac + smb-strings.pac + smb-time.pac + smb-pipe.pac + smb-gssapi.pac + smb-mailslot.pac + # SMB 1. + smb1-protocol.pac + smb1-com-check-directory.pac + smb1-com-close.pac + smb1-com-create-directory.pac + smb1-com-echo.pac + smb1-com-locking-andx.pac + smb1-com-logoff-andx.pac + smb1-com-negotiate.pac + smb1-com-nt-cancel.pac + smb1-com-nt-create-andx.pac + smb1-com-nt-transact.pac + smb1-com-query-information.pac + smb1-com-read-andx.pac + smb1-com-session-setup-andx.pac + smb1-com-transaction-secondary.pac + smb1-com-transaction.pac + smb1-com-transaction2.pac + smb1-com-transaction2-secondary.pac + smb1-com-tree-connect-andx.pac + smb1-com-tree-disconnect.pac + smb1-com-write-andx.pac + # SMB 2. + smb2-protocol.pac + smb2-com-close.pac + smb2-com-create.pac + smb2-com-ioctl.pac + smb2-com-lock.pac + smb2-com-negotiate.pac + smb2-com-read.pac + smb2-com-session-setup.pac + smb2-com-set-info.pac + smb2-com-tree-connect.pac + smb2-com-tree-disconnect.pac + smb2-com-write.pac + smb2-com-transform-header.pac) diff --git a/src/analyzer/protocol/smtp/CMakeLists.txt b/src/analyzer/protocol/smtp/CMakeLists.txt index e1618af641..b302045985 100644 --- a/src/analyzer/protocol/smtp/CMakeLists.txt +++ b/src/analyzer/protocol/smtp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek SMTP SOURCES - SMTP.cc - Plugin.cc + SMTP.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/analyzer/protocol/snmp/CMakeLists.txt b/src/analyzer/protocol/snmp/CMakeLists.txt index d93762aa75..48c829d91b 100644 --- a/src/analyzer/protocol/snmp/CMakeLists.txt +++ b/src/analyzer/protocol/snmp/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek SNMP SOURCES - SNMP.cc - Plugin.cc + SNMP.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - snmp.pac - snmp-protocol.pac - snmp-analyzer.pac - ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac -) + snmp.pac + snmp-protocol.pac + snmp-analyzer.pac + ${PROJECT_SOURCE_DIR}/src/analyzer/protocol/asn1/asn1.pac) diff --git a/src/analyzer/protocol/socks/CMakeLists.txt b/src/analyzer/protocol/socks/CMakeLists.txt index fa0e6b083d..7d11ee70d5 100644 --- a/src/analyzer/protocol/socks/CMakeLists.txt +++ b/src/analyzer/protocol/socks/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek SOCKS SOURCES - SOCKS.cc - Plugin.cc + SOCKS.cc + Plugin.cc BIFS - events.bif + events.bif PAC - socks.pac - socks-protocol.pac - socks-analyzer.pac -) + socks.pac + socks-protocol.pac + socks-analyzer.pac) diff --git a/src/analyzer/protocol/ssh/CMakeLists.txt b/src/analyzer/protocol/ssh/CMakeLists.txt index 6205089530..f2364bffef 100644 --- a/src/analyzer/protocol/ssh/CMakeLists.txt +++ b/src/analyzer/protocol/ssh/CMakeLists.txt @@ -2,14 +2,13 @@ zeek_add_plugin( Zeek SSH SOURCES - SSH.cc - Plugin.cc + SSH.cc + Plugin.cc BIFS - types.bif - events.bif + types.bif + events.bif PAC - ssh.pac - ssh-analyzer.pac - ssh-protocol.pac - consts.pac -) + ssh.pac + ssh-analyzer.pac + ssh-protocol.pac + consts.pac) diff --git a/src/analyzer/protocol/ssl/CMakeLists.txt b/src/analyzer/protocol/ssl/CMakeLists.txt index 3cc3fc5649..5c686b16cf 100644 --- a/src/analyzer/protocol/ssl/CMakeLists.txt +++ b/src/analyzer/protocol/ssl/CMakeLists.txt @@ -2,34 +2,33 @@ zeek_add_plugin( Zeek SSL SOURCES - SSL.cc - DTLS.cc - Plugin.cc + SSL.cc + DTLS.cc + Plugin.cc BIFS - types.bif - events.bif - functions.bif - consts.bif + types.bif + events.bif + functions.bif + consts.bif PAC - tls-handshake.pac - tls-handshake-protocol.pac - tls-handshake-analyzer.pac - ssl-defs.pac - proc-certificate.pac - tls-handshake-signed_certificate_timestamp.pac + tls-handshake.pac + tls-handshake-protocol.pac + tls-handshake-analyzer.pac + ssl-defs.pac + proc-certificate.pac + tls-handshake-signed_certificate_timestamp.pac PAC - ssl.pac - ssl-dtls-analyzer.pac - ssl-analyzer.pac - ssl-dtls-protocol.pac - ssl-protocol.pac - ssl-defs.pac - proc-certificate.pac + ssl.pac + ssl-dtls-analyzer.pac + ssl-analyzer.pac + ssl-dtls-protocol.pac + ssl-protocol.pac + ssl-defs.pac + proc-certificate.pac PAC - dtls.pac - ssl-dtls-analyzer.pac - dtls-analyzer.pac - ssl-dtls-protocol.pac - dtls-protocol.pac - ssl-defs.pac -) + dtls.pac + ssl-dtls-analyzer.pac + dtls-analyzer.pac + ssl-dtls-protocol.pac + dtls-protocol.pac + ssl-defs.pac) diff --git a/src/analyzer/protocol/syslog/CMakeLists.txt b/src/analyzer/protocol/syslog/CMakeLists.txt index c80aefeb32..57c78fdf92 100644 --- a/src/analyzer/protocol/syslog/CMakeLists.txt +++ b/src/analyzer/protocol/syslog/CMakeLists.txt @@ -1,9 +1,8 @@ spicy_add_analyzer( - NAME + NAME Syslog - SOURCES + SOURCES syslog.spicy syslog.evt - LEGACY - legacy -) + LEGACY + legacy) diff --git a/src/analyzer/protocol/syslog/legacy/CMakeLists.txt b/src/analyzer/protocol/syslog/legacy/CMakeLists.txt index 472344a519..ef2f7330d5 100644 --- a/src/analyzer/protocol/syslog/legacy/CMakeLists.txt +++ b/src/analyzer/protocol/syslog/legacy/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek Syslog SOURCES - Syslog.cc - Plugin.cc + Syslog.cc + Plugin.cc BIFS - events.bif + events.bif PAC - syslog.pac - syslog-analyzer.pac - syslog-protocol.pac -) + syslog.pac + syslog-analyzer.pac + syslog-protocol.pac) diff --git a/src/analyzer/protocol/tcp/CMakeLists.txt b/src/analyzer/protocol/tcp/CMakeLists.txt index 613fdc2249..42e41c9dac 100644 --- a/src/analyzer/protocol/tcp/CMakeLists.txt +++ b/src/analyzer/protocol/tcp/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek TCP SOURCES - TCP.cc - TCP_Endpoint.cc - TCP_Reassembler.cc - ContentLine.cc - Plugin.cc + TCP.cc + TCP_Endpoint.cc + TCP_Reassembler.cc + ContentLine.cc + Plugin.cc BIFS - events.bif - types.bif - functions.bif -) + events.bif + types.bif + functions.bif) diff --git a/src/analyzer/protocol/xmpp/CMakeLists.txt b/src/analyzer/protocol/xmpp/CMakeLists.txt index aa3b8336a6..3ea127d691 100644 --- a/src/analyzer/protocol/xmpp/CMakeLists.txt +++ b/src/analyzer/protocol/xmpp/CMakeLists.txt @@ -2,12 +2,11 @@ zeek_add_plugin( Zeek XMPP SOURCES - Plugin.cc - XMPP.cc + Plugin.cc + XMPP.cc BIFS - events.bif + events.bif PAC - xmpp.pac - xmpp-analyzer.pac - xmpp-protocol.pac -) + xmpp.pac + xmpp-analyzer.pac + xmpp-protocol.pac) diff --git a/src/analyzer/protocol/zip/CMakeLists.txt b/src/analyzer/protocol/zip/CMakeLists.txt index d51057c15d..e7c11ccdbb 100644 --- a/src/analyzer/protocol/zip/CMakeLists.txt +++ b/src/analyzer/protocol/zip/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - ZIP - SOURCES - ZIP.cc - Plugin.cc -) +zeek_add_plugin(Zeek ZIP SOURCES ZIP.cc Plugin.cc) diff --git a/src/broker/CMakeLists.txt b/src/broker/CMakeLists.txt index e2e54b288d..472f67e11d 100644 --- a/src/broker/CMakeLists.txt +++ b/src/broker/CMakeLists.txt @@ -1,13 +1,14 @@ zeek_add_subdir_library( comm - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Data.cc - Manager.cc - Store.cc + Data.cc + Manager.cc + Store.cc BIFS - comm.bif - data.bif - messaging.bif - store.bif -) + comm.bif + data.bif + messaging.bif + store.bif) diff --git a/src/file_analysis/CMakeLists.txt b/src/file_analysis/CMakeLists.txt index 80d842e8fc..7920c40f36 100644 --- a/src/file_analysis/CMakeLists.txt +++ b/src/file_analysis/CMakeLists.txt @@ -1,16 +1,17 @@ zeek_add_subdir_library( file_analysis - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Manager.cc - File.cc - FileTimer.cc - FileReassembler.cc - Analyzer.cc - AnalyzerSet.cc - Component.cc + Manager.cc + File.cc + FileTimer.cc + FileReassembler.cc + Analyzer.cc + AnalyzerSet.cc + Component.cc BIFS - file_analysis.bif -) + file_analysis.bif) add_subdirectory(analyzer) diff --git a/src/file_analysis/analyzer/data_event/CMakeLists.txt b/src/file_analysis/analyzer/data_event/CMakeLists.txt index e8eda489f0..eb8042dd77 100644 --- a/src/file_analysis/analyzer/data_event/CMakeLists.txt +++ b/src/file_analysis/analyzer/data_event/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileDataEvent SOURCES - DataEvent.cc - Plugin.cc + DataEvent.cc + Plugin.cc INCLUDE_DIRS - "${CMAKE_CURRENT_SOURCE_DIR}" -) + "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/src/file_analysis/analyzer/entropy/CMakeLists.txt b/src/file_analysis/analyzer/entropy/CMakeLists.txt index 6608822199..944cf64a3c 100644 --- a/src/file_analysis/analyzer/entropy/CMakeLists.txt +++ b/src/file_analysis/analyzer/entropy/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileEntropy SOURCES - Entropy.cc - Plugin.cc + Entropy.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/file_analysis/analyzer/extract/CMakeLists.txt b/src/file_analysis/analyzer/extract/CMakeLists.txt index 38ce0fd4db..0c08872172 100644 --- a/src/file_analysis/analyzer/extract/CMakeLists.txt +++ b/src/file_analysis/analyzer/extract/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek FileExtract SOURCES - Extract.cc - Plugin.cc + Extract.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/file_analysis/analyzer/hash/CMakeLists.txt b/src/file_analysis/analyzer/hash/CMakeLists.txt index fc1fcf50de..adfd96007f 100644 --- a/src/file_analysis/analyzer/hash/CMakeLists.txt +++ b/src/file_analysis/analyzer/hash/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek FileHash SOURCES - Hash.cc - Plugin.cc + Hash.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/file_analysis/analyzer/pe/CMakeLists.txt b/src/file_analysis/analyzer/pe/CMakeLists.txt index dd8000f1eb..ff98b004db 100644 --- a/src/file_analysis/analyzer/pe/CMakeLists.txt +++ b/src/file_analysis/analyzer/pe/CMakeLists.txt @@ -2,15 +2,14 @@ zeek_add_plugin( Zeek PE SOURCES - PE.cc - Plugin.cc + PE.cc + Plugin.cc BIFS - events.bif + events.bif PAC - pe.pac - pe-analyzer.pac - pe-file-headers.pac - pe-file-idata.pac - pe-file.pac - pe-file-types.pac -) + pe.pac + pe-analyzer.pac + pe-file-headers.pac + pe-file-idata.pac + pe-file.pac + pe-file-types.pac) diff --git a/src/file_analysis/analyzer/x509/CMakeLists.txt b/src/file_analysis/analyzer/x509/CMakeLists.txt index dbd93f0d3a..7f9541df0d 100644 --- a/src/file_analysis/analyzer/x509/CMakeLists.txt +++ b/src/file_analysis/analyzer/x509/CMakeLists.txt @@ -2,16 +2,15 @@ zeek_add_plugin( Zeek X509 SOURCES - X509Common.cc - X509.cc - OCSP.cc - Plugin.cc + X509Common.cc + X509.cc + OCSP.cc + Plugin.cc BIFS - events.bif - types.bif - functions.bif - ocsp_events.bif + events.bif + types.bif + functions.bif + ocsp_events.bif PAC - x509-extension.pac - x509-signed_certificate_timestamp.pac -) + x509-extension.pac + x509-signed_certificate_timestamp.pac) diff --git a/src/fuzzers/CMakeLists.txt b/src/fuzzers/CMakeLists.txt index a7bef79ecb..5bf6e7b5eb 100644 --- a/src/fuzzers/CMakeLists.txt +++ b/src/fuzzers/CMakeLists.txt @@ -1,18 +1,18 @@ -######################################################################## -## Fuzzing targets +# ############################################################################## +# Fuzzing targets -if ( NOT ZEEK_ENABLE_FUZZERS ) +if (NOT ZEEK_ENABLE_FUZZERS) return() endif () -if ( NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE} ) - if ( "$ENV{LIB_FUZZING_ENGINE}" STREQUAL "" ) +if (NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE}) + if ("$ENV{LIB_FUZZING_ENGINE}" STREQUAL "") # Empty LIB_FUZZING_ENGINE, assume libFuzzer set(ZEEK_FUZZING_ENGINE "-fsanitize=fuzzer" CACHE INTERNAL "" FORCE) else () - STRING(SUBSTRING "$ENV{LIB_FUZZING_ENGINE}" 0 1 _first_char) + string(SUBSTRING "$ENV{LIB_FUZZING_ENGINE}" 0 1 _first_char) - if ( "${_first_char}" STREQUAL "-" OR EXISTS "$ENV{LIB_FUZZING_ENGINE}" ) + if ("${_first_char}" STREQUAL "-" OR EXISTS "$ENV{LIB_FUZZING_ENGINE}") # Looks like a linker flag or valid file, use it set(ZEEK_FUZZING_ENGINE "$ENV{LIB_FUZZING_ENGINE}" CACHE INTERNAL "" FORCE) else () @@ -23,37 +23,36 @@ if ( NOT DEFINED ZEEK_FUZZING_ENGINE AND DEFINED ENV{LIB_FUZZING_ENGINE} ) endif () # The bind library is handled a bit hack-ishly since it defaults to linking it -# as static library by default on Linux, but at least on one common distro, -# that static library wasn't compiled with -fPIC and so not usable in the -# shared library we're trying to build. So instead, the fuzzer executable, not -# the shared lib, links it. +# as static library by default on Linux, but at least on one common distro, that +# static library wasn't compiled with -fPIC and so not usable in the shared +# library we're trying to build. So instead, the fuzzer executable, not the +# shared lib, links it. string(REGEX MATCH ".*\\.a$" _have_static_bind_lib "${BIND_LIBRARY}") -macro(SETUP_FUZZ_TARGET _fuzz_target _fuzz_source) +macro (SETUP_FUZZ_TARGET _fuzz_target _fuzz_source) add_executable(${_fuzz_target} ${_fuzz_source} ${ARGN}) target_link_libraries(${_fuzz_target} zeek_fuzzer_shared) - if ( _have_static_bind_lib ) + if (_have_static_bind_lib) target_link_libraries(${_fuzz_target} ${BIND_LIBRARY}) endif () target_link_libraries(${_fuzz_target} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) - if ( DEFINED ZEEK_FUZZING_ENGINE ) + if (DEFINED ZEEK_FUZZING_ENGINE) target_link_libraries(${_fuzz_target} ${ZEEK_FUZZING_ENGINE}) else () - target_link_libraries(${_fuzz_target} - $) + target_link_libraries(${_fuzz_target} $) endif () -endmacro() +endmacro () -macro(ADD_FUZZ_TARGET _name) +macro (ADD_FUZZ_TARGET _name) set(_fuzz_target zeek-${_name}-fuzzer) set(_fuzz_source ${_name}-fuzzer.cc) setup_fuzz_target(${_fuzz_target} ${_fuzz_source}) endmacro () -macro(ADD_GENERIC_ANALYZER_FUZZ_TARGET _name) +macro (ADD_GENERIC_ANALYZER_FUZZ_TARGET _name) set(_fuzz_target zeek-${_name}-fuzzer) set(_fuzz_source generic-analyzer-fuzzer.cc) setup_fuzz_target(${_fuzz_target} ${_fuzz_source}) @@ -68,9 +67,9 @@ target_sources(zeek_fuzzer_shared PRIVATE FuzzBuffer.cc) set(zeek_fuzzer_shared_deps) -foreach(_dep ${zeekdeps} ) - if ( "${_dep}" STREQUAL "${BIND_LIBRARY}" ) - if ( NOT _have_static_bind_lib ) +foreach (_dep ${zeekdeps}) + if ("${_dep}" STREQUAL "${BIND_LIBRARY}") + if (NOT _have_static_bind_lib) set(zeek_fuzzer_shared_deps ${zeek_fuzzer_shared_deps} ${_dep}) endif () else () @@ -78,9 +77,8 @@ foreach(_dep ${zeekdeps} ) endif () endforeach () -target_link_libraries(zeek_fuzzer_shared PUBLIC - ${zeek_fuzzer_shared_deps} - ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +target_link_libraries(zeek_fuzzer_shared PUBLIC ${zeek_fuzzer_shared_deps} + ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) add_fuzz_target(packet) add_fuzz_target(dns) @@ -104,26 +102,27 @@ add_generic_analyzer_fuzz_target(radius) add_generic_analyzer_fuzz_target(rdp) add_generic_analyzer_fuzz_target(rdpeudp) add_generic_analyzer_fuzz_target(rfb) -add_generic_analyzer_fuzz_target(mount) #rpc -add_generic_analyzer_fuzz_target(nfs) #rpc -add_generic_analyzer_fuzz_target(portmapper) #rpc +add_generic_analyzer_fuzz_target(mount) # rpc +add_generic_analyzer_fuzz_target(nfs) # rpc +add_generic_analyzer_fuzz_target(portmapper) # rpc add_generic_analyzer_fuzz_target(sip) add_generic_analyzer_fuzz_target(smb) add_generic_analyzer_fuzz_target(snmp) add_generic_analyzer_fuzz_target(ssh) add_generic_analyzer_fuzz_target(syslog) -#add_generic_analyzer_fuzz_target(finger) # no pcap files -#add_generic_analyzer_fuzz_target(gssapi) # only samples are embedded in smb -#add_generic_analyzer_fuzz_target(ident) # no pcap files -#add_generic_analyzer_fuzz_target(krb) # should these just be handled by smb? -#add_generic_analyzer_fuzz_target(krb_tcp) # should these just be handled by smb? -#add_generic_analyzer_fuzz_target(rsh) # login - no pcap files -#add_generic_analyzer_fuzz_target(rlogin) # login - no pcap files -#add_generic_analyzer_fuzz_target(telnet) # login - no pcap files -#add_generic_analyzer_fuzz_target(netbios) # no pcap files -#add_generic_analyzer_fuzz_target(ntlm) # only samples are embedded in dce-rpc or smb -#add_generic_analyzer_fuzz_target(xdr) # rpc - no pcap files -#add_generic_analyzer_fuzz_target(sip_tcp) # unnecessary? -#add_generic_analyzer_fuzz_target(socks) # can this one be tested by adding SOCKS pkts to the HTTP corpus? -#add_generic_analyzer_fuzz_target(xmpp) # no pcap files +# add_generic_analyzer_fuzz_target(finger) # no pcap files +# add_generic_analyzer_fuzz_target(gssapi) # only samples are embedded in smb +# add_generic_analyzer_fuzz_target(ident) # no pcap files +# add_generic_analyzer_fuzz_target(krb) # should these just be handled by +# smb? add_generic_analyzer_fuzz_target(krb_tcp) # should these just be handled +# by smb? add_generic_analyzer_fuzz_target(rsh) # login - no pcap files +# add_generic_analyzer_fuzz_target(rlogin) # login - no pcap files +# add_generic_analyzer_fuzz_target(telnet) # login - no pcap files +# add_generic_analyzer_fuzz_target(netbios) # no pcap files +# add_generic_analyzer_fuzz_target(ntlm) # only samples are embedded in +# dce-rpc or smb add_generic_analyzer_fuzz_target(xdr) # rpc - no pcap files +# add_generic_analyzer_fuzz_target(sip_tcp) # unnecessary? +# add_generic_analyzer_fuzz_target(socks) # can this one be tested by adding +# SOCKS pkts to the HTTP corpus? add_generic_analyzer_fuzz_target(xmpp) # no +# pcap files diff --git a/src/input/CMakeLists.txt b/src/input/CMakeLists.txt index 45c2c2cf58..72fb6acd62 100644 --- a/src/input/CMakeLists.txt +++ b/src/input/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( input SOURCES - Component.cc - Manager.cc - ReaderBackend.cc - ReaderFrontend.cc + Component.cc + Manager.cc + ReaderBackend.cc + ReaderFrontend.cc BIFS - input.bif -) + input.bif) add_subdirectory(readers) diff --git a/src/input/readers/CMakeLists.txt b/src/input/readers/CMakeLists.txt index 032a286052..673424e1c2 100644 --- a/src/input/readers/CMakeLists.txt +++ b/src/input/readers/CMakeLists.txt @@ -1,4 +1,3 @@ - add_subdirectory(ascii) add_subdirectory(benchmark) add_subdirectory(binary) @@ -6,4 +5,4 @@ add_subdirectory(config) add_subdirectory(raw) if (USE_SQLITE) add_subdirectory(sqlite) -endif() +endif () diff --git a/src/input/readers/ascii/CMakeLists.txt b/src/input/readers/ascii/CMakeLists.txt index 2a4d81ba2f..fc2aa5645e 100644 --- a/src/input/readers/ascii/CMakeLists.txt +++ b/src/input/readers/ascii/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek AsciiReader SOURCES - Ascii.cc - Plugin.cc + Ascii.cc + Plugin.cc BIFS - ascii.bif -) + ascii.bif) diff --git a/src/input/readers/benchmark/CMakeLists.txt b/src/input/readers/benchmark/CMakeLists.txt index f40091e955..25a4bdce82 100644 --- a/src/input/readers/benchmark/CMakeLists.txt +++ b/src/input/readers/benchmark/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek BenchmarkReader SOURCES - Benchmark.cc - Plugin.cc + Benchmark.cc + Plugin.cc BIFS - benchmark.bif -) + benchmark.bif) diff --git a/src/input/readers/binary/CMakeLists.txt b/src/input/readers/binary/CMakeLists.txt index 83ddb18bc6..0025bec76f 100644 --- a/src/input/readers/binary/CMakeLists.txt +++ b/src/input/readers/binary/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek BinaryReader SOURCES - Binary.cc - Plugin.cc + Binary.cc + Plugin.cc BIFS - binary.bif -) + binary.bif) diff --git a/src/input/readers/config/CMakeLists.txt b/src/input/readers/config/CMakeLists.txt index dfe3005a23..aaafc14e6e 100644 --- a/src/input/readers/config/CMakeLists.txt +++ b/src/input/readers/config/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek ConfigReader SOURCES - Config.cc - Plugin.cc + Config.cc + Plugin.cc BIFS - config.bif -) + config.bif) diff --git a/src/input/readers/raw/CMakeLists.txt b/src/input/readers/raw/CMakeLists.txt index 6efeb00637..9d70b4c4c8 100644 --- a/src/input/readers/raw/CMakeLists.txt +++ b/src/input/readers/raw/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek RawReader SOURCES - Raw.cc - Plugin.cc + Raw.cc + Plugin.cc BIFS - raw.bif -) + raw.bif) diff --git a/src/input/readers/sqlite/CMakeLists.txt b/src/input/readers/sqlite/CMakeLists.txt index 7d38b66baa..bb8bd4159c 100644 --- a/src/input/readers/sqlite/CMakeLists.txt +++ b/src/input/readers/sqlite/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek SQLiteReader SOURCES - SQLite.cc - Plugin.cc + SQLite.cc + Plugin.cc BIFS - sqlite.bif -) + sqlite.bif) diff --git a/src/iosource/CMakeLists.txt b/src/iosource/CMakeLists.txt index 73a433ece4..63881464a5 100644 --- a/src/iosource/CMakeLists.txt +++ b/src/iosource/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( iosource SOURCES - BPF_Program.cc - Component.cc - Manager.cc - Packet.cc - PktDumper.cc - PktSrc.cc -) + BPF_Program.cc + Component.cc + Manager.cc + Packet.cc + PktDumper.cc + PktSrc.cc) add_subdirectory(pcap) diff --git a/src/iosource/pcap/CMakeLists.txt b/src/iosource/pcap/CMakeLists.txt index f3dd6adc2a..1102815afd 100644 --- a/src/iosource/pcap/CMakeLists.txt +++ b/src/iosource/pcap/CMakeLists.txt @@ -1,11 +1,4 @@ -zeek_add_plugin( - Zeek - Pcap - SOURCES - Source.cc - Dumper.cc - Plugin.cc -) +zeek_add_plugin(Zeek Pcap SOURCES Source.cc Dumper.cc Plugin.cc) # Treat BIFs as builtin (alternative mode). bif_target(pcap.bif) diff --git a/src/logging/CMakeLists.txt b/src/logging/CMakeLists.txt index 581ea0013d..7690998520 100644 --- a/src/logging/CMakeLists.txt +++ b/src/logging/CMakeLists.txt @@ -1,12 +1,11 @@ zeek_add_subdir_library( logging SOURCES - Component.cc - Manager.cc - WriterBackend.cc - WriterFrontend.cc + Component.cc + Manager.cc + WriterBackend.cc + WriterFrontend.cc BIFS - logging.bif -) + logging.bif) add_subdirectory(writers) diff --git a/src/logging/writers/CMakeLists.txt b/src/logging/writers/CMakeLists.txt index 3aa507b316..1508535c34 100644 --- a/src/logging/writers/CMakeLists.txt +++ b/src/logging/writers/CMakeLists.txt @@ -1,6 +1,5 @@ - add_subdirectory(ascii) add_subdirectory(none) if (USE_SQLITE) add_subdirectory(sqlite) -endif() +endif () diff --git a/src/logging/writers/ascii/CMakeLists.txt b/src/logging/writers/ascii/CMakeLists.txt index 940b0ff6b0..b76d2f4265 100644 --- a/src/logging/writers/ascii/CMakeLists.txt +++ b/src/logging/writers/ascii/CMakeLists.txt @@ -1,9 +1,8 @@ zeek_add_plugin( Zeek - AsciiWriter + AsciiWriter SOURCES - Ascii.cc - Plugin.cc + Ascii.cc + Plugin.cc BIFS - ascii.bif -) + ascii.bif) diff --git a/src/logging/writers/none/CMakeLists.txt b/src/logging/writers/none/CMakeLists.txt index 40415927e1..a9466c1ece 100644 --- a/src/logging/writers/none/CMakeLists.txt +++ b/src/logging/writers/none/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek NoneWriter SOURCES - None.cc - Plugin.cc + None.cc + Plugin.cc BIFS - none.bif -) + none.bif) diff --git a/src/logging/writers/sqlite/CMakeLists.txt b/src/logging/writers/sqlite/CMakeLists.txt index 7cbda35fc1..735ba8aec1 100644 --- a/src/logging/writers/sqlite/CMakeLists.txt +++ b/src/logging/writers/sqlite/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek SQLiteWriter SOURCES - SQLite.cc - Plugin.cc + SQLite.cc + Plugin.cc BIFS - sqlite.bif -) + sqlite.bif) diff --git a/src/packet_analysis/CMakeLists.txt b/src/packet_analysis/CMakeLists.txt index 014cbe2755..f7e5f37491 100644 --- a/src/packet_analysis/CMakeLists.txt +++ b/src/packet_analysis/CMakeLists.txt @@ -1,11 +1,12 @@ zeek_add_subdir_library( packet_analysis - INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} SOURCES - Analyzer.cc - Dispatcher.cc - Manager.cc - Component.cc -) + Analyzer.cc + Dispatcher.cc + Manager.cc + Component.cc) add_subdirectory(protocol) diff --git a/src/packet_analysis/protocol/arp/CMakeLists.txt b/src/packet_analysis/protocol/arp/CMakeLists.txt index 28d7533782..0a2a7b73da 100644 --- a/src/packet_analysis/protocol/arp/CMakeLists.txt +++ b/src/packet_analysis/protocol/arp/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek ARP SOURCES - ARP.cc - Plugin.cc + ARP.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/ayiya/CMakeLists.txt b/src/packet_analysis/protocol/ayiya/CMakeLists.txt index 32f24f88d3..9e79abc894 100644 --- a/src/packet_analysis/protocol/ayiya/CMakeLists.txt +++ b/src/packet_analysis/protocol/ayiya/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - AYIYA - SOURCES - AYIYA.cc - Plugin.cc -) +zeek_add_plugin(Zeek AYIYA SOURCES AYIYA.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ethernet/CMakeLists.txt b/src/packet_analysis/protocol/ethernet/CMakeLists.txt index 8ac662c3b7..bd1577b9b2 100644 --- a/src/packet_analysis/protocol/ethernet/CMakeLists.txt +++ b/src/packet_analysis/protocol/ethernet/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Ethernet - SOURCES - Ethernet.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Ethernet SOURCES Ethernet.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/fddi/CMakeLists.txt b/src/packet_analysis/protocol/fddi/CMakeLists.txt index 40d4c00f90..1d1658a3ea 100644 --- a/src/packet_analysis/protocol/fddi/CMakeLists.txt +++ b/src/packet_analysis/protocol/fddi/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - FDDI - SOURCES - FDDI.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer FDDI SOURCES FDDI.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/geneve/CMakeLists.txt b/src/packet_analysis/protocol/geneve/CMakeLists.txt index c71f7c45f3..dbce4d0442 100644 --- a/src/packet_analysis/protocol/geneve/CMakeLists.txt +++ b/src/packet_analysis/protocol/geneve/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek Geneve SOURCES - Geneve.cc - Plugin.cc + Geneve.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/gre/CMakeLists.txt b/src/packet_analysis/protocol/gre/CMakeLists.txt index c9b88e19b5..ad3585ed78 100644 --- a/src/packet_analysis/protocol/gre/CMakeLists.txt +++ b/src/packet_analysis/protocol/gre/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - GRE - SOURCES - GRE.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer GRE SOURCES GRE.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/gtpv1/CMakeLists.txt b/src/packet_analysis/protocol/gtpv1/CMakeLists.txt index 63fb5cf5d0..af1e3b15a8 100644 --- a/src/packet_analysis/protocol/gtpv1/CMakeLists.txt +++ b/src/packet_analysis/protocol/gtpv1/CMakeLists.txt @@ -2,13 +2,12 @@ zeek_add_plugin( Zeek GTPv1 SOURCES - GTPv1.cc - Plugin.cc + GTPv1.cc + Plugin.cc BIFS - events.bif - functions.bif + events.bif + functions.bif PAC - gtpv1.pac - gtpv1-protocol.pac - gtpv1-analyzer.pac -) + gtpv1.pac + gtpv1-protocol.pac + gtpv1-analyzer.pac) diff --git a/src/packet_analysis/protocol/icmp/CMakeLists.txt b/src/packet_analysis/protocol/icmp/CMakeLists.txt index 09cefa1b1b..f1b4f3cee9 100644 --- a/src/packet_analysis/protocol/icmp/CMakeLists.txt +++ b/src/packet_analysis/protocol/icmp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek ICMP SOURCES - ICMP.cc - ICMPSessionAdapter.cc - Plugin.cc + ICMP.cc + ICMPSessionAdapter.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt b/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt index b246a23d74..0c2d46b31c 100644 --- a/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt +++ b/src/packet_analysis/protocol/ieee802_11/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IEEE802_11 - SOURCES - IEEE802_11.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IEEE802_11 SOURCES IEEE802_11.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt b/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt index 2a8b31f1c5..3cfb20083b 100644 --- a/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt +++ b/src/packet_analysis/protocol/ieee802_11_radio/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IEEE802_11_Radio - SOURCES - IEEE802_11_Radio.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IEEE802_11_Radio SOURCES IEEE802_11_Radio.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/ip/CMakeLists.txt b/src/packet_analysis/protocol/ip/CMakeLists.txt index 59a26a6d55..05b694c482 100644 --- a/src/packet_analysis/protocol/ip/CMakeLists.txt +++ b/src/packet_analysis/protocol/ip/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( PacketAnalyzer IP SOURCES - IP.cc - IPBasedAnalyzer.cc - SessionAdapter.cc - Plugin.cc -) + IP.cc + IPBasedAnalyzer.cc + SessionAdapter.cc + Plugin.cc) diff --git a/src/packet_analysis/protocol/iptunnel/CMakeLists.txt b/src/packet_analysis/protocol/iptunnel/CMakeLists.txt index 6518d38758..01a680323e 100644 --- a/src/packet_analysis/protocol/iptunnel/CMakeLists.txt +++ b/src/packet_analysis/protocol/iptunnel/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - IPTunnel - SOURCES - IPTunnel.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer IPTunnel SOURCES IPTunnel.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/linux_sll/CMakeLists.txt b/src/packet_analysis/protocol/linux_sll/CMakeLists.txt index 3d517c53cd..2591b64160 100644 --- a/src/packet_analysis/protocol/linux_sll/CMakeLists.txt +++ b/src/packet_analysis/protocol/linux_sll/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LinuxSLL - SOURCES - LinuxSLL.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LinuxSLL SOURCES LinuxSLL.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt b/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt index 63a94ca844..b3072fa4bb 100644 --- a/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt +++ b/src/packet_analysis/protocol/linux_sll2/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LinuxSLL2 - SOURCES - LinuxSLL2.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LinuxSLL2 SOURCES LinuxSLL2.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/llc/CMakeLists.txt b/src/packet_analysis/protocol/llc/CMakeLists.txt index 4d974b9b0a..692f39e440 100644 --- a/src/packet_analysis/protocol/llc/CMakeLists.txt +++ b/src/packet_analysis/protocol/llc/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - LLC - SOURCES - LLC.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer LLC SOURCES LLC.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/mpls/CMakeLists.txt b/src/packet_analysis/protocol/mpls/CMakeLists.txt index 3e40d0fe16..8f14323b77 100644 --- a/src/packet_analysis/protocol/mpls/CMakeLists.txt +++ b/src/packet_analysis/protocol/mpls/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - MPLS - SOURCES - MPLS.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer MPLS SOURCES MPLS.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/nflog/CMakeLists.txt b/src/packet_analysis/protocol/nflog/CMakeLists.txt index 53239f2b6c..fad9feb3b7 100644 --- a/src/packet_analysis/protocol/nflog/CMakeLists.txt +++ b/src/packet_analysis/protocol/nflog/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - NFLog - SOURCES - NFLog.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer NFLog SOURCES NFLog.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt b/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt index 0eb4592faa..9adb81f417 100644 --- a/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt +++ b/src/packet_analysis/protocol/novell_802_3/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Novell_802_3 - SOURCES - Novell_802_3.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Novell_802_3 SOURCES Novell_802_3.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/null/CMakeLists.txt b/src/packet_analysis/protocol/null/CMakeLists.txt index dd0da51371..91e04f8d9d 100644 --- a/src/packet_analysis/protocol/null/CMakeLists.txt +++ b/src/packet_analysis/protocol/null/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Null - SOURCES - Null.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Null SOURCES Null.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/pbb/CMakeLists.txt b/src/packet_analysis/protocol/pbb/CMakeLists.txt index cee71edd44..3e6889369c 100644 --- a/src/packet_analysis/protocol/pbb/CMakeLists.txt +++ b/src/packet_analysis/protocol/pbb/CMakeLists.txt @@ -1,4 +1,3 @@ - include(ZeekPlugin) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt b/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt index c6aa6f8f26..aa4ab35657 100644 --- a/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt +++ b/src/packet_analysis/protocol/ppp_serial/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - PPPSerial - SOURCES - PPPSerial.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer PPPSerial SOURCES PPPSerial.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/pppoe/CMakeLists.txt b/src/packet_analysis/protocol/pppoe/CMakeLists.txt index 1173703493..d84229004a 100644 --- a/src/packet_analysis/protocol/pppoe/CMakeLists.txt +++ b/src/packet_analysis/protocol/pppoe/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - PPPoE - SOURCES - PPPoE.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer PPPoE SOURCES PPPoE.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/root/CMakeLists.txt b/src/packet_analysis/protocol/root/CMakeLists.txt index c127ad458f..cd4456cb6a 100644 --- a/src/packet_analysis/protocol/root/CMakeLists.txt +++ b/src/packet_analysis/protocol/root/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Root - SOURCES - Root.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Root SOURCES Root.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/skip/CMakeLists.txt b/src/packet_analysis/protocol/skip/CMakeLists.txt index 85cede467f..a8d4bc517a 100644 --- a/src/packet_analysis/protocol/skip/CMakeLists.txt +++ b/src/packet_analysis/protocol/skip/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - Skip - SOURCES - Skip.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer Skip SOURCES Skip.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/snap/CMakeLists.txt b/src/packet_analysis/protocol/snap/CMakeLists.txt index 7f6412cb4b..e064f3c395 100644 --- a/src/packet_analysis/protocol/snap/CMakeLists.txt +++ b/src/packet_analysis/protocol/snap/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - SNAP - SOURCES - SNAP.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer SNAP SOURCES SNAP.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/tcp/CMakeLists.txt b/src/packet_analysis/protocol/tcp/CMakeLists.txt index 6e9646a8bd..9935b63489 100644 --- a/src/packet_analysis/protocol/tcp/CMakeLists.txt +++ b/src/packet_analysis/protocol/tcp/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( PacketAnalyzer TCP_PKT SOURCES - TCP.cc - TCPSessionAdapter.cc - Plugin.cc - Stats.cc -) + TCP.cc + TCPSessionAdapter.cc + Plugin.cc + Stats.cc) diff --git a/src/packet_analysis/protocol/teredo/CMakeLists.txt b/src/packet_analysis/protocol/teredo/CMakeLists.txt index 028864160e..dd5682b1f5 100644 --- a/src/packet_analysis/protocol/teredo/CMakeLists.txt +++ b/src/packet_analysis/protocol/teredo/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek Teredo SOURCES - Teredo.cc - Plugin.cc + Teredo.cc + Plugin.cc BIFS - events.bif - functions.bif -) + events.bif + functions.bif) diff --git a/src/packet_analysis/protocol/udp/CMakeLists.txt b/src/packet_analysis/protocol/udp/CMakeLists.txt index 99a892a89c..3812077c37 100644 --- a/src/packet_analysis/protocol/udp/CMakeLists.txt +++ b/src/packet_analysis/protocol/udp/CMakeLists.txt @@ -2,9 +2,8 @@ zeek_add_plugin( Zeek UDP SOURCES - UDP.cc - UDPSessionAdapter.cc - Plugin.cc + UDP.cc + UDPSessionAdapter.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/vlan/CMakeLists.txt b/src/packet_analysis/protocol/vlan/CMakeLists.txt index ed37c128c4..afc2faab54 100644 --- a/src/packet_analysis/protocol/vlan/CMakeLists.txt +++ b/src/packet_analysis/protocol/vlan/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - VLAN - SOURCES - VLAN.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer VLAN SOURCES VLAN.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/vntag/CMakeLists.txt b/src/packet_analysis/protocol/vntag/CMakeLists.txt index 313d5b67bf..1143d525a7 100644 --- a/src/packet_analysis/protocol/vntag/CMakeLists.txt +++ b/src/packet_analysis/protocol/vntag/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - PacketAnalyzer - VNTag - SOURCES - VNTag.cc - Plugin.cc -) +zeek_add_plugin(PacketAnalyzer VNTag SOURCES VNTag.cc Plugin.cc) diff --git a/src/packet_analysis/protocol/vxlan/CMakeLists.txt b/src/packet_analysis/protocol/vxlan/CMakeLists.txt index 81623727bb..5a077f50f8 100644 --- a/src/packet_analysis/protocol/vxlan/CMakeLists.txt +++ b/src/packet_analysis/protocol/vxlan/CMakeLists.txt @@ -2,8 +2,7 @@ zeek_add_plugin( Zeek VXLAN SOURCES - VXLAN.cc - Plugin.cc + VXLAN.cc + Plugin.cc BIFS - events.bif -) + events.bif) diff --git a/src/packet_analysis/protocol/wrapper/CMakeLists.txt b/src/packet_analysis/protocol/wrapper/CMakeLists.txt index 6c37e2e35b..aaac07bbb3 100644 --- a/src/packet_analysis/protocol/wrapper/CMakeLists.txt +++ b/src/packet_analysis/protocol/wrapper/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_plugin( - Zeek - Wrapper - SOURCES - Wrapper.cc - Plugin.cc -) +zeek_add_plugin(Zeek Wrapper SOURCES Wrapper.cc Plugin.cc) diff --git a/src/probabilistic/CMakeLists.txt b/src/probabilistic/CMakeLists.txt index f8f948aea3..9c5a6e72bd 100644 --- a/src/probabilistic/CMakeLists.txt +++ b/src/probabilistic/CMakeLists.txt @@ -1,14 +1,13 @@ zeek_add_subdir_library( probabilistic SOURCES - BitVector.cc - BloomFilter.cc - CardinalityCounter.cc - CounterVector.cc - Hasher.cc - Topk.cc + BitVector.cc + BloomFilter.cc + CardinalityCounter.cc + CounterVector.cc + Hasher.cc + Topk.cc BIFS - bloom-filter.bif - cardinality-counter.bif - top-k.bif -) + bloom-filter.bif + cardinality-counter.bif + top-k.bif) diff --git a/src/session/CMakeLists.txt b/src/session/CMakeLists.txt index 752db51cbb..0bd82de16e 100644 --- a/src/session/CMakeLists.txt +++ b/src/session/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_subdir_library( - session - SOURCES - Session.cc - Key.cc - Manager.cc -) +zeek_add_subdir_library(session SOURCES Session.cc Key.cc Manager.cc) diff --git a/src/telemetry/CMakeLists.txt b/src/telemetry/CMakeLists.txt index b93bf72a1b..1c71ba42a3 100644 --- a/src/telemetry/CMakeLists.txt +++ b/src/telemetry/CMakeLists.txt @@ -1,7 +1 @@ -zeek_add_subdir_library( - telemetry - SOURCES - Manager.cc - BIFS - telemetry.bif -) +zeek_add_subdir_library(telemetry SOURCES Manager.cc BIFS telemetry.bif) diff --git a/src/zeekygen/CMakeLists.txt b/src/zeekygen/CMakeLists.txt index eee80e8a65..6095ed6757 100644 --- a/src/zeekygen/CMakeLists.txt +++ b/src/zeekygen/CMakeLists.txt @@ -1,16 +1,15 @@ zeek_add_subdir_library( zeekygen SOURCES - Manager.cc - Info.h - PackageInfo.cc - ScriptInfo.cc - IdentifierInfo.cc - Target.cc - Configuration.cc - ReStructuredTextTable.cc - utils.cc -) + Manager.cc + Info.h + PackageInfo.cc + ScriptInfo.cc + IdentifierInfo.cc + Target.cc + Configuration.cc + ReStructuredTextTable.cc + utils.cc) # Treat BIFs as builtin (alternative mode). bif_target(zeekygen.bif) diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt index 7ae503924f..0ed2fa2cf0 100644 --- a/testing/CMakeLists.txt +++ b/testing/CMakeLists.txt @@ -1,8 +1,10 @@ -install(DIRECTORY scripts/ DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/scripts - USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN "diff-*") +install( + DIRECTORY scripts/ + DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/scripts + USE_SOURCE_PERMISSIONS FILES_MATCHING + PATTERN "diff-*") install(FILES btest/random.seed DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/data) -if ( INSTALL_BTEST_PCAPS ) +if (INSTALL_BTEST_PCAPS) install(DIRECTORY btest/Traces/ DESTINATION ${ZEEK_CONFIG_BTEST_TOOLS_DIR}/data/pcaps) endif () diff --git a/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt b/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt index 9632726412..0a0badaf74 100644 --- a/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt +++ b/testing/btest/plugins/binpac-flowbuffer-frame-length-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Foo-FOO) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/conflict-plugin/CMakeLists.txt b/testing/btest/plugins/conflict-plugin/CMakeLists.txt index 7864acc7d1..7cfa0fdab2 100644 --- a/testing/btest/plugins/conflict-plugin/CMakeLists.txt +++ b/testing/btest/plugins/conflict-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Conflict-Plugin) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/file-plugin/CMakeLists.txt b/testing/btest/plugins/file-plugin/CMakeLists.txt index 6fc782e2ca..d41f1b3c51 100644 --- a/testing/btest/plugins/file-plugin/CMakeLists.txt +++ b/testing/btest/plugins/file-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT BRO_DIST ) +if (NOT BRO_DIST) message(FATAL_ERROR "BRO_DIST not set") endif () diff --git a/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt b/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt index 99604aeb2b..b83bc5526a 100644 --- a/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt +++ b/testing/btest/plugins/packet-protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Packet-Plugin-Demo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt b/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt +++ b/testing/btest/plugins/pktdumper-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt b/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt +++ b/testing/btest/plugins/pktsrc-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/protocol-plugin/CMakeLists.txt b/testing/btest/plugins/protocol-plugin/CMakeLists.txt index 53a50f3961..c7e685cd1e 100644 --- a/testing/btest/plugins/protocol-plugin/CMakeLists.txt +++ b/testing/btest/plugins/protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/reader-plugin/CMakeLists.txt b/testing/btest/plugins/reader-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/reader-plugin/CMakeLists.txt +++ b/testing/btest/plugins/reader-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/btest/plugins/writer-plugin/CMakeLists.txt b/testing/btest/plugins/writer-plugin/CMakeLists.txt index f611ab6b80..2ada85d2ef 100644 --- a/testing/btest/plugins/writer-plugin/CMakeLists.txt +++ b/testing/btest/plugins/writer-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt index 53a50f3961..c7e685cd1e 100644 --- a/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/protocol-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Foo) cmake_minimum_required(VERSION 3.5) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () diff --git a/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt index ce8eb32c96..76936614fa 100644 --- a/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/py-lib-plugin/CMakeLists.txt @@ -20,12 +20,12 @@ include_directories(BEFORE ${PYTHON_INCLUDE_DIR}) zeek_plugin_begin(Zeek PyLib) file(GLOB cc_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "plugin/src/*.cc") -foreach(file ${cc_files}) +foreach (file ${cc_files}) zeek_plugin_cc(${file}) endforeach () file(GLOB bif_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "plugin/src/*.bif") -foreach(file ${bif_files}) +foreach (file ${bif_files}) zeek_plugin_bif(${file}) endforeach () diff --git a/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt b/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt index e2637688d3..431677ab2b 100644 --- a/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt +++ b/testing/builtin-plugins/Files/zeek-version-plugin/CMakeLists.txt @@ -1,9 +1,8 @@ - project(Zeek-Plugin-Demo-Version) cmake_minimum_required(VERSION 3.15) -if ( NOT ZEEK_DIST ) +if (NOT ZEEK_DIST) message(FATAL_ERROR "ZEEK_DIST not set") endif () From 6cb391f9a2ed1ea49ef8dc7b9456f5d1fe4fde22 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Mon, 8 May 2023 12:44:31 +0200 Subject: [PATCH 33/35] zeek.bif: Add log2() and ceil() Closes #2930, #2931. --- NEWS | 2 ++ src/zeek.bif | 38 +++++++++++++++++++++++----- testing/btest/Baseline/bifs.math/out | 5 ++++ testing/btest/bifs/math.zeek | 7 +++++ 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index a46b1a60e9..e58a91fc0f 100644 --- a/NEWS +++ b/NEWS @@ -234,6 +234,8 @@ New Functionality can happen in packet loss or packet re-ordering scenarios. Such connections will have a ``^`` added to their history. +- New bifs for ``ceil()`` and ``log2()`` have been added. + Changed Functionality --------------------- diff --git a/src/zeek.bif b/src/zeek.bif index 65b6df3054..b0e3c6611a 100644 --- a/src/zeek.bif +++ b/src/zeek.bif @@ -1680,19 +1680,33 @@ function print_raw%(...%): bool ## ## Returns: The next lowest integer of *d* as :zeek:type:`double`. ## -## .. zeek:see:: sqrt exp ln log10 pow +## .. zeek:see:: ceil sqrt exp ln log2 log10 pow function floor%(d: double%): double %{ return zeek::make_intrusive(floor(d)); %} +## Computes the smallest integer greater or equal than the given :zeek:type:`double` value. +## For example, ``ceil(3.14)`` returns ``4.0``, and ``ceil(-3.14)`` +## returns ``-3.0``. +## +## d: The :zeek:type:`double` to manipulate. +## +## Returns: The next lowest integer of *d* as :zeek:type:`double`. +## +## .. zeek:see:: floor sqrt exp ln log2 log10 pow +function ceil%(d: double%): double + %{ + return zeek::make_intrusive(ceil(d)); + %} + ## Computes the square root of a :zeek:type:`double`. ## ## x: The number to compute the square root of. ## ## Returns: The square root of *x*. ## -## .. zeek:see:: floor exp ln log10 pow +## .. zeek:see:: floor ceil exp ln log2 log10 pow function sqrt%(x: double%): double %{ if ( x < 0 ) @@ -1710,7 +1724,7 @@ function sqrt%(x: double%): double ## ## Returns: *e* to the power of *d*. ## -## .. zeek:see:: floor sqrt ln log10 pow +## .. zeek:see:: floor ceil sqrt ln log2 log10 pow function exp%(d: double%): double %{ return zeek::make_intrusive(exp(d)); @@ -1722,19 +1736,31 @@ function exp%(d: double%): double ## ## Returns: The natural logarithm of *d*. ## -## .. zeek:see:: exp floor sqrt log10 pow +## .. zeek:see:: floor ceil sqrt exp log2 log10 pow function ln%(d: double%): double %{ return zeek::make_intrusive(log(d)); %} +## Computes the base 2 logarithm of a number. +## +## d: The argument to the logarithm. +## +## Returns: The base 2 logarithm of *d*. +## +## .. zeek:see:: floor ceil sqrt exp ln log10 pow +function log2%(d: double%): double + %{ + return zeek::make_intrusive(log2(d)); + %} + ## Computes the common logarithm of a number. ## ## d: The argument to the logarithm. ## ## Returns: The common logarithm of *d*. ## -## .. zeek:see:: exp floor sqrt ln pow +## .. zeek:see:: floor ceil sqrt exp ln log2 pow function log10%(d: double%): double %{ return zeek::make_intrusive(log10(d)); @@ -1748,7 +1774,7 @@ function log10%(d: double%): double ## ## Returns: The number *x* raised to the power *y*. ## -## .. zeek:see:: exp floor sqrt ln log10 +## .. zeek:see:: floor ceil sqrt exp ln log2 log10 function pow%(x: double, y: double%): double %{ return zeek::make_intrusive(pow(x, y)); diff --git a/testing/btest/Baseline/bifs.math/out b/testing/btest/Baseline/bifs.math/out index 8960b7c859..7ba88b0911 100644 --- a/testing/btest/Baseline/bifs.math/out +++ b/testing/btest/Baseline/bifs.math/out @@ -3,8 +3,13 @@ 2.0 -4.0 -3.0 +4.0 +3.0 +-3.0 +-2.0 1.772005 23.103867 1.144223 0.49693 +1.650765 22.21669 diff --git a/testing/btest/bifs/math.zeek b/testing/btest/bifs/math.zeek index 63999b9a27..d3fe0189f6 100644 --- a/testing/btest/bifs/math.zeek +++ b/testing/btest/bifs/math.zeek @@ -14,6 +14,11 @@ event zeek_init() print floor(c); print floor(d); + print ceil(a); + print ceil(b); + print ceil(c); + print ceil(d); + print sqrt(a); print exp(a); @@ -22,5 +27,7 @@ event zeek_init() print log10(a); + print log2(a); + print pow(a, b); } From 2a587ad9c90c1a3c55a8f18d699d5d3ef9b79910 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Tue, 9 May 2023 10:06:31 -0700 Subject: [PATCH 34/35] Updating submodule(s) [nomail] --- auxil/bifcl | 2 +- auxil/binpac | 2 +- auxil/broker | 2 +- auxil/btest | 2 +- auxil/filesystem | 2 +- auxil/gen-zam | 2 +- auxil/libunistd | 2 +- auxil/package-manager | 2 +- auxil/zeek-aux | 2 +- auxil/zeekctl | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/auxil/bifcl b/auxil/bifcl index b6f138be79..4ad7a29722 160000 --- a/auxil/bifcl +++ b/auxil/bifcl @@ -1 +1 @@ -Subproject commit b6f138be79f7d4408302b1297b0c63092b019773 +Subproject commit 4ad7a297223121b91c94caea6d28ca8888ec6dc1 diff --git a/auxil/binpac b/auxil/binpac index e820c29116..e4c7b7027d 160000 --- a/auxil/binpac +++ b/auxil/binpac @@ -1 +1 @@ -Subproject commit e820c29116a50a18079e783f47b96111eb7b5b0b +Subproject commit e4c7b7027d6053c66d8c278a8dbb9a7c2bac09ad diff --git a/auxil/broker b/auxil/broker index 4fc4c31592..000834f60a 160000 --- a/auxil/broker +++ b/auxil/broker @@ -1 +1 @@ -Subproject commit 4fc4c31592c4823d675314bc981931de9e246057 +Subproject commit 000834f60ab7540041c431a3657c23c7476e368d diff --git a/auxil/btest b/auxil/btest index f1183514cd..0c3cafb2ed 160000 --- a/auxil/btest +++ b/auxil/btest @@ -1 +1 @@ -Subproject commit f1183514cd12468d34cb01b147c8d1859a657c31 +Subproject commit 0c3cafb2ed638f88a446732fa03d90af9bcf796c diff --git a/auxil/filesystem b/auxil/filesystem index 3e5b930d96..8a2edd6d92 160000 --- a/auxil/filesystem +++ b/auxil/filesystem @@ -1 +1 @@ -Subproject commit 3e5b930d9690ef6b87dd034916598e0771f8688d +Subproject commit 8a2edd6d92ed820521d42c94d179462bf06b5ed3 diff --git a/auxil/gen-zam b/auxil/gen-zam index 8534f719a0..94eb4798e5 160000 --- a/auxil/gen-zam +++ b/auxil/gen-zam @@ -1 +1 @@ -Subproject commit 8534f719a0a384769383bbd4ad71c9eb2084823d +Subproject commit 94eb4798e5cb1b749e42c84f2d4034c16f6cb9db diff --git a/auxil/libunistd b/auxil/libunistd index 8011410a8a..2766a0c45a 160000 --- a/auxil/libunistd +++ b/auxil/libunistd @@ -1 +1 @@ -Subproject commit 8011410a8a2ba9b57a544d20efd077f83ecb7eda +Subproject commit 2766a0c45a6dbcdcf26cd1209a73a13323854961 diff --git a/auxil/package-manager b/auxil/package-manager index 5ade27d716..e1d8271af1 160000 --- a/auxil/package-manager +++ b/auxil/package-manager @@ -1 +1 @@ -Subproject commit 5ade27d716fd65342be592abf277eea114fefaa7 +Subproject commit e1d8271af1f499b3d072c99ae717d2593f551645 diff --git a/auxil/zeek-aux b/auxil/zeek-aux index fd326e9ced..1f16b5047b 160000 --- a/auxil/zeek-aux +++ b/auxil/zeek-aux @@ -1 +1 @@ -Subproject commit fd326e9ced4c078f19ddd32e0afcbe1fe4817a3c +Subproject commit 1f16b5047b7478cd38eeb8cae7e11479932135fe diff --git a/auxil/zeekctl b/auxil/zeekctl index 7178d15edb..98301f5433 160000 --- a/auxil/zeekctl +++ b/auxil/zeekctl @@ -1 +1 @@ -Subproject commit 7178d15edb4c737a5d6c28d100c0e457b7afed58 +Subproject commit 98301f54336144272d17439ea43b889ffd79a65f From c543387ce0d4949ed82e7c6f3dbfb9cd13dc562b Mon Sep 17 00:00:00 2001 From: zeek-bot Date: Wed, 10 May 2023 00:37:23 +0000 Subject: [PATCH 35/35] Update doc submodule [nomail] [skip ci] --- doc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc b/doc index ff282f3f78..6da8036beb 160000 --- a/doc +++ b/doc @@ -1 +1 @@ -Subproject commit ff282f3f7896745719e51223fb67f8f4ecd07a39 +Subproject commit 6da8036bebf01361acee8b15fc3239ccea3e15b4